Tới nội dung chính
Danh mục
Hệ quản trị SQL

SQL Injection là gì? Blind sql injection là gì?

Cách tấn công mạng này đã quá quen thuộc, nhưng thực sự chưa nhiều bạn nắm rõ về SQL Injection là gì cũng như cách phòng chống sao cho hiệu quả. Bài viết này tôi sẽ đề cập về khái niệm cũng như đưa ra ví dụ và cách phòng tránh. Cùng bắt đầu nào.

1. SQL Injection là gì?

Hiểu đơn giản SQL Injection là một cách hack một website. Lúc này hacker sẽ inject các mã độc như SQL query/command vào input. Sau đó đưa vào website xử lý và hacker có thể đăng nhập vào website không cần pass hay username, remote execution (thực thi từ xa), sỡ hữu root SQL server và dump data.

Công cụ thường được sử dụng sẽ là các công cụ trình duyệt web như Internet Explorer, Lynx,..

Bài labs về SQL injection

Labs là một bài thí nghiệm. Để bạn có thể dễ dàng hình dung ra cách mà hacker sử dụng SQL Injection để hack website của bạn, bạn có thể theo dõi bài labs thông qua link dưới đây.

https://www.hacksplaining.com/exercises/sql-injection

2. Các bước tiến hành SQL Injection

2.1 Tìm kiếm mục tiêu

Mục tiêu sẽ là các trang web cho phép bạn có thể submit dữ liệu. Ví dụ là các trang web có thể login, search, gửi feedback,..

Cách xem:

http://yoursite.com/index.asp?id=10

Một số ẩn đi các tham số thông qua field ẩn, bạn phải xem qua HTML mới có thể thấy được. Ví dụ:

<FORM action=Search/search.asp method=post>

<input type=hidden name=A value=C>

</FORM>

2.2 Kiểm tra điểm yếu của trang web

Khi đã xác định được đối tượng có thể hack bạn hãy thử submit các field id,. hoặc field username, password bằng hi’ or 1=1–

Login: hi’ or 1=1–

Password: hi’ or 1=1–

http://yoursite.com/index.asp?id=hi’ or 1=1–

Nếu site bạn chọn tham số bị ẩn, hãy download source HTML của site, lưu trên ổ đĩa cứng và thay đổi lại URL. Ví dụ:

<FORM action=http://yoursite.com/Search/search.asp method=post>

<input type=hidden name=A value=”hi’ or 1=1–“>

</FORM>

Nếu bước này thành công bạn sẽ có thể đăng nhập vào mà không cần tạo tài khoản.

2.3 Lý giải vì sao “or 1=1 — có thể vượt qua phần kiểm tra đăng nhập?

Ví dụ một trang ASP được liên kết với một ASP trang khác thì chúng ta có url như sau:

http://yoursite.com/index.asp?category=cookies

Ở URL trên, biến “Category” được gán một giá trị là “cookies”. Tôi ví dụ mã ASP của trang đó sẽ như thế này:

v_cat = request(“category”)

sqlstr=”SELECT * FROM product WHERE PCategory='” & v_cat & “‘”

set rs=conn.execute(sqlstr)

v_cat sẽ chứa giá trị của biến request(“category”) là ‘cookies’ và câu lệnh SQL tiếp là:

SELECT * FROM product WHERE PCategory=’cookies’

Dòng truy vấn dữ liệu (query) trên sẽ trả về một tập resultset chứa một hay nhiều dòng phù hợp với điều kiện WHERE PCategory=’cookies’

Nếu thay đổi URL trên thành http://yoursite.com/index.asp?category=cookies’ or 1=1–, biến v_cat sẽ chứa giá trị “cookies’ or 1=1– ” và dòng lệnh SQL query tiếp sẽ là:

SELECT * FROM product WHERE PCategory=’cookies’ or 1=1–‘

Thảo Larskanis

@Thảo Larskanis

Lĩnh vực công nghệ thông tin, đặc biệt là cấu trúc dữ liệu ngày càng quan trọng và trở nên cần thiết hơn với nhiều doanh nghiệp. Nhận thấy rõ được tầm quan trọng của SQL, Thảo Nguyễn - người đã có nhiều năm học tập và làm việc trong lĩnh vực công nghệ thông tin đã quyết định thành lập một website chia sẻ kiến thức cũng như kinh nghiệm của bản thân về lĩnh vực SQL đến cho những bạn có đam mê và muốn hiểu rõ hơn về lĩnh vực này.