【工具】sqlmap 中文手冊 使用教程



日期:2019-07-28 09:27:27
更新:
作者:Bay0net
介紹:自己翻譯了一下,做個備忘。


0x01、 基本信息

官網

sqlmap: automatic SQL injection and database takeover tool

注入類型

  • 基於布爾的盲注:即可以根據返回頁面判斷條件真假的注入;

  • 基於時間的盲注:即不能根據頁面返回內容判斷任何信息,用條件語句查看時間延遲語句是否執行(即頁面返回時間是否增加)來判斷;

  • 基於報錯注入:即頁面會返回錯誤信息,或者把注入的語句的結果直接返回在頁面中;

  • 聯合查詢注入:可以使用union的情況下的注入;

  • 堆查詢注入:可以同時執行多條語句的執行時的注入。

支持的數據庫

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

0x02、使用方法

基本流程

# 爆所有數據庫
sqlmap -r 1.txt --dbs

# 爆表名
sqlmap -r 1.txt -D dvwa --tables

# 爆字段名
sqlmap -r 1.txt -D dvwa -T users --columns

# 爆字段內容
sqlmap -r 1.txt -D dvwa -T users -C user,password --dump

Target

-d      # 直接連接數據庫
-u      # 目標 URL
-l      # 從 Burp 或者 WebScarab 加載一個日志文件
-x      # 從遠程網站地圖(sitemap).xml 文件加載目標
-r      # 從文件中加載目標【重要】
-g      # 從 google 結果中加載目標
-c      # 從配置文件(.ini)中加載目標

Request

指定如何連接目標的 URL

--method=METHOD     定制 http 方法 (e.g. PUT)
--data=DATA         通過 POST 發送數據 (e.g. "id=1")
--param-del=PARA..  用特殊字符拆分字符串 (e.g. &)
--cookie=COOKIE     定制 cookie (e.g. "PHPSESSID=a8d127e..")
--cookie-del=COO..  定制分割 cookie 的字符 (e.g. ;)
--drop-set-cookie   忽略返回包中的 Set-Cookie
--user-agent=AGENT  定制 User-Agent 
--random-agent      使用隨機的 UA
--host=HOST         設置 host 的值
--referer=REFERER   設置 referer 的值
-H HEADER, --hea..  額外的請求頭 (e.g. "X-Forwarded-For: 127.0.0.1")
--headers=HEADERS   額外的請求頭,使用 \n 來分割 (e.g. "Accept-Language: fr\nETag: 123")

--auth-type=AUTH..  身份認證類型 (Basic, Digest, NTLM or PKI)
--auth-cred=AUTH..  HTTP 身份憑證 (name:password)
--auth-file=AUTH..  從文件中載入 PEM 證書文件

--ignore-code=IG..  忽略狀態碼 (e.g. 401)
--ignore-proxy      忽略系統代理
--ignore-redirects  忽略重定向
--ignore-timeouts   忽略超時的鏈接

--proxy=PROXY       設置一個代理

--delay=DELAY       設置兩個 HTTP 請求之間的延遲
--timeout=TIMEOUT   設置超時時間 (default 30)
--retries=RETRIES   設置超時重試時間 (default 3)
--randomize=RPARAM  隨機改變給定的參數的值

--safe-url=SAFEURL  在測試的時候,頻繁的訪問某 URL(偽裝是真人)
--safe-post=SAFE..  在測試的時候,頻繁的 POST 數據
--safe-req=SAFER..  從文件中加載一個安全的 http 請求
--safe-freq=SAFE..  在兩次請求中間,加入一個訪問請求
--skip-urlencode    忽略 URL 編碼

--csrf-token=CSR..  保留 anti-CSRF token
--csrf-url=CSRFURL  訪問一個 URL,來獲取 anti-CSRF token
--force-ssl         強制使用 SSL/HTTPS
--chunked           分塊傳輸 POST 的請求
--hpp               使用 http 參數污染

Optimization

有倆不知道咋做到的,有時間抓包看看。。

