sqlmap平時使用得非常的多,但命令也是十分的多。每次用的時候,都要去網上搜尋。於是決定自己總結一下sqlmap常見的用法,方便自己使用。
特殊參數
-v
-v表示顯示sqlmap在進行注入時的詳細資料,一共有七個等級,預設為1
0,只顯示python錯誤以及嚴重的資訊
1,同時顯示基本資料和警告資訊
2,同時顯示debug資訊
3,同時顯示注入的payload
4,同時顯示HTTP請求
5,同時顯示HTTP回應標頭
6,同時顯示HTTP響應頁面
–level
預設情況下SQLMAP只支援GET/POST參數的注入測試,但是當使用–level參數且數值>=2的時候會進行cookie注入測試;當>=3時,會進行User-Agent和Referer的注入測試。
–risk
risk設定風險等級,預設是1會測試大部分的測試語句,2會增加基於事件的測試語句,3會增加OR測試語句。
-f或者–fingerprint
執行檢查廣泛的DBMS版本指紋,這個參數用得不多。
擷取URL
-u或者–url
-u是最常見、常用的用法
python sqlmap.py -u "http://www.example.com/index.php?id=1"
-l
從burpsuite或者WebScarab代理日誌中去測試每個URL是否存在SQL注入
-r
從文字檔中擷取HTTP請求(這就要求此文字檔儲存的資訊是HTTP請求的),這樣HTTP就可以利用HTTP請求中的參數。
例如文字檔中的內容為:
POST /index.php HTTP/1.1
Hos: www.example.com
User-Agent: Mozilla/4.0
id=1
那麼使用sqlmap進行注入時,sqlmap自動將HOST和User-Agent設定為文字檔中的值
當處理的請求是HTTPS的時候,則需要使用–forc-ssl參數來使用,或者在HOST頭後面加上:443。
請求
POST請求
參數:–data
–data主要適用於POST方式提交。用法如下:
python sqlmap.py -u "http://www.example.com/index.php" --data="id=1"
cookie相關
參數:-cookie,–load-cookies,–drops-set-cookie
cookie參數在sqlmap中的應用主要是有2個方面:
Web應用需要進行登陸的時候
測試cookie注入
如果需要使用cookie進行登陸,則需要通過–cookie將cookie進行賦值。在HTTP請求中,遇到Set-cookie時,sqlmap會自動擷取並且在以後的請求中加入,並且會嘗試SQL注入。
當–level>=2時,則會嘗試進行cookie的注入測試。
User-Agent相關
參數:–user-agent,–random-agent
預設情況下sqlmap的HTTP要求標頭中的User-Agent是:
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
可以使用–user-agent參數來進行修改,同時也可以使用–random-agent參數來隨機化的從./txt/user-agents.txt中擷取。
當–level參數設定為3或者是3以上時,會嘗試對User-Agent進行注入測試。
Referer頭
參數:–referer
sqlmap可以在請求中偽造HTTP中的referer,用法與user-agent的用法相同。當–level參數設定為3或者3以上的時候會嘗試對referer注入。
請求設定
設定請求間隔
參數:–delay
設定兩次請求間的時間間隔。若設定為0.5則表示間隔時間是半秒,預設是沒有延遲
設定逾時時間
參數:–tiemout
設定逾時時間,主要是設定一個請求超過多久被判定為超市。弱設定為10.5表示是10.5秒,預設是30秒。
設定逾時重試
參數:–retries
當請求逾時時,設定重新嘗試串連次數,預設是3次。
關掉URL參數編碼
參數:–skip-urlencode
關閉URL編碼,這個參數一般用得比較少。目前幾乎所有的web伺服器都支援RFC標準。
執行自訂Python代碼
參數:–eval
在有些時候,需要根據一個參數的變化而修改另一個參數,才能形成正常的請求。此時就需要使用到--eval。例子如下
python sqlmap.py -u "http://www.example.com?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
上面的請求參數中的hash值就是id值的md5,這時就需要使用到自訂Python代碼了。
注入
測試參數
參數:-p,–skip
-p,表示的就是需要進行注入測試的參數。例如,-p “id,user-agent”
–skip,表示不不需要進行測試的參數,例如–skip=”user-agent”
偽靜態注入
很多架構會使用URL重寫技術,此時sqlmap就無法使用參數注入,但是可以在需要測試的參數後面加上*
例子如下
python sqlmap.py -u "http://blog.spoock.com/2016/09/04*/sqli-bypass/"
繞WAF
參數:–tamper
很多時候有WAF裝置會攔截sqlmap的注入,此時就需要使用--tamper對注入的SQL語句進行變形來進行繞過。所有的tamper指令碼都是在sqlmap中的tamper中的指令碼有定義的,可以進入到tamper目錄下進行查看。
python sqlmap.py - u"http://www.example.com?id=1" --tamper tamper/between.py,tamper/randomcase.py
提取資料
標誌
參數:-b,–banner
檢索資料庫管理系統的標識
使用者
參數:–current-user
返回當前資料庫的系統管理使用者
當前資料庫
參數:–current-db
返回當前串連的資料庫
DBA檢測
參數:–is-dba
檢測當前的系統管理使用者是否是DBA
資料庫枚舉
參數:–dbs
如果當前的使用者可以讀取所有的資料庫的資訊,即可列出所有的資料庫
資料庫表枚舉
參數:–tables -D someDatabase
列出某個資料庫(someDatabase)中所有的表名,例子如下:
python sqlmap.py -u "http://www.example.com?id=1" --tables -D cms
欄位枚舉
參數:–columns -D someDatabase -T someTable
列出someDatabase資料庫中的someTable表中的所有的欄位資訊。如果沒有使用-D參數指定某個資料庫的時候,則預設使用當前資料庫
Python sqlamp.py -u "http://www.example.com?id=1" --columns -D cms -T users
擷取表中資料的數目
參數:–count
使用–count就可以擷取表中資料的個數
python sqlmap.py -u"http://www.example.com?id=1" --count -D cms
上述的sqlmap的語句會列出在cms資料庫中所有的表的資料
下載表中的資料
參數:–dump -D someDatabase -T someTable -C someColumns
使用–dump就可以將某個表中的資料下載到本地。指定-C的值表示是下載某一列所有的資料,如果沒有指定則是下載表中所有的資料。
python sqlmap.py -u "http://www.example.com?id=1" --dump -D cms - T users
MISC
自訂SQL語句
參數:–sql-query,–sql-shell
雖然sqlmap會自行選擇sql語句進行測試,但是也可以選擇執行自訂的SQL語句。
python sqlmap.py -u"http://www.example.com?id=1" --sql-query "select database()"
擷取shell
參數:–os-cmd,–os-shell
使用–os-shell參數可以類比一個真實的shell,在此shell上可以輸入任何想執行的命令。
這個命令平時使用得較少,等有一定的使用體會再來進行詳細的補充說明。