1. 程式人生 > >【工具】Sqlmap

【工具】Sqlmap

Sqlmap幫助說明

選項-Options

-h:顯示基本幫助資訊
-hh:顯示高階詳細幫助資訊
--version:顯示程式版本資訊
-v:設定觀察資料等級,一共七個等級:
    -v 0: 只顯示python錯誤資訊以及嚴重的資訊
    -v 1:同時顯示基本資訊和警告資訊(預設)
    -v 2:同時顯示debug資訊
    -v 3:同時顯示注入的payload資訊 (一般常用,用來檢視payload資訊)
    -v 4:同時顯示HTTP請求
    -v 5:同時顯示HTTP響應頭
    -v 6:同時顯示HTTP響應頁面

獲取目標方式-Target

必須提供這些選項中的至少一個來定義

-u:帶檢測的目標URL
-r:從檔案中載入HTTP請求,適合非GET注入,跳過引數設定
-m:從檔案中獲取多個目標掃描,URL儲存在文字中,sqlmap會一一檢測
-l:可以直接把Burp proxy或者WebScarab proxy中的日誌直接倒出來交給sqlmap來一個一個檢測是否有注入

請求方式-Request

這些選項可用於指定如何連線到目標URL

--data=DATA:把資料以POST方式傳送,會檢測POST中的引數

--param-del:拆分字元,當GET或POST的資料需要用其他字元分割測試引數的時候需要用到此引數 eg:--data="query=foobar;id=1" --param-del=";"

--cookie=COOKIE:設定請求的cookie資料,當需要驗證使用者身份時使用或檢查cookie欄位注入(當--level的引數設定為2或者2以上的時候,sqlmap會嘗試注入Cookie引數)

--drop-set-cookie:在HTTP請求中,遇到Set-Cookie的話,sqlmap會自動獲取並且在以後的請求中加入,並且會嘗試SQL注入,如果不想接受Set-Cookie可以使用此引數來拒接。

--user-agent=AGENT:設定請求引數中的UA頭,用於指定UA頭的伺服器如微信、手機版等(當--level引數設定為3或者3以上的時候,會嘗試對User-Angent進行注入)

--random-angent:使用工具自帶的user.agents.txt檔案來隨機發送UA頭,一般用於繞過檢測機制

--host=HOST:設定HTTP中host頭的值

--referer=REFERER:設定HTTP中referer頭中的值(--level引數設定為3或者3以上的時候會嘗試對referer注入)

-H:新增一個HTTP頭部資訊,如:"X-Forwarded-For: 127.0.0.1"

--headers=HEADERS:新增多個頭部欄位資訊,用\n分割:"Accept-Language: fr\nETag: 123"

--timeout:設定請求超過多少秒判定為超時

--retries:設定超時後,重新連線的次數,預設為3次

--delay:設定兩個請求間的的延遲,預設沒有延遲

--auth-type:設定認證的方式:Basic、Digest、NTLM、 PKI

--auth-cred:設定認證的憑證:name:password

--proxy=PROXY:設定通過代理方式連線目標

--proxy-cred:設定代理認證憑證:name:password

--proxy-file:從檔案中載入代理列表

--tor:使用Tor匿名網路

--tor-port:設定tor代理埠

--tor-type:設定Tor代理型別:HTTP、SOCKS4、SOCKS5(預設)

--check-tor:檢查Tor是否可用

--csrf-url=CSRFURL:設定URL以提取CSRF令牌

--csrf-token=CSRFTOKEN:設定儲存CSRF令牌的引數

--force-ssl:強制使用https請求

--skip-urlencode:關閉URL編碼,根據引數位置,值預設將會被URL編碼,如果不需要編碼則使用此引數。

--eval=CODE:執行自定義的py程式碼,在有些時候,需要根據某個引數的變化,而修改另個一引數,才能形成正常的請求,這時可以用--eval引數在每次請求時根據所寫python程式碼做完修改後請求。eg:python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

優化-Optimization

這些選項可用於優化sqlmap的效能

