3.16 SqlMap用法—通用選項
這些選項可用于設置一些常規工作參數。
3.16.1.從存儲的(.sqlite)文件加載會話
選項: -s
sqlmap自動在專用輸出目錄內為每個目標創建一個持久會話SQLite文件,該文件中存儲了會話恢復所需的所有數據。如果用戶想要顯式設置會話文件位置(例如,用于在一個地方存儲多個目標的會話數據),則可以使用此選項。
3.16.2.將HTTP流量記錄到日志文件中
選項: -t
此選項需要一個參數,該參數指定文本文件以寫入由sqlmap生成的所有HTTP通信-HTTP(S)請求和HTTP(S)響應。
這主要用于調試目的-當您向開發人員提供潛在的錯誤報告時,也請發送此文件。
3.16.3.設置問題答案
選項: --answers
如果用戶想要自動設置問題的答案(即使--batch使用了答案),則使用此選項,他可以通過在等號后提供問題的任何部分以及答案來實現。另外,可以用定界符來分隔不同問題的答案,。
針對MySQL目標的示例:
$ python sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1"--te
chnique=E --answers="extending=N" --batch
[...]
[xx:xx:56] [INFO] testing for SQL injection on GET parameter 'id'
heuristic (parsing) test showed that the back-end DBMS could be 'MySQL'. Do you
want to skip test payloads specific for other DBMSes? [Y/n] Y
[xx:xx:56] [INFO] do you want to include all tests for 'MySQL' extending provide
d level (1) and risk (1)? [Y/n] N
[...]
3.16.4.聲明包含Base64編碼數據的參數
選項: --base64
如果目標Web應用程序使用Base64編碼將數據存儲在特定參數(例如,Base64編碼的JSON字典)中,則用戶可以使用選項聲明它,--base64從而指示sqlmap正確測試基礎值。
用法示例(注意:)Base64('{"id": 1}') == 'eyJpZCI6IDF9':
$ python sqlmap.py -u http://192.168.22.128/sqlmap/mysql/get_base64?value=eyJpZC
I6IDF9 -v 5 --base64=value
[...]
[23:43:35] [INFO] testing 'Boolean-based blind - Parameter replace (original valu
e)'
[23:43:35] [PAYLOAD] KFNFTEVDVCAoQ0FTRSBXSEVOICgzODY1PTUzMTQpIFRIRU4gJ3siaWQiOiAx
fScgRUxTRSAoU0VMRUNUIDUzMTQgVU5JT04gU0VMRUNUIDE5MzIpIEVORCkp
[23:43:35] [TRAFFIC OUT] HTTP request [#11]:
GET /?value=KFNFTEVDVCAoQ0FTRSBXSEVOICgzODY1PTUzMTQpIFRIRU4gJ3siaWQiOiAxfScgRUxTR
SAoU0VMRUNUIDUzMTQgVU5JT04gU0VMRUNUIDE5MzIpIEVORCkp HTTP/1.1
Host: localhost
Cache-control: no-cache
Accept-encoding: gzip,deflate
Accept: */*
User-agent: sqlmap/1.4.4.3#dev (http://sqlmap.org)
Connection: close
[...]
3.16.5.非交互模式
開關: --batch
如果希望sqlmap作為批處理工具運行,并且在sqlmap需要它時沒有任何用戶交互,則可以使用switch強制執行該操作--batch。每當需要用戶輸入時,這都會使sqlmap保持默認行為。
3.16.6.二進制內容檢索
選項 --binary-fields
在二進制內容檢索的情況下,例如在具有存儲二進制值列的表的示例中(例如,password具有二進制存儲密碼哈希值的列),可以使用--binary-fieldssqlmap 選項(額外)進行適當的處??理。然后檢索所有這些字段(即表列)并以其十六進制表示形式表示,因此之后可以使用其他工具(例如john)進行適當處理。
3.16.7.自定義(盲)SQL注入字符集
選項: --charset
在基于布爾的盲目和基于時間的盲目SQL注入情況下,用戶可以強制使用自定義字符集來加快數據檢索過程。例如,在轉儲消息摘要值(例如SHA1)的情況下,通過使用(例如)--charset="0123456789abcdef"預期的請求數比常規運行少30%左右。
3.16.8.從目標URL開始抓取網站
選項: --crawl
sqlmap可以通過從目標位置開始收集(爬網)潛在的脆弱鏈接。使用此選項,用戶可以設置深度(距起始位置的距離),在此深度以下sqlmap不會進入收集階段,因為只要有新的鏈接要訪問,該過程就會以遞歸方式進行。
針對MySQL目標運行的示例:
$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/" --batch --crawl=3
[...]
[xx:xx:53] [INFO] starting crawler
[xx:xx:53] [INFO] searching for links with depth 1
[xx:xx:53] [WARNING] running in a single-thread mode. This could take a while
[xx:xx:53] [INFO] searching for links with depth 2
[xx:xx:54] [INFO] heuristics detected web page charset 'ascii'
[xx:xx:00] [INFO] 42/56 links visited (75%)
[...]
選項 --crawl-exclude
使用此選項,您可以通過提供正則表達式來阻止頁面進行爬網。例如,如果您要跳過logout路徑中所有帶有關鍵字的頁面,則可以使用--crawl-exclude=logout。
3.16.9.設置輸出CSV文件中的分隔符
選項: --csv-del
當將轉儲的數據存儲為CSV格式(--dump-format=CSV)時,條目必須用“分隔值”分隔(默認值為,)。如果用戶要覆蓋其默認值,則可以使用此選項(例如--csv-del=";")。
3.16.10.DBMS身份驗證憑據
選項: --dbms-cred
在某些情況下,將警告用戶某些操作由于缺少當前的DBMS用戶權限而失敗,并且他可以嘗試使用此選項。在那些情況下,如果他admin使用此選項向sqlmap 提供用戶憑據,則sqlmap將嘗試OPENROWSET使用這些憑據通過專門的“運行方式”機制(例如,在Microsoft SQL Server上)重新運行有問題的部分。
3.16.11.數據輸出格式
選項: --dump-format
的SqlMap支持三種不同類型的存儲所傾倒時表數據轉換成相應的文件的輸出目錄內格式化的:CSV,HTML和SQLITE。默認值是CSV,其中每個表行都逐行存儲到文本文件中,并且每個條目都用逗號分隔,(或使用option提供--csv-del)。在的情況下HTML,輸出存儲在HTML文件中,其中每一行均以格式化表格內的一行表示。在的情況下SQLITE,輸出將存儲到SQLITE數據庫中,原始表內容將被復制到具有相同名稱的對應表中。
3.16.12.強制字符編碼用于數據檢索
選項: --encoding
為了正確解碼字符數據,sqlmap使用Web服務器提供的信息(例如HTTP標頭Content-Type)或來自第三方庫chardet的啟發式結果。
但是,在某些情況下,必須重寫此值,尤其是在檢索包含國際非ASCII字母(例如--encoding=GBK)的數據時。必須注意的是,由于存儲的數據庫內容與目標端使用的數據庫連接器之間的隱式不兼容,字符信息可能會不可逆轉地丟失。
3.16.13.預計到達時間
開關: --eta
可以實時計算和顯示估計的到達時間,以檢索每個查詢輸出。當用于檢索輸出的技術是任何盲SQL注入類型時,將顯示此信息。
針對僅受基于布爾的盲SQL注入影響的Oracle目標的示例:
$ python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id
=1" -b --eta
[...]
[hh:mm:01] [INFO] the back-end DBMS is Oracle
[hh:mm:01] [INFO] fetching banner
[hh:mm:01] [INFO] retrieving the length of query output
[hh:mm:01] [INFO] retrieved: 64
17% [========> ] 11/64 ETA 00:19
然后:
100% [===================================================] 64/64
[hh:mm:53] [INFO] retrieved: Oracle Database 10g Enterprise Edition Release 10.2
.0.1.0 - Prod
web application technology: PHP 5.2.6, Apache 2.2.9
back-end DBMS: Oracle
banner: 'Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod'
如您所見,sqlmap首先計算查詢輸出的長度,然后估計到達時間,以百分比顯示進度并計算檢索到的輸出字符的數量。
3.16.14.刷新會話文件
選項: --flush-session
由于您已經從上面的描述熟悉了會話文件的概念,因此很高興知道可以使用option刷新該文件的內容--flush-session。這樣,您可以避免在sqlmap中默認實現的緩存機制。其他可能的方法是手動刪除會話文件。
3.16.15.解析和測試表單的輸入字段
開關: --forms
假設您要針對龐大的搜索表單對SQL注入進行測試,或者要測試登錄繞過(通常只有兩個輸入字段,例如username和password),則可以將請求傳遞到sqlmap的請求文件中-r,設置為相應地發布數據(--data)或讓sqlmap為您完成!
上述兩個實例以及許多其他實例在HTML響應正文中均顯示為<form>和<input>標記,這就是該開關起作用的地方。
提供sqlmap --forms以及可在其中找到該表單的頁面作為目標URL(-u),并且sqlmap將為您請求目標URL,解析其擁有的表單并指導您測試這些表單輸入字段上的SQL注入(參數),而不是提供的目標網址。
3.16.16.忽略在會話文件中的查詢結果
開關: --fresh-queries
由于您已經從上面的描述熟悉了會話文件的概念,因此很高興知道可以使用option忽略該文件的內容--fresh-queries。這樣,您可以保持會話文件不變,并在選定的運行中避免恢復/還原查詢輸出。
3.16.17.使用DBMS十六進制函數進行數據檢索
開關: --hex
在丟失情況下,非ASCII數據的檢索需要特殊的需求。解決該問題的一種方法是使用DBMS十六進制函數。通過此開關打開,數據將在檢索之前編碼為十六進制格式,之后再未編碼為原始格式。
針對PostgreSQL目標的示例:
$ python sqlmap.py -u "http://192.168.48.130/sqlmap/pgsql/get_int.php?id=1" --b
anner --hex -v 3 --parse-errors
[...]
[xx:xx:14] [INFO] fetching banner
[xx:xx:14] [PAYLOAD] 1 AND 5849=CAST((CHR(58)||CHR(118)||CHR(116)||CHR(106)||CHR
(58))||(ENCODE(CONVERT_TO((COALESCE(CAST(VERSION() AS CHARACTER(10000)),(CHR(32)
))),(CHR(85)||CHR(84)||CHR(70)||CHR(56))),(CHR(72)||CHR(69)||CHR(88))))::text||(
CHR(58)||CHR(110)||CHR(120)||CHR(98)||CHR(58)) AS NUMERIC)
[xx:xx:15] [INFO] parsed error message: 'pg_query() [<a href='function.pg-query'
>function.pg-query</a>]: Query failed: ERROR: invalid input syntax for type num
eric: ":vtj:506f737467726553514c20382e332e39206f6e20693438362d70632d6c696e75782d
676e752c20636f6d70696c656420627920474343206763632d342e332e7265616c20284465626961
6e2032e332e322d312e312920342e332e32:nxb:" in <b>/var/www/sqlmap/libs/pgsql.inc.p
hp</b> on line <b>35</b>'
[xx:xx:15] [INFO] retrieved: PostgreSQL 8.3.9 on i486-pc-linux-gnu, compiled by
GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
[...]
3.16.18.自定義輸出目錄路徑
選項: --output-dir
默認情況下,sqlmap將會話和結果文件存儲在子目錄中output。如果您想使用其他位置,則可以使用此選項(例如--output-dir=/tmp)。
3.16.19.從響應頁面解析DBMS錯誤消息
開關: --parse-errors
如果將Web應用程序配置為調試模式,以便在HTTP響應中顯示后端數據庫管理系統錯誤消息,則sqlmap可以解析并為您顯示它們。
這對于調試目的很有用,例如了解為什么某些枚舉或接管開關不起作用-這可能與會話用戶的權限有關,在這種情況下,您會看到一行類似的DBMS錯誤消息Access denied for user <SESSION USER>。
針對Microsoft SQL Server目標的示例:
$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1"
--parse-errors
[...]
[xx:xx:17] [INFO] ORDER BY technique seems to be usable. This should reduce the
timeneeded to find the right number of query columns. Automatically extending th
e rangefor current UNION query injection technique test
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 10 i
s out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 6 is
out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 4 is
out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] target URL appears to have 3 columns in query
[...]
3.16.20.預處理響應數據
選項 --preprocess
使用此選項,可以將預處理腳本用于(HTTP)響應數據,然后再由sqlmap檢測引擎使用(例如,解碼數據或刪除垃圾)。例如,將所有小寫字符轉換為大寫字母的預處理腳本可以是:
#!/usr/bin/env python
def preprocess(page, headers=None, code=None):
return page.upper() if page else page, headers, code
3.16.21.將選項保存在配置INI文件中
選項: --save
可以將命令行選項保存到配置INI文件中。然后可以使用上述-c選項編輯生成的文件并將其傳遞到sqlmap 。
3.16.22.更新sqlmap
開關: --update
使用此選項,您可以直接從Git存儲庫將工具更新到最新的開發版本。您顯然需要Internet訪問。
如果由于某種原因該操作失敗,請git pull從sqlmap工作副本運行。它將執行與switch完全相同的操作--update。如果在Windows上運行sqlmap,則可以使用SmartGit客戶端。
在向郵件列表報告任何錯誤之前,強烈建議這樣做。
SqlMap中文版使用教程