Rate this post

Blind SQL Injection(Structured Query Language) là một phương pháp tấn công lỗ hổng SQL Injection tiến hành khai thác cơ sở dữ liệu thông qua các câu hỏi đúng hay sai và xác định đáp án dựa trên sự phản hồi ứng dụng trả về. Cuộc tấn công nhằm khai thác các website có cấu hình thông báo lỗi chung không rõ ràng, nhưng những website vẫn bị lỗ hổng SQL injection.

Các bài viết liên quan:

Khi kẻ tấn công khai thác SQL injection, đôi khi ứng dụng web hiển thị thông báo lỗi từ cơ sở dữ liệu phàn nàn rằng cú pháp của SQL Query không chính xác. Blind SQL injection gần giống với SQL Injection bình thường, điểm khác biệt duy nhất là cách dữ liệu được truy xuất từ ​​cơ sở dữ liệu. Khi cơ sở dữ liệu không xuất dữ liệu ra trang web, kẻ tấn công buộc phải đánh cắp dữ liệu bằng cách hỏi cơ sở dữ liệu một loạt câu hỏi đúng hoặc sai. Điều này làm cho việc khai thác SQL Injection khó khăn hơn. .

Tổng quan mối đe dọa

Tương tự như đối với SQL Injection

Các ví dụ

Kẻ tấn công có thể xác minh xem một yêu cầu đã gửi trả về đúng hay sai theo một số cách:

Dựa trên nội dung

Sử dụng một trang đơn giản, hiển thị một bài báo với ID đã cho làm tham số, kẻ tấn công có thể thực hiện một vài thử nghiệm đơn giản để xác định xem trang có dễ bị tấn công SQL Injection hay không.

URL mẫu:

http://newspaper.com/items.php?id=2

gửi truy vấn sau đến cơ sở dữ liệu:

SELECT title, description, body FROM items WHERE ID = 2

Sau đó, kẻ tấn công có thể cố gắng đưa vào một truy vấn trả về ‘false’:

http://newspaper.com/items.php?id=2 and 1=2

Bây giờ truy vấn SQL sẽ giống như sau:

SELECT title, description, body FROM items WHERE ID = 2 and 1=2

Nếu ứng dụng web dễ bị SQL Injection, thì có thể nó sẽ không trả về bất cứ thứ gì. Để đảm bảo, kẻ tấn công sẽ đưa ra một truy vấn sẽ trả về “true”:

http://newspaper.com/items.php?id=2 and 1=1

Nếu nội dung của trang trả về ‘true’ khác với nội dung của trang trả về ‘false’, thì kẻ tấn công có thể phân biệt khi nào truy vấn được thực thi trả về true hay false.

Khi điều này đã được xác minh, các giới hạn duy nhất là các đặc quyền do quản trị viên cơ sở dữ liệu thiết lập, cú pháp SQL khác và trí tưởng tượng của kẻ tấn công.

Dựa trên thời gian

Kiểu tiêm SQL mù này dựa vào việc cơ sở dữ liệu tạm dừng trong một khoảng thời gian xác định, sau đó trả về kết quả, cho biết thực thi truy vấn SQL thành công. Sử dụng phương pháp này, kẻ tấn công liệt kê từng chữ cái của phần dữ liệu mong muốn bằng cách sử dụng logic sau:

Nếu chữ cái đầu tiên của tên cơ sở dữ liệu đầu tiên là “A”, hãy đợi trong 10 giây.

Nếu chữ cái đầu tiên của tên cơ sở dữ liệu đầu tiên là “B”, hãy đợi trong 10 giây. Vân vân.

Microsoft SQL Server

http://www.site.com/vulnerable.php?id=1' waitfor delay '00:00:10'--

MySQL

SELECT IF(expression, true, false)

Sử dụng một số thao tác mất thời gian, ví dụ: BENCHMARK (), sẽ trì hoãn phản hồi của máy chủ nếu biểu thức là True.

BENCHMARK(5000000,ENCODE('MSG','by 5 seconds'))

sẽ thực hiện chức năng ENCODE 5000000 lần.

Tùy thuộc vào hiệu suất và tải của máy chủ cơ sở dữ liệu, sẽ chỉ mất một chút thời gian để hoàn thành thao tác này. Điều quan trọng là, theo quan điểm của kẻ tấn công, phải chỉ định số lần lặp lại hàm BENCHMARK () đủ cao để ảnh hưởng đến thời gian phản hồi cơ sở dữ liệu theo cách đáng chú ý.

Kết hợp ví dụ của cả hai truy vấn:

1 UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null) FROM users WHERE user_id = 1;

Nếu phản hồi cơ sở dữ liệu mất nhiều thời gian, chúng tôi có thể mong đợi rằng ký tự mật khẩu người dùng đầu tiên với user_id = 1 là ký tự ‘2’.

(CHAR(50) == '2')

Sử dụng phương pháp này cho các ký tự còn lại, có thể liệt kê toàn bộ mật khẩu được lưu trữ trong cơ sở dữ liệu. Phương pháp này hoạt động ngay cả khi kẻ tấn công đưa vào các truy vấn SQL và nội dung của trang dễ bị tấn công không thay đổi.

Rõ ràng, trong ví dụ này, tên của các bảng và số cột đã được chỉ định. Tuy nhiên, có thể đoán chúng hoặc kiểm tra bằng phương pháp thử và sai.

Cơ sở dữ liệu khác với MySQL cũng có các chức năng dựa trên thời gian cho phép chúng được sử dụng cho các cuộc tấn công dựa trên thời gian:

  • MS SQL: 'WAIT FOR DELAY '0:0:10''
  • PostgreSQL: pg_sleep()

Việc thực hiện các cuộc tấn công Blind SQL Injection theo cách thủ công là rất tốn thời gian, nhưng có rất nhiều công cụ tự động hóa quá trình này. Một trong số đó là SQLMap được phát triển một phần trong chương trình tài trợ OWASP. Mặt khác, các công cụ loại này rất nhạy cảm với những sai lệch dù là nhỏ so với quy luật. Điêu nay bao gôm:

  • quét các cụm trang web khác, nơi đồng hồ không được đồng bộ hóa một cách lý tưởng,
  • Các dịch vụ WWW trong đó phương pháp thu nhận đối số đã được thay đổi, ví dụ: từ /index.php?ID=10 đến / ID, 10

Lấy dấu vân tay cơ sở dữ liệu từ xa

Nếu kẻ tấn công có thể xác định khi nào truy vấn của họ trả về Đúng hay Sai, thì họ có thể lấy dấu vân tay của RDBMS. Điều này sẽ làm cho toàn bộ cuộc tấn công dễ dàng hơn nhiều. Nếu phương pháp dựa trên thời gian được sử dụng, điều này sẽ giúp xác định loại dữ liệu cơ sở đang được sử dụng. Một phương pháp phổ biến khác để thực hiện việc này là gọi các hàm sẽ trả về ngày hiện tại. MySQL, MSSQL và Oracle có các hàm khác nhau cho điều đó, tương ứng now (), getdate () và sysdate ().

Leave a Reply

Call now
%d bloggers like this: