SQLMAP引數詳解
- option 選項
- target 目標
- Request 請求
- Optimization 優化
- Injection 注入
- Detection 偵察
- Techniques 技巧
- Fingerprint 指紋
- Enumeration 列舉
- Brute force 暴力
- User-defined function injection 用戶自定義注入函式
- File system access 訪問檔案系統
- Operating system access 作業系統連接
- windows 注冊表連接
- 通用引數和混雜選項
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等引數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/249858.html
標籤:其他
下一篇:理解html
