sqlmap Cheat Sheet

sqlmap là công cụ dòng lệnh cho phép kiểm tra các lỗ hổng SQL injection trên nhiều loại hệ quản trị cơ sở dữ liệu (DBMS) khác nhau như MySQL, Oracle, PostgreSQL, Microsoft SQL Server, v.v.


1. Quy trình khai thác tiêu chuẩn (Workflow)

Hiểu các bước từ dò quét đến chiếm quyền điều khiển cơ sở dữ liệu.

graph TD A[Xác định mục tiêu: URL/Request File] --> B[Kiểm tra tính khả thi của Injection] B --> C[Nhận diện hệ quản trị CSDL - Fingerprinting] C --> D[Khai thác thông tin - Enumeration] D --> E[Trích xuất dữ liệu - Dumping] E --> F[Chiếm quyền HĐH - OS Access/Shell]

2. Các lệnh cơ bản & Xác định mục tiêu

Đây là bước đầu tiên để sqlmap biết cần tấn công vào đâu.

LệnhÝ nghĩa
-u "URL"Kiểm tra một URL cụ thể.
-r file.txtĐọc request từ một file (thường xuất từ Burp Suite).
-g "dork"Tìm kiếm mục tiêu thông qua Google Dork.
--data="data"Kiểm tra các tham số trong phương thức POST.
--cookie="jsessionid=..."Sử dụng Cookie để xác thực khi quét.
--batchTự động chọn các thiết lập mặc định (không hỏi người dùng).
--flush-sessionXóa bộ nhớ đệm (cache) của các lần quét trước đó.

3. Khai thác thông tin (Enumeration)

Sau khi xác định được lỗ hổng, dùng các lệnh này để lấy dữ liệu.

Cấu trúc phân cấp lấy dữ liệu

  • --dbs: Liệt kê tất cả các database.
  • --current-db: Xem tên database hiện tại đang được sử dụng.
  • -D <db_name> --tables: Liệt kê các bảng trong database chỉ định.
  • -D <db_name> -T <table_name> --columns: Liệt kê các cột trong bảng.
  • -D <db_name> -T <table_name> -C <col1,col2> --dump: Trích xuất dữ liệu.
  • --dump-all: Trích xuất toàn bộ dữ liệu trong database (Cực kỳ chậm và dễ bị phát hiện).

Thông tin hệ thống

  • --users: Liệt kê các người dùng của DBMS.
  • --passwords: Liệt kê và thử bẻ khóa mật khẩu người dùng DBMS.
  • --privileges: Kiểm tra quyền hạn của người dùng hiện tại.
  • --is-dba: Kiểm tra xem người dùng hiện tại có phải quyền Admin (DBA) không.

4. Kỹ thuật Injection (Techniques)

sqlmap hỗ trợ 6 kỹ thuật chính. Bạn có thể chỉ định bằng tham số --technique.

Ký hiệuTên kỹ thuậtGiải thích
BBoolean-based blindDựa trên câu hỏi Đúng/Sai trong phản hồi của trang web.
EError-basedDựa trên thông báo lỗi chi tiết của CSDL trả về.
UUnion query-basedSử dụng toán tử UNION để gộp kết quả vào dữ liệu hiển thị.
SStacked queriesChạy nhiều câu lệnh SQL cùng lúc (dùng dấu ;).
TTime-based blindDựa trên độ trễ thời gian phản hồi (sleep).
QInline queriesNhúng câu truy vấn vào trong một truy vấn khác.

5. Tùy chỉnh Request (Cấu hình nâng cao)

Để vượt qua WAF/IDS hoặc giả lập trình duyệt người dùng.

Giả lập Header

  • --user-agent="Mô tả trình duyệt": Thay đổi User-Agent.
  • --random-agent: Sử dụng ngẫu nhiên một User-Agent hợp lệ từ file dữ liệu.
  • --referer="URL": Giả lập nguồn trang dẫn tới (Referer).
  • --proxy="http://127.0.0.1:8080": Chạy qua proxy (ví dụ Burp Suite).

Mức độ dò quét


6. Vượt qua WAF/IPS (Tamper Scripts)

sqlmap cung cấp các script “Tamper” để mã hóa câu lệnh SQL nhằm đánh lừa tường lửa.

Cú pháp: --tamper="tên_script"

Tên ScriptCông dụng
space2commentThay thế khoảng trắng bằng /**/.
randomcaseNgẫu nhiên viết hoa/thường (ví dụ: SeLeCt).
base64encodeMã hóa toàn bộ câu lệnh sang Base64.
charencodeMã hóa URL các ký tự.
apostrophemaskThay thế dấu nháy đơn ' bằng mã hóa UTF-8.

7. Khai thác hệ điều hành (Post-Exploitation)

Nếu người dùng CSDL có quyền cao (như sa hoặc root), bạn có thể can thiệp vào hệ thống tệp và lệnh của server.


8. Tối ưu hóa hiệu suất (Performance)

Để tăng tốc độ dò quét, đặc biệt là với các kỹ thuật Blind.

  • --threads=10: Sử dụng nhiều luồng xử lý song song (Tối đa là 10).
  • -o: Bật tất cả các tùy chọn tối ưu hóa.
  • --keep-alive: Sử dụng kết nối HTTP(s) bền vững, giảm tải việc bắt tay kết nối lại.
  • --null-connection: Lấy độ dài phản hồi mà không cần tải toàn bộ nội dung body.

9. Mẹo thực chiến (Pro Tips)

Sử dụng file Request từ Burp Suite

Đây là cách chuyên nghiệp nhất để xử lý các request phức tạp (nhiều header, dữ liệu POST lồng nhau).

  1. Chuột phải vào request trong Burp Suite -> Save item.
  2. Chạy sqlmap: sqlmap -r request.txt --batch.

Tấn công một tham số cụ thể

Nếu URL có nhiều tham số nhưng bạn chỉ muốn kiểm tra một cái để tránh bị block: sqlmap -u "http://site.com/id=1&type=2" -p id

Sử dụng dấu * để chỉ định điểm chèn

Nếu tham số nằm trong URL (SEO friendly URLs): sqlmap -u "http://site.com/user/1*/profile" (sqlmap sẽ kiểm tra tại vị trí số 1).


10. Bảng tra cứu nhanh các thông số DBMS phổ biến

DBMSDefault PortAdmin User
MySQL3306root
MSSQL1433sa
Oracle1521SYS, SYSTEM
PostgreSQL5432postgres