-o                  打開所有優化開關
--predict-output    預測常見的查詢輸出??
--keep-alive        使用一個長連接,不中斷
--null-connection   在不使用實體 HTTP 請求的情況下獲取頁面長度??
--threads=THREADS   最大線程數 (default 1)

Injection

-p TESTPARAMETER    指定測試的參數
--skip=SKIP         跳過指定的參數
--skip-static       如果參數是靜態的,那么就跳過

--dbms=DBMS         指定后端的數據庫類型
--dbms-cred=DBMS..  指定數據庫的賬號密碼 (user:password)

--os=OS             指定后端的操作系統

--no-cast           關閉 payload casting 機制
--no-escape         關閉 string escaping 機制
--prefix=PREFIX     在 payload 上加個前綴
--suffix=SUFFIX     在 payload 上加個后綴
--tamper=TAMPER     使用 tamper

Detection

--level=LEVEL       測試級別:2 檢測 cookie,3 檢測 User-Agent/Referer (1-5, default 1)
--risk=RISK         風險級別:2 會加上大量時間盲注測試,3 會加上 OR 類型的布爾盲注 (1-3, default 1)

Techniques

--technique=TECH..  注入類型 (default "BEUSTQ",可改成 EU 試試)
--time-sec=TIMESEC  設置時間盲注延遲的時間 (default 5)
--union-cols=UCOLS  指定 union 查詢的列數
--dns-domain=DNS..  Domain name used for DNS exfiltration attack

B:布爾型盲注
E:報錯盲注
U:聯合查詢注入
S:堆查詢注入
T:時間盲注
Q:內聯查詢注入

Enumeration

這個基本都明白

-a, --all           Retrieve everything
-b, --banner        Retrieve DBMS banner
--current-user      Retrieve DBMS current user
--current-db        Retrieve DBMS current database
--hostname          Retrieve DBMS server hostname
--is-dba            Detect if the DBMS current user is DBA

--users             Enumerate DBMS users
--passwords         Enumerate DBMS users password hashes
--privileges        Enumerate DBMS users privileges
--roles             Enumerate DBMS users roles
--dbs               Enumerate DBMS databases
--tables            Enumerate DBMS database tables
--columns           Enumerate DBMS database table columns
--schema            Enumerate DBMS schema

--count             Retrieve number of entries for table(s)
--dump              Dump DBMS database table entries
--dump-all          Dump all DBMS databases tables entries

--search            Search column(s), table(s) and/or database name(s)
--comments          Check for DBMS comments during enumeration
--statements        Retrieve SQL statements being run on DBMS

-D DB               DBMS database to enumerate
-T TBL              DBMS database table(s) to enumerate
-C COL              DBMS database table column(s) to enumerate
-X EXCLUDE          DBMS database identifier(s) to not enumerate
-U USER             DBMS user to enumerate

Brute force

以下情況,無法直接讀取表名

  • mysql 版本 < 5.0,沒有
  • Access 的數據庫,系統表 MSysObjects 不可讀
  • 其他權限問題

這時候就需要采用字典爆破了。

--common-tables     爆破表名
--common-columns    爆列名
--common-files      爆文件

File system access

--file-read=FILE..  讀文件
--file-write=FIL..  寫文件

tamper

-v 參數

0:只顯示Python的回溯,錯誤和關鍵消息。
1:顯示信息和警告消息。
2:顯示調試消息。
3:有效載荷注入。
4:顯示HTTP請求。
5:顯示HTTP響應頭。
6:顯示HTTP響應頁面的內容

0x03、文件相關

修改最大線程數

cd /usr/local/Cellar/sqlmap/1.1.7/libexec/lib/core
open settings.py

然后查找 MAX_NUMBER_OF_THREADS,修改成自己想要的值即可。

目錄

# tamper 腳本位置
/Users/v/sqlmap/tamper

# random-agent 
/Users/v/sqlmap/data/txt/user-agents.txt

# 掃描過的網站
/Users/v/.sqlmap/output/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM