e) Kết luận
2.1.3.2 Thực hiện tấn công Blind SQL Injection dựa trên độ trễ truy vấn
Tấn công Blind SQL Injection dựa vào thời gian phản hồi là cách tiến hành khai thác các lỗi Blind SQL Injection mạnh nhất. Trong nhiều trường hợp tuy truy vấn có chứa điểm yếu, nhưng kết quả của truy vấn “sạch” với truy vấn “độc hại” không có sự khác biệt đáng kể, do đó rất khó để sử dụng Blind SQL Injection dựa trên phản hồi.
Bản chất của phương thức tấn công này là thay vì sử dụng nội dung kết quả truy vấn để phân biệt trường hợp true/false của mệnh đề suy luận được chèn thì nó sử dụng sự chênh lệch về thời gian phản hồi của ứng dụng để phân biệt. Nếu điều kiện đúng thì sẽ thực hiện mệnh đề true (với thời gian t), sai thực hiện theo mệnh đề false ( với thời gian 5t,10t hay 15t tùy theo kẻ tấn công quy định). Sau đó kẻ tấn công chỉ cần so sánh thời gian thực hiện truy vấn để có thể kết luận được phép thử của mình là đúng hay sai. Từ đó, kẻ tấn công có thể dò ra được nhiều thông tin về cơ sở dữ liệu website.
Có hai phương pháp để sinh độ trễ trong truy vấn:
- Gọi các hàm trì hoãn thực thi được các hệ quản trị cơ sở dữ liệu hỗ trợ. - Sử dụng các truy vấn “lớn”.
SVTH: Vĩnh Thái Cường - 49THM Page 31 Gọi các hàm trì hoãn thực thi :
Trên các hệ quản trị cơ sở dữ liệu thường có một số hàm có thể lợi dụng để sinh độ trễ về thời gian thực thi truy vấn. Ví dụ:
- Trong MySQL ta có BENCHMARK(N, expression) hoặc ở phiên bản
5.0.12 trở đi có thêm SLEEP(seconds)
- Trong SQL Server có WAITFOR DELAY ‘hh:mm:ss’
- Trong Oracle có DBMS_LOCK.SLEEP(seconds)
Trong MySQL chúng ta sử dụng các cấu trúc điều kiện sau ứng với trường hợp tham số kiểu xâu ký tự hoặc số :
- Trường hợp tham số có kiểu xâu ký tự ta có thể dùng cấu trúc sau :
‘ union select if(expression, true_exp, false_exp)
- Trong đó expression là mệnh đề suy luận.
- True_exp: câu lệnh/giá trị ứng với trường hợp mệnh đề suy luận nhận giá trị true.
- False_exp: câu lệnh/giá trị ứng với trường hợp mệnh đề suy luận nhận giá trị false.
- Trường hợp tham số kiểu số ta có thể sử dụng cấu trúc sau :
If(expression, true_exp, false_exp)
- Trong đó expression là mệnh đề suy luận.
- True_exp: câu lệnh/giá trị ứng với trường hợp mệnh đề suy luận nhận giá trị true.
- False_exp: câu lệnh/giá trị ứng với trường hợp mệnh đề suy luận nhận giá trị false.
SVTH: Vĩnh Thái Cường - 49THM Page 32 Sử dụng các truy vấn lớn
Các truy vấn lớn ở đây được hiểu là các truy vấn trên những tập dữ liệu rất lớn, ví dụ dữ liệu metadata của database. Khi thực hiện những truy vấn này bộ xử lý phải làm việc nhiều, và truy vấn sẽ bị trì hoãn một cách rất “tự nhiên”.
Truy vấn lớn hay dùng nhất là nối chéo các bảng dữ liệu (tích Cartesian) làm tập số lượng kết quả đã tăng lên rất lớn …
Mục tiêu thường được sử dụng nhất là bảng
information_schema.tables hay information_schema.columns với số lượng thông tin rất lớn. Nếu nối chéo các bảng này với nhau sẽ cho ta một số lượng dữ liệu khổng lồ, có thể nhận thấy độ trễ bất thường khi thực hiện truy vấn.