日期: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/