Blind sql injection là gì

     
Tấn công nhúng mã SQL, hay nói một cách khác là SQL injection (Structured Query Language injection), là 1 dạng tấn công phổ cập nhất hiện tại nay, nhằm mục tiêu vào cơ sở dữ liệu SQL. Trong số dạng tiến công SQL injection, Blind SQL injection là dạng khôn cùng phổ biến. Xuất phát từ các việc tối ưu khai quật lỗ hổng Blind SQL injection trong truy vấn vấn sử dụng mệnh đề ORDER BY, bài viết này trình bày về các cách thức khai thác, về tối ưu Blind SQL injection nói thông thường và lỗ hổng Blind SQL trong truy vấn vấn thực hiện mệnh đề ORDER BY dành riêng đồng thời đưa ra một góc nhìn, phương thức tiếp cận mới trong câu hỏi tối ưu hóa tiến công này.

Bạn đang xem: Blind sql injection là gì

Khai thác lỗ hổng Blind SQL injection trong truy vấn vấn thực hiện mệnh đề ORDER BY

Mệnh đề ORDER BY trong truy nã vấn SQL

Thông thường, để truy xuất lấy tài liệu trên máy chủ CSDL, chúng ta thường sử dụng mệnh đề “SELECT”. Cấu tạo của một tróc nã vấn SQL sử dụng mệnh đề “SELECT” như sau:


*

Trong đó bao hàm nhiều mệnh đề không còn xa lạ như mệnh đề WHERE nhằm lọc đk trong truy vấn vấn, xuất xắc mệnh đề LIMIT để số lượng giới hạn số lượng tác dụng trả về, ngoại trừ ra, trong đó còn có mệnh đề ORDER BY. Mệnh đề này được thực hiện để bố trí dữ liệu trước lúc trả về theo ước ao muốn. Ví dụ, triển khai 2 câu lệnh: “SELECT * FROM users ORDER BY id” (1) cùng “SELECT * FROM users ORDER BY point” (2). Phân tích công dụng trả về của 02 câu lệnh, vào câu lệnh thiết bị nhất, những dòng (row) trả về được bố trí theo số id, theo chiều tăng dần. Với câu lệnh thứ hai, những dòng trả về được sắp xếp theo số point. Trường vừa lòng muốn sắp xếp theo máy tự giảm dần, chỉ việc thêm DESC vào sau cùng mệnh đề ORDER BY. Như vậy, thuộc một nội dung trả về, tùy theo cách bố trí dữ liệu mà mỗi truy nã vấn sẽ tạo ra một hình thái kết quả khác nhau (về mặt thiết bị tự).

Lỗ hổng SQL Injection trong truy vấn thực hiện mệnh đề ORDER BY

Thông thường, dữ liệu người tiêu dùng thường được sản xuất mệnh đề WHERE, tuy vậy trong một trong những trường hợp, ứng dụng sẽ chất nhận được người dùng tùy thay đổi việc bố trí dữ liệu (theo tên, điểm số…). Nếu như lập trình viên cách xử trí không xuất sắc sẽ dẫn đến phạm phải lỗ hổng SQL injection.Hình 1 cho thấy một lấy ví dụ về mã nguồn có thực hiện mệnh đề ORDER BY.


*
Hình 1: Mã nguồn chương trình

Biến $sort từ người tiêu dùng được thêm trực tiếp vào sau mệnh đề ORDER BY. Như vậy, kẻ tấn công hoàn toàn rất có thể điều khiển được phần sau của câu tróc nã vấn. Lưu ý rằng, mệnh đề ORDER BY dùng làm sắp xếp, thao tác làm việc các dữ liệu đã có (ở phần trước của mệnh đề ORDER BY), cũng chính vì thế ko thể thực hiện kỹ thuật UNION để lấy thêm tài liệu (như tiến công SQL Injection thông thường). Vì vậy, để khai quật lỗ hổng SQL injection vào trường đúng theo này đề xuất sử dụng phương pháp Blind SQL Injection.

Trong tấn công khai minh bạch thác lỗi Blind SQL injection, tin tức không được hiển thị trực tiếp trong dung nội trả về (thông qua thông tin lỗi, xuất xắc qua thông tin rất có thể thấy được tự CSDL). Vì đó, kẻ tấn công không thể thấy được tài liệu được trích xuất trường đoản cú CSDL. Vậy vào đó, kẻ tấn công sử dụng cấu trúc điều kiện trong truy vấn, từ kia dẫn đến các nội dung trả về không giống nhau, và tiếp tục thực hiện tại phân tích công dụng trả về từ đánh giá đúng, sai để tìm ra sự khác biệt. Sư biệt lập đó hoàn toàn có thể về checksum, cấu trúc HTML, tự khóa hoặc hành động (thời gian trả về). Từ việc phân trò trống sai không giống này, kẻ tấn công rất có thể trích xuất ra được dữ liệu mong muốn. Phía sau mệnh đề ORDER BY bao gồm 03 dạng: col_name (Tên cột), expr (biểu thức), position (số thiết bị tự). Ví như như col_name, xuất xắc position là một hằng số cần thiết can thiệp, thì expr sẽ cho ta nhiều năng lực thực hiện đo lường và thống kê sau mệnh đề ORDER BY. Trong trường phù hợp này, kẻ tấn công sẽ phối hợp sử dụng giá chỉ trị đk và sắp xếp dữ liệu để gia công sai lệch hiển thị của ứng dụng. Ví dụ nhằm kiểm tra vần âm đầu của cực hiếm tên database có phải là ký trường đoản cú ‘A’ tốt không, kẻ tấn công sẽ sử dụng:?sort= if((substr(database(),1,1)='A'),id,point). Lúc ấy câu truy vấn được thực thi sẽ là:SELECT * FROM users ORDER BY if(substr(database,1,1)=’A’,id,point). Vào đó, đoạnsubstr(database,1,1)=’A’là giá chỉ trị đk kiểm tra xem chữ cái đầu của quý giá tên CSDL liệu có phải là ký tự ‘A’ giỏi không, nếu đúng sẽ trả về id (thực hiện bố trí theo cột id), trường hợp sai đang trả về point (thực hiện thu xếp theo cột point). Trong ví dụ, tên csdl là: sql_orderby đề nghị ký trường đoản cú trả về đang là ‘s’ (Hình 2).


*
Hình 2: Trường vừa lòng đúng (‘s’ = ‘s’). Bố trí theo cột id.

Xem thêm: Bộ Nồi Lẩu Điện Nội Địa Nhật Nội Địa Đã Qua Sử, Nồi Nấu Lẩu Nội Địa Nhật Zojirushi


*
Hình 3: Trường thích hợp đúng (‘s’ != ‘A’). Sắp xếp theo cột point.

Trong Hình 3, ví như trường hòa hợp đúng, dữ liệu sẽ trả về dòng gồm id là 1 lên trước mẫu id là 2, nếu sai thì dữ liệu trả về dòng bao gồm id là 2 lên trước loại id là 1. Bằng bài toán phân tích các dữ liệu trả về này, kẻ tấn công sẽ biết được chữ cái đầu của quý hiếm tên CSDL liệu có phải là ký tự ‘A’ hay không.

Phương pháp tối ưu hóa tấn công Blind SQL injection bằng cách giảm con số yêu cầu buộc phải gửi

Trong lấy ví dụ như trên, kẻ tiến công sẽ liên tục sử dụng phương pháp dùng những giá trị điều kiện để lấy ra giá tốt trị chính xác chữ chiếc đầu của quý giá tên CSDL. Vậy thể, kẻ tiến công lần lượt thử với toàn cục các ký tự thấy được được vào bảng mã ASCII:


*

Trong quá trình truy vấn, nếu công dụng trả về là đúng thì giới hạn lại. Vào bảng mã ASCII, có tầm khoảng 128 cam kết tự nhận thấy được, vì thế kẻ tấn công sẽ phải thực hiện gửi buổi tối đa 128 yêu mong cho một ký kết tự. Trên thế giới đã có rất nhiều kỹ thuật nhằm mục tiêu tối ưu hóa, giảm con số yêu cầu đề xuất gửi.

Dưới dây là 3 phương thức tối ưu hóa con số yêu cầu buộc phải gửi của tấn công Blind SQL injection:

Tối ưu hóa bằng phương pháp sử dụng thuật toán tra cứu kiếm nhị phân

Phương pháp này dựa vào thuật toán kiếm tìm kiếm nhị phân (Binary Search). Thuật toán này được áp dụng để kiếm tìm kiếm một phần tử vào một list đã được sắp xếp. Rất có thể thấy rằng, họ đang đi kiếm giá trị của vần âm trong tập danh sách những ký tự vẫn biết. Các ký tự này hoàn toàn có thể sắp xếp bằng cách chuyển thay đổi về giá trị trong bảng mã ASCII.

Xem thêm: Mách Bạn 3 Cách Chụp Màn Hình Htc 8X, Mách Bạn 3 Cách Chụp Màn Hình Htc Dễ Dàng Nhất

Với khoảng chừng 128 ký kết tự, trong những số ấy có 96 ký kết tự dạng nhận thấy được ( 26

*
Hình 4: Thuật toán tra cứu kiếm nhị phân
*

*

*
Hình 5: ví dụ như với từ CHARACTER_SET
*

*

*

*

*
Hình 6: Áp dụng lấy ký kết tự thứ nhất trong tên CSDL.

Thứ tự thu xếp là: 4 5 1 87 6 3 2. Bỏ vô bảng ánh xạ