-o:開啟所有優化開關
--keep-alive:使用HTTP/s持久連線
--null-connection:檢索頁面長度而不使用實際的HTTP響應主體,可用在盲注注入中來區分True和Flase響應。
--predict-output:預測常見查詢輸出,進行字元統計預測
--threads:指定請求的併發數量/執行緒數,預設為1

注入-Injection

這些選項可用於指定要測試的引數,提供自定義注入有效負載和可選的篡改指令碼

-p:測試指定的引數,sqlmap預設測試所有的GET和POST引數,當--level的值大於等於2的時候也會測試HTTP Cookie頭的值,當大於等於3的時候也會測試User-Agent和HTTP Referer頭的值。但是你可以手動用-p引數設定想要測試的引數。

--skip-static:測試跳過指定的引數,當你使用--level的值很大但是有個別引數不想測試的時候可以使用--skip引數。

--dbms=DBMS:指定後端使用的資料庫,預設情況系sqlmap會自動的探測web應用後端的資料庫是什麼。

--dbms-cred=DBMS:指定資料庫憑證user:password

--os=OS:指定後端使用的作業系統,預設情況下sqlmap會自動的探測資料庫伺服器系統,支援的系統有:Linux、Windows。

--no-cast:關閉有效負載鑄造機制,可用於檢視純潔的payload

--no-escape:關閉字串轉義,可用於檢視純潔的payload

--invalid-bignum:指定無效的大數字,當你想指定一個報錯的數值時,可以使用這個引數,例如預設情況是id=13,sqlmap會變成id=-13來報錯,你可以指定比如id=9999999來報錯。

--invalid-logical:指定無效的邏輯,原因同上,可以指定id=13把原來的id=-13的報錯改成id=13 AND 18=19。

--prefix=PREFIX:在payload前面新增指定字元,在有些環境中,需要在注入的payload的前面或者後面加一些字元,來保證payload的正常執行。

--suffix=SUFFIX:在payload後面新增指定字元

--tamper=TAMPER:使用給定的指令碼來篡改注入資料
序號 指令碼名稱 註釋
1 0x2char 將每個編碼後的字元轉換為等價表達
2 apostrophemask 單引號替換為Utf8字元
3 apostrophenullencode 替換雙引號為%00%27
4 appendnullbyte 有效程式碼後新增%00
5 base64encode 使用base64編碼
6 between 比較符替換為between
7 bluecoat 空格替換為隨機空白字元,等號替換為like
8 chardoubleencode 雙url編碼
9 charencode 將url編碼
10 charunicodeencode 使用unicode編碼
11 charunicodeescape 以指定的payload反向編碼未編碼的字元
12 commalesslimit 改變limit語句的寫法
13 commalessmid 改變mid語句的寫法
14 commentbeforeparentheses 在括號前加內聯註釋
15 concat2concatws 替換CONCAT為CONCAT_WS
16 equaltolike 等號替換為like
17 escapequotes 雙引號替換為\\
18 greatest 大於號替換為greatest
19 halfversionedmorekeywords 在每個關鍵字前加註釋
20 htmlencode html編碼所有非字母和數字的字元
21 ifnull2casewhenisnull 改變ifnull語句的寫法
22 ifnull2ifisnull 替換ifnull為if(isnull(A))
23 informationschemacomment 標示符後添加註釋
24 least 替換大於號為least
25 lowercase 全部替換為小寫值
26 modsecurityversioned 空格替換為查詢版本的註釋
27 modsecurityzeroversioned 新增完整的查詢版本的註釋
28 multiplespaces 新增多個空格
29 nonrecursivereplacement 替換預定義的關鍵字
30 overlongutf8 將所有字元轉義為utf8
31 overlongutf8more 以指定的payload轉換所有字元
32 percentage 每個字元前新增%
33 plus2concat 將加號替換為concat函式
34 plus2fnconcat 將加號替換為ODBC函式{fn CONCAT()}
35 randomcase 字元大小寫隨機替換
36 randomcomments /**/分割關鍵字
37 securesphere 新增某字串
38 sp_password 追加sp_password字串
39 space2comment 空格替換為/**/
40 space2dash 空格替換為–加隨機字元
41 space2hash 空格替換為#加隨機字元
42 space2morecomment 空格替換為/_/
43 space2morehash 空格替換為#加隨機字元及換行符
44 space2mssqlblank 空格替換為其他空符號
45 space2mssqlhash 空格替換為%23%0A
46 space2mysqlblank 空格替換為其他空白符號
47 space2mysqldash 空格替換為–%0A
48 space2plus 空格替換為加號
49 space2randomblank 空格替換為備選字符集中的隨機字元
50 symboliclogical AND和OR替換為&&和
51 unionalltounion union all select替換為union select
52 unmagicquotes 寬字元繞過GPC
53 uppercase 全部替換為大寫值
54 varnish 新增HTTP頭
55 versionedkeywords 用註釋封裝每個非函式的關鍵字
56 versionedmorekeywords 使用註釋繞過
57 xforwardedfor 新增偽造的HTTP頭

