SQLMAP參數詳解
option 選項
1:h 列出基礎幫助資訊并退出
2:-hh 列出标準幫助資訊并退出
3:–version 列出應用版本号并退出
(-h-hh用于查詢基本幫助資訊和全量幫助資訊,基本幫助資訊列舉常用幾個語句,列如–wizard,-u,–level,–risk等)
4:-v 0-6 詳細級别0-6
0->隻顯示python錯誤以及嚴重的資訊
1->同時顯示基本資訊和警告資訊(預設)
2->同時顯示debug資訊
3->同時顯示注入的payload(建議使用此級别,可顯示注入參數)
4->同時顯示HTTP請求
5->同時顯示HTTP響應頭
6->同時顯示HTTP相應頁面
target 目标
1:-d DIRECT 直接連接配接資料庫的連接配接字元
已知目标資料庫的時候使用-d,直接連接配接目标資料庫,注意是小d,大D是指定要風聞的目标的某個庫
2:-u URL,–url=URL 目标URL
直接使用sqlmap+網址的方式使用此參數,列如sqlmap -v 3 -u www.baidu.com
3:-I LOGFILE 從Burp或WebScarab代理日志檔案中解析目标
當使用Burp或WebScarab儲存了日志的時候,想從日志檔案中篩選目标,可使用此參數,使用絕對路徑位址即可
4.1:-x SITEMAPURL 掃描txt檔案裡的多個目标
4.2:-m BULKFILE 從一個檔案裡加載http請求
4.3:-r REQUESTFILE 針對谷歌對目标url的處理結果
4.4:-g GOOGLEDORK 從INI配置檔案裡加載選項
這及格選線分别是從XML檔案,txt檔案,請求格式文檔裡讀取目标資訊或請求;使用較多的是-m,-g可以使用google的搜尋結果;列如,直接搜尋uid=,查找具有此參數的站點;直接使用sqlmap調用google結果,列:sqlmao -g inurl:php?uid=
5:-c CONFIGFILE 從INI配置檔案裡加載選項
自行配置sqlmap參數,直接輸入絕對路徑和其他目标參數就可以使用複雜參數選項
Request 請求
1.1:–method=METHOD 前後置HTTP方法。如:PUT
1.2:–data=DATA 通過POST發送得資料字元串
服務端允許得情況下,–method改變預設得http方法和其他參數配合使用
2:–param-del 分割參數值字元
當GET或POST得資料需要用其他字元分割測試參數得時候用到此參數
3:–cookie=COOKIE http得cookie頭部值
已經獲得cookie字元串得時候使用此參數指定cookie,cookie獲得可考了使用XSS攻擊和嗅探,劫持類攻擊
4:–cookie-del=COOKIE 分割cookie值字元
參數極少用,但一般情況下可對需要分割得cookie字元進行切分
5:–load-cookies 從Netscape/wget得格式檔案裡加載cookies
指定絕對路徑,從wget格式檔案裡load相應得cookies字元
6:–drop-set-cookie
忽略相應裡得cookie設定,此參數配合手動cookie參數使用,使用預先獲得得cookie
7.1:–user-agent=AGENT 指定http得UA值
7.2:–random-agent 随機選擇UA值
可以使用-user-agent參數來指定想使用得UA,同時也可以使用-random-agent參數來随機得從/txt/user-agente.txt中擷取
另外UA是繞過waf得參數,–user-agent=,–random-agent這兩個參數可對waf針對惡意UA得防控進行繞過
8:–host=HOST
指定http請求中header裡得host頭參數
9:–referer=REFERER
指定HTTP得referer頭部值
在請求中僞造referer,有些waf和安全産品等會對refer進行限制
僅允許本referer,當waf參數對referer進行了限制後,可使用此參數繞過,當–level參數設定為3或者3以上得時候會嘗試對referer注入
10:–headers=HEADERS
額外得頭部
指定其他得header資訊,XFF等,列如strust2-045試用了Content-Type
11:–auth-type=AUTH TYPE
http驗證類型Basic,Digest,NTLMorPKI
12:–auth-cred=AUTH CRED
http驗證名字密碼
13:–auth-private=AUTH PRIVATE
http驗證 私鑰檔案
HTTP代理身份驗證平局,可自動使用username:password和密鑰檔案,列如有些通路會使用key,集團sso最愛出現此種場景
14:–ignore-401
忽略http401錯誤,未授權的
某些頁面通路會傳回未授權錯誤,可使用此參數進行忽略和跳過
15.1:–proxy=PROXY 使用代理連接配接目标url
15.2:–proxy-cred=PROXY CRED 代理驗證證書名字密碼
15.3:–proxy-file=PROXY FILE 從檔案裡加載代理清單
15.4:–ignore-proxy 忽略系統預設代理設定
當需要使用 -g inurl:php?uid=等參數時,預設無法通路,可使用此參數+海外代理方式使用此功能
當代理需要驗證得時候,使用-cre指定身份資訊
需要使用代理輪巡時,使用檔案加載代理設定清單,使用代理輪巡也可在對通路ip次數進行了驗證得場景使用
16.1:–tor 使用tor網絡
16.2:–tor–port=TORPORT 設定tor代理端口,非預設
16.3:–tor-tyoe=TORTYPE 這隻tir代理類型,HTTP(預設)
16.4:–check-tor 檢查tor是否正常
17:–delay=DELAY 設定每個http請求之間得延時間隔
設定http請求間隔時間,在繞過需求時使用,列如單ip機關時間通路多少次,可配合代理和多代理是參數使用
18.1:–timeout=TIMEOUT 設定逾時連接配接間隔,預設30S
18.2:–retries=RETRIES 逾時後得嘗試次數,預設三次
逾時連接配接後得嘗試間隔,預設30S,可手動調賬,一邊–timeout和–retries配合使用
19:–randomize=RPARAM
随機改變參數值,可以設定某一個參數值在每一次請求中随機得變化,長度和類型與提供得初始值一樣
20.1:–safe-url=SQFURL 在測試期間,經常去通路url位址
20.2:–safe-freq=SAFREQ 在兩次通路安全站點之間發送一個測試請求
安全通路路徑和請求配置用于僞造使用者行為身份,列如有些模型會驗證你得行為路徑,可用此方法僞造行為,在攻擊行為中夾雜正常通路行為,列如廣告浏覽,商品産看等
21:–skip-urlencode
跳過payload參數得編碼資料
條幅哦url得有效載荷資料編碼,前提是自編碼
22.1:–csrf-token=CSRFTOKEN 持有反csrf token得參數
22.2:–csrf-url=CSRFURL 從通路位址中提取反csrtf token
針對CSRF服務端通常使用用戶端頁面增加僞随機數
常見得有三種方法:
①Cookie Hashing(所有表單都包含一個僞随機值)
②驗證碼
③One-Time Tokens(不同得表單包含一個不同得僞随機值)
使用反csrf參數,可以對站點得csrf進行對抗和繞過
23:–force-ssl
強制使用ssl/https
強制使用https,也可在url後面增加443
24:–eval=EVAL CODE
請求之前執行提供得python代碼侯在送出請求
有的網站會對送出得參數進行編碼或加密,這時候需要根據某個參數得變化,而修改另一個參數,才能形成正常得請求,這是可以用–eval參數在每次請求時根據所有python代碼做完修改後請求
列如:–eval=“import hashlib;hash=hashlib.md5(id).hexdigest()”
上面得請求就是每次請求時根據id參數值,做一次md5後作為hash參數得值
Optimization 優化
1:-o 打開所有的優化開關
2:–predict-output 預測常見的查詢輸出
3:–keep-alive 使用持久的http連接配接
4:–nuli-connection 在實際的http相應主題之外檢索頁面長度
5:–threads=THREADS 目前http請求最大值,預設1就是最大并發
Injection 注入
1:-p TESTPARAMETER 測試參數
2:–skip=SKIP 忽略測試指定的參數
3:–dbms=DBMS 指定資料庫類型
4:–dbms-cred=DBMS 資料庫驗證憑據,使用者名和密碼
5:–os=OS 指定作業系統類型
6:–invalid-bignum 對無效值使用大數值
7:–invalid-logical 對無效值使用邏輯操作
8:–invalid-string 對無效值使用随機字元
9:–no-east 關閉paload生成機制
10:–no-escape 關閉paload字元串轉義機制
11:–prefix=PREFIX 注入paload字首字元
12:–suffix=SUFFIX 注入paload結尾字元
13:–tamper=TAMPER 隻用指定的腳本篡改注入資料
sqlmap預設測試所有的GET和POST參數
當–level的值大于等于2的時候也會測試HTTP Cookie頭的值,大于等于3的時候也會測試User-Agent和HTTP Referer頭的值
這時候可以手動指定-p參數設定想要測試的參數,列如:-p “id,cookie"但是有個别參數不想測試的時候可以使用–skip=“user-agent”參數
如果預知資料庫類型和憑證,可使用–dbms,–dbms-cred=來指定資料庫類型和資料庫憑證
同樣當預知作業系統類型,可是用–os來指定作業系統類型,預設情況下sqlmap會自動的探測資料庫伺服器系統,支援的系統有:linux,windows
無效數值處理:
參數:–invalid-bignum,–invalid-logical這兩個參數對報錯資料,無效資料進行更改
列如預設報錯UID=-20,可以通過指定以上參數指定無效的大數字和邏輯,比如uid=999999999和uid=20 and a=b
參數:–prefix,–suffix在注入的paload的前面或者後面加一些字元,來保證payload的正常執行
列如在語句中增加–prefix’”}",–suffix “AND(‘1’='1”
–tamper可從tamper庫裡查找相關内容,使用–tamper tamper/".py方式指定
Detection 偵察
1:–level=LEVEL
級别,從1-5,預設1
一共有五個等級,預設為1,sqlmap使用得payload可以在payload xml中看到,也可以根據相應得格式添加自己的payload内容,預設也有一些,可定制,建議最進階别,會更慢,測試參數更複雜
2:–risk=RISK
級别0-3,預設1
從0-3共有四個風險等級,預設是1,risk1會測試大部分語句,2會增加基于時間得測試語句,3會增加OR語句得注入測試,測試得語句同樣可以在payload.xml中找到,可以自行添加payload
警告:當使用進階别時,可能會使用drop,update等高危語句對整表,整庫造成影響,可能導緻更新整個表,可能造成很大得風險
3.1:–string=STRING 評估被證明為true時的比對字元串
3.2:–not-string=NOT STRING 評估被證明為falese得比對字元串
3.3:–regexp=REGEXP 評估被證明為true時得比對正規表達式
3.4:–code=CODE 評估被證明為true時得比對http code
3.5:–text-only 僅比較頁面的文本内容
3.6:–titles 僅比較頁面的标題
sqlmap測試結果取決于傳回内容,當頁面在重新整理或更新侯,可能導緻傳回不同得内容,特别是頁面有動态内容得情況下,為了避免誤報,可指定字元串或者正規表達式來區分原始頁面和報錯頁面(–string參數添加字元串,–regexp添加正則),也可以提供一段字元串在原始頁面與true下頁面都不存在得字元串,而false頁面中存在得字元串(–not-string添加),使用者也可以提供true與false傳回得HTTP狀态碼不一樣來注入,列如:響應200得時候為真,相應401得時候為假,–code=200
參數:–text-only,–titles
想要具體查詢true和false下頁面得差異位置,可以使用–text-only(HTTP文本内容),–titles(HTML得title标簽)
Techniques 技巧
1:–technique=TECHNIQUE
sql注入方式:
預設把BEUSTQ全來一遍,可根據實際情況進行調整
列如可使用時間延遲,看網站響應時間來判斷是否有注入,可根據報錯判斷注入
B:boolean-based blind SQL injection(布爾型注入)
E:Error-based SQL injection(報錯型注入)
U:UNION query SQL injection(可聯合查詢注入)
S:Stacked queries SQL injection(可多語句查詢注入)
T:Time-based blind SQL injection(基于時間延時注入)
Q:Inline SQL injection(内聯注入)
2:–time-sec=TIMESEC
資料庫響應延時秒數,預設5
當使用基于時間延遲注入得盲注時
時刻使用–time-sec參數設定延時時間,預設是5S
可以根據環境進行調整,比如網絡延遲很大,可适當增加延時時間
3:–union-cols=UCOLS
指定SQL注入查詢得列得範圍
設定得值為一段整數範圍,指定區間,此數值預設為1-10
随着–level增加,當為5得時候增加為50
當level級别和取值範圍不比對,在低級别需求更大得範圍,可通過設定–union-cols得值來實作
4:–union-char=UCHAR
指定暴力破解列數得字元
設定union查詢使用得字元,預設使用NULL
但是可能會傳回失敗,–union-char指定UNION查詢得字元
5:–union-from=UFROM
指定sql注入查詢得表
指定查詢得表,配合暴力破解得字元,範圍等來詳細使用
6:–dns-domain=DNSDOMAIN
指定用于DNS露出攻擊得域名
實際就是通過DNS隐蔽通道和惡意代碼來使web來執行解析參數導緻資訊洩露
可通過sqlmap得語句進行查詢使用,當指定此參數且具有注入漏洞得情況下,可更快速且影響更小得獲得内容
7:–second-order=SECONDORDER
生成url搜尋頁面結果得二級響應
二次注入查詢,當判斷注入影響不是目前頁面
可使用此參數制定另一個頁面來進行測試
根據頁面響應判斷結果為true或false
Fingerprint 指紋
1:-f 執行檢查廣泛得DBMS版本得指紋,通過此參數來執行更廣泛,詳細得指紋識别
Enumeration 枚舉
1:-a,–all 檢索所有
此參數咋沒有獲得資料庫資訊得時候用的較多
來檢索所有内容,在一旦注入成功且獲得精确資訊
通過以下詳細參數來指定檢索,枚舉動作和動作執行對象
2.1:-b,–banner 檢索DBMS得banner
2.2:–current-user 檢索DBMS得目前使用者
2.3:–current-db 檢索DBMS得資料庫
2.4:–hostname 檢索DBMS得host
2.5:–is-dba 檢索DBMS得目前使用者是否是root
2.6:–users 枚舉DBMS得使用者
2.7:–passwords 枚舉DBMS得密碼hash
2.8:–privilleges 枚舉DBMS得使用者權限
2.9:–roles 枚舉DBMS得使用者校色
2.10:–dbs 枚舉DBMS得所有資料庫
2.11:–tables 枚舉DBMS得資料庫裡得所有表
2.12:–columns 枚舉DBMS得資料庫裡表得所有列
2.13:–schema 枚舉DBMS得概要
2.14:–count 檢索表的條目數
2.15:–dump 轉存DBMS資料庫表項
2.16:–dump-all 轉存所有DBMS資料庫得表項
2.17:–searche 搜尋列,表,和或資料庫名
2.18:–comments 檢索DBMS資訊
2.19:-D 指定枚舉得庫
2.20:-T 指定枚舉得表
2.21:-C 指定枚舉得表列
2.22:-X 指定不枚舉得表列
2.23:-U 指定枚舉得使用者
2.24:–exclude-sysdbs 枚舉表的時候排除系統資料庫
2.25:–where=DUMPWHERE dump表得時候指定路徑
2.26:–start=LIMITSTART 第一個檢索輸出條目
2.27:–stop=LIMITSTOP 最後一個檢出輸出條目
2.28:–first=FIRSTCHAR 第一個檢索輸出得字元串
2.29:–last=LASTCHAR 最後一個檢出輸出得字元串
到這一步得時候,代表已經注入成功,需要對注入成功得庫執行操作,這裡是比較常見得操作:
檢索DBMS得指紋特征,資料庫,host值,使用者身份,并對使用者,密碼,權限,角色進行枚舉也就是爆破
dump和dump-all就是脫庫和全脫得差別,dump某表得十條八條可能沒事,dump-all注定要浪迹天涯,也就是所謂得從脫庫到跑路得開始
通過-D-T-C來指定索要枚舉得庫,表,列,使用-X來排除不想要得列,特别是有多列且有無意義字段得時候,使用-X可大大節省時間
–excilud-sysdbs參數,将不會擷取資料庫自帶得系統庫内容,可減少幹擾内容,對-coun得使用和枚舉資訊得使用建議搭配此參數來排除系
統庫
當我們不想跑路得時候,那麼請使用以下内容:
----start=LIMITSTART First query output entry to retrieve
指定從第幾行開始輸出,如–start=1
–stop=LIMITSTOP Last query output entry to retrieve
指定從第幾行停止輸出,如–stop=10
–first=FIRSTCHAR First query output word character to retrieve
指定從第幾個字元開始輸出,如–first 1
–last=LASTCHAR Last query output word character to retrieve
指定從第幾個字元停止輸出,如–last 10
3.1:–sql-query=QUERY 執行得SQL語句
3.2:–sql-shell 互動式sqlshell
3.3:–sql-file 從檔案裡運作sql語句
指定想執行得語句,注入成功後自動執行
系統互動shell,一旦成功可執行任意語句
從檔案中讀取執行想要執行得sql語句
Brute force 暴力
1:–common-tables 檢查通用表
2:–common-columns 檢查通用列
暴力檢查:
猜測檢查常見得,通用得表名和列名,可通過下面兩個檔案進行定制化
暴力破解得表在txt/–common-tables.txt檔案中
暴力破解得列在txt/–common-columns.txt檔案中
User-defined function injection 使用者自定義注入函數
1:–udf-inject 使用使用者自定義得函數進行注入
2:–shared-lib=SHLIB 共享庫得本地路徑
自定義函數:
通過編譯注入自定義得函數(UDFs)或PostgreSQL在windows中共享庫,DLL,或者Linux/unix中共享對象,上傳到伺服器資料庫自定義函數,然後根據選擇執行他們
File system access 通路檔案系統
1:–file-read-RFILE 從背景DBMS檔案系統裡讀取一個檔案
2:–file-write=WFILE 從背景DBMS檔案系統裡寫一個本地檔案
3:–file-dest=DFILE 後端DBMS寫入得絕對檔案路徑
針對檔案系統得讀寫:
對–file-read配置絕對系統路徑,可讀取相應檔案内容,可以是檔案,也可以是二進制,條件是必須擁有相對應特權,已知的是mysql,postgresql和sqlserver,寫入也是同樣,往遠端背景得DBMS裡寫入一個本地檔案,可通過–file-dest指定絕對檔案路徑
Operating system access 作業系統連接配接
1:–os -cmd 運作一個OS指令
2:–os-shell 建立互動式得 os shell
3:–os-pwn 建立一個oob shel meterpreter 或者vnc
4:–os-smbrelay 一鍵生成 oob shel meterpreter火車vnc
5:–os-bof 利用存儲過程緩沖區溢出
6:–priv-esc 使用者權限提升
7:–msf-path 安裝metasploit framework得本地路徑
8:–tmp-path 臨時檔案目錄得遠端絕對路徑
對檔案系統,作業系統得互動和使用必須需要相應得權限,前面提到要求具有特定得函數執行權限,一般要root
當然和上面可以配合使用,當資料庫為mysql,postgreSQL或microsoft SQL Sever,并且目前使用者有權限使用特定得函數
然後通過上面得檔案系統管理上傳一個庫,使用可執行系統指令得sys_exec()和sys_eval(),甚至xp_cmdshell存儲過程
–os-shell參數也可以模拟一個真實得shell,可以輸入你想執行得指令
Meterpreter配合使用
–os-pwn,–os-smbrelay,–os-bof,–prive-esc,-msf-path,–tmp-path配合Meterpreter使用
目前使用者有顯現使用特定得函數,可以在資料庫于攻擊者直接建立TCP連接配接
這個連接配接可以是一個互動式指令行得Meterpreter會話,sqlmap根據Metasploit生成shellcode,四種方式執行它:
①通過使用者自定義得sys_bineval()函數在執行Metasplit得shellcode,支援mysql和postgresql資料庫,參數:–os-pwn
②通過使用者自定義的函數上傳一個獨立的payload執行,mysql和PostgreSQL的sys _exec()函數,Microsoft SQL Server得
xp_cmdshell()函數,參數:–os-pwn
③通過SMB攻擊(MS08-068)來執行Metasploit的shellcode,當sqlmap擷取到的權限足夠高的時候(Linux\Unix得uid=0,windows是administrator),參數:–os-smbrelay
④通過溢出Microsom SQL Server 2000和2005的sp_replwritetovarbin存儲過程(MSO9-004),在記憶體中執行Metasploit的payload,
參數:-os-bof
windows 系統資料庫連接配接
1:–reg-read 讀取windows系統資料庫鍵值
2:–reg-add 編輯一個windows系統資料庫鍵值資料
3:–reg-del 删除一個windows系統資料庫鍵值
4:–reg-key windows 系統資料庫項
5:–reg-valus windows系統資料庫項的值
6:–reg-data windows系統資料庫項的資料
7:–reg-type windows系統資料庫項值得類型
所見如所得,系統資料庫連接配接值得是windows系統,相信大家都有windows系統知識,不懂系統資料庫基本就不懂windows系統
所有得windows系統配置在系統資料庫裡都可實作,比如開啟遠端連接配接,建立使用者,組政策配置,防火牆等等
者的reg現象可對系統資料庫内容進行讀取,編輯和删除,上面和下面相配合可實作對指定得key,value,data和類型進行操作
通用參數和混雜選項
【通用參數】
1:-s 從存儲檔案裡加載session
2:-t 記錄所有得http流量到一個文本檔案
3:–batch 使用預設配置,不管使用者得輸入
4:–charset 強制資料檢索編碼格式
5:–crawl 從目标網站開始爬取網站
6:–csv-del CSV輸出檔案使用得分割字元
7:–dump-format dump資料得格式
8:–eta 顯示輸出得預計用時
9:–flush-session 為目前目标重新整理session檔案
10:–forms 在目标url上解析和測試表單
11:–fresh-queries 忽略在session檔案裡得查詢結果
12:–hex 使用DBMS得hex函數進行資料檢索
13:–output-dir 輸出路徑
14:–parse-errors 解析和列出DBMS得相應錯誤資訊
15:–pivol-colimn 主列名稱
16:–save 儲存選項到一個ini配置檔案
17:–scope 指定正規表達式從提供得代理日志裡過濾目标
18:–test-filter 選擇測試payload
19:–update 更新sqlmap
【混雜參數】
1:-z 使用短助記符
2:–alert 當發現sql注入式,運作主機os指令
3:–answers 設定問題答案
4:–beep 當發現sql注入時,發出蜂鳴聲
5:–cleanup 從sqlmap特定得udf和表裡清除dbms
6:–dependencies 檢查sqlmap缺少得依賴關系
7:–disabie-coloring 禁用控制台出書顔色
8:–gpage 指定使用得google dork響應得頁碼
9:–identify-waf 繞過waf,ips,ids
10:–mobile 使用UA模拟成智能手機
11:–page-rank 展示google dork結果得頁碼值
12:–purge-output 從輸出目錄安全移除所有内容
13:–smart 在積極啟發得情況下進行徹底得測試
14:–sqlmap-shell 建構一個互動式sqlmap shell
15:–wizard 初學者簡單向導
這兩項内容資料常用技巧類搭配動作,可根據翻譯使用,需要注意得幾個參數:
–batch 在使用sqlmap時,有時一些響應需要使用者互動,輸入Y,N,sky,quit等,使用此選項可使用預設配置
–output-dir=指定輸出路徑,方式控制台輸出過多,無法檢視,也友善記錄
–gpage 預設使用google搜尋得前100個檔案,當使用前面得-g參數,配合此參數指定頁面
–identify-waf 進行WAF/IPS/IDS保護測試
–mobile 使用移動産品UA,把sqlmap僞裝成手機,也可使用前面得-user-angent自己指定
–smart 隻能深度啟發式掃描,擷取會有驚喜
–wizard 和上面得完全不同,純新手選擇,一步步讓你輸入url等參數