檢測-Detection

這些選項可用於自定義檢測階段

--level=LEVEL:要執行的測試級別(1-5,預設值1),這個引數不僅影響使用哪些payload同時也會影響測試的注入點,GET和POST的資料都會測試,HTTP Cookie在level為2的時候就會測試,HTTP User-Agent/Referer頭在level為3的時候就會測試

--risk=RISK:執行測試的風險(1-3,預設1),1會測試大部分測試語句,2會增加基於事件的測試語句,3會增加OR語句的SQL注入測試

- 預設情況下sqlmap通過判斷返回頁面的不同來判斷真假,但有時候這會產生誤差,因為有的頁面在每次重新整理的時候都會返回不同的程式碼,比如頁面當中包含一個動態的廣告或者其他內容,這會導致sqlmap的誤判。此時使用者可以提供一個字串或者一段正則匹配,在原始頁面與真條件下的頁面都存在的字串,而錯誤頁面中不存在(使用--string引數新增字串,--regexp新增正則),同時使用者可以提供一段字串在原始頁面與真條件下的頁面都不存在的字串,而錯誤頁面中存在的字串(--not-string新增)。使用者也可以提供真與假條件返回的HTTP狀態碼不一樣來注入,例如,響應200的時候為真,響應401的時候為假,可以新增引數--code=200。

--string=STRING:查詢計算為True時要匹配的字串

--not-string=NOT:查詢計算為False時要匹配的字串

--regexp=REGEXP:當查詢被評估為True時匹配的正則表示式

--code=CODE:查詢評估為True時要匹配的HTTP程式碼

--text-only:僅根據文字內容比較頁面

--titles:僅根據標題比較頁面

技巧-Techniques

這些選項可用於調整特定SQL注入的測試

--technique=TECH:要使用的SQL注入技術(預設為B)(B:布林注入、E:報錯注入、U:聯合注入、S:多語句查詢注入、T:時間延遲注入)

--time-sec=TIMESEC:延遲DBMS響應的秒數(預設值為5s)

--union-cols=UCOLS:要測試UNION查詢SQL注入的列範圍,預設會測試1-10個欄位數,當--leve為5時會增加到50個欄位數,設定--union-cols的值應該是一段整數,如:12-16,是測試12-16個欄位數。

--union-char=UCHAR:用於強制列數的字元,可以是null或者隨機整數

--union-from=UFROM:要在UNION查詢SQL注入的FROM部分中使用的表

--dns-domain=DNS:DNS洩露攻擊,用於DNS滲透攻擊的域名

--second-order:二階SQL注入,有些時候注入點輸入的資料看返回結果的時候並不是當前的頁面,而是另外的一個頁面,這時候就需要你指定到哪個頁面獲取響應判斷真假。--second-order後面跟一個判斷頁面的URL地址。

列舉-Enumeration

這些選項可用於列舉後端資料庫管理系統中包含的資訊,結構和資料表。此外,您可以執行自己的SQL語句

-a:檢索一切
-b:檢索資料庫版本資訊
--current-user:檢索資料庫當前使用者
--current-db:檢索當前資料庫名
--hostname:檢索DBMS伺服器主機名
--is-dba:檢測DBMS當前使用者是否具有管理員許可權
--users:列舉DBMS使用者
--passwords:列舉DBMS使用者密碼雜湊值
--privileges:列舉DBMS使用者許可權
--roles:列舉DBMS使用者角色
--dbs:列舉DBMS資料庫
--tables:列舉DBMS資料庫表
--columns:列舉DBMS資料庫表列
--schema:列舉DBMS架構
--count:檢索表的記錄數
--dump:轉儲DBMS資料庫表記錄
--dump-all:轉儲所有DBMS資料庫表記錄
--search:搜尋列,表和或資料庫名
--comments:在列舉期間檢查DBMS註釋
-D:要列舉的DBMS資料庫
-T:要列舉的DBMS資料庫表
-C:要列舉的DBMS資料庫表列
-X:要列舉的DBMS資料庫識別符號
-U:DBMS使用者列舉
--exclude-sysdbs:列舉表時排除DBMS系統資料庫
--pivot-column=P:透視列名稱
--where=DUMPWHERE:在錶轉儲時使用WHERE條件
--start=LIMITSTART:要檢索的第一個轉儲表條目
--stop=LIMITSTOP:要檢索的最後轉儲表條目
--sql-query=QUERY:要執行的SQL語句
--sql-shell:提示互動式SQL shell
--sql-file=SQLFILE:從給定檔案中執行SQL語句

暴力-Brute force

這些選項可用於執行強力檢查

--common-tables:檢查表是否存在
--common-columns:檢查欄位是否存在,暴力跑的列名在txt/common-columns.txt中

檔案系統訪問

這些選項可用於訪問後端資料庫管理,系統底層檔案系統

--file-read=FILE:從後端DBMS檔案系統中讀取檔案
--file-write=FIL:在後端DBMS檔案系統上寫一個本地檔案
--file-dest=FILE:要寫入的後端DBMS絕對檔案路徑

作業系統訪問

這些選項可用於訪問後端資料庫管理,系統底層作業系統

--os-cmd=OSCMD:執行作業系統命令
--os-shell:提示互動式作業系統shell
--os-pwn:提示OOB shell,Meterpreter或VNC
--os-smbrelay:單擊提示輸入OOB shell,Meterpreter或VNC
--os-bof:儲存過程緩衝區溢位利用
--priv-esc:資料庫程序使用者許可權升級
--msf-path=MSFPATH:安裝Metasploit Framework的本地路徑
--tmp-path=TMPPATH:臨時檔案目錄的遠端絕對路徑

Windows登錄檔訪問

這些選項可用於訪問後端資料庫管理,系統Windows登錄檔

--reg-read:讀取Windows登錄檔項值
--reg-add:添加註冊表值
--reg-del:刪除Windows登錄檔項值
--reg-key=REGKEY:Windows登錄檔項
--reg-value=REGVAL:Windows登錄檔項值
--reg-data=REGDATA:Windows登錄檔項值資料
--reg-type=REGTYPE:Windows登錄檔項值型別

一般-General

這些選項可用於設定一些常規工作引數

-s:從儲存的(.sqlite)檔案載入會話
-t:將所有HTTP流量記錄到文字檔案中
--batch:永遠不要求使用者輸入,使用預設行為
--crawl=CRAWLDEPTH:從目標網址開始抓取網站
--crawl-exclude=xx:正則表示式從抓取中排除頁面(例如“登出”)
--dump-format=DU:轉儲資料的格式(CSV(預設),HTML或SQLITE)
--encoding=ENCODE:用於資料檢索的字元編碼(例如GBK)
--hex:在資料檢索期間使用十六進位制轉
--output-dir=OUT:自定義輸出目錄路徑
--update:更新sqlmap

雜項-Miscellaneous

--disable-coloring:禁用控制檯輸出著色
--identify-waf:對WAF / IPS保護進行全面測試
--list-tampers:顯示可用篡改指令碼的列表
--mobile:通過HTTP User-Agent標頭模仿智慧手機
--purge:安全地從sqlmap資料目錄中刪除所有內容
--skip-waf:跳過啟發式檢測WAF / IPS保護
--web-root=WEBROOT:Web伺服器文件根目錄(例如“/ var / www”)
--wizard:簡單的嚮導介面,適合初學者使用者