目錄
介紹
檢測和利用SQL注入的工具。
官網:sqlmap官網
用戶手冊:sqlmapWiki
本文參考用戶手冊,有刪減,算是低創,但並非完全翻譯,有包含自己的抓包等內容。
命令參數
選項 | 含義 | 描述 |
---|---|---|
-h,--help |
幫助 | 顯示基本幫助消息並退出 |
-hh | 高級幫助 | 顯示高級幫助消息並退出 |
--version | 版本 | 顯示程序的版本號並退出 |
-u,-url=URL | URL | 目標URL(例如“ http://www.site.com/vuln.php?id=1”) |
-d | DIRECT | 連接字符串,用於數據庫直接連接 |
-l | LOGFILE | 從Burp或WebScarab代理日誌文件中解析目標 |
-m | BULKFILE | 掃描文本文件中給定的多個目標 |
-r | REQUESTFILE | 從文件加載HTTP請求 |
-g | GOOGLEDORK | 將Google dork結果處理爲目標URL |
-c | CONFIGFILE | 從配置INI文件中加載選項 |
-A | AGENT | HTTP User-Agent標頭值 |
-H | HEADER | 額外的頭部(例如“ X-Forwarded-For:127.0.0.1”) |
--method=METHOD | METHOD | 強制使用給定的HTTP方法(例如,PUT) |
--data=DATA | DATA | 要通過POST發送的數據字符串(例如“ id = 1”) |
--param-del=PARAM | PARAM | 用於分割參數值的字符(例如,&,;) |
--cookie=COOKIE | COOKIE | HTTP Cookie標頭值(例如“ PHPSESSID = a8d127e ..”) |
--random-agent | User-Agent | 使用隨機選擇的HTTP User-Agent標頭值 |
--auth-type=AUTH | AUTH | HTTP身份驗證類型(Basic, Digest, NTLM 或者 PKI) |
--auth-cred=AUTH | --auth-cred=AUTH | HTTP身份驗證憑據(用戶名:密碼) |
--proxy=PROXY | PROXY | 使用代理連接到目標URL |
--tor | Tor | 使用Tor匿名網絡 |
--delay=DELAY | DELAY | 每個HTTP請求之間的延遲秒數 |
--timeout=TIMEOUT | TIMEOUT | 超時連接之前等待的秒數(默認爲30) |
--randomize=RPARAM | RPARAM | 隨機更改給定參數的值 |
--check-tor | Check Tor | 檢查Tor是否正確使用 |
-p | TESTPARAMETER | 可測試的參數 |
--dbms=DBMS | DBMS | 強制將後端DBMS設置爲提供的值 |
--level=LEVEL | LEVEL | 要執行的測試級別(1-5,默認爲1) |
--risk=RISK | RISK | 執行測試的風險(1-3,默認值爲1) |
--technique=TECH | TECHNIQUE | 要使用的SQL注入技術(默認爲“BEUSTQ”) |
-a, --all | ALL | 檢索所有內容 |
-b, --banner | BANNER | 檢索DBMS標語 |
--current-user | current-user | 檢索DBMS當前數據庫 |
--passwords | passwords | 枚舉DBMS用戶密碼哈希值 |
--tables | tables | 枚舉DBMS數據庫表 |
--columns | columns | 枚舉DBMS數據庫表列 |
--schema | schema | 枚舉DBMS模式 |
--dump | dump | 轉儲DBMS數據庫表條目 |
--dump-all | dumpall | 轉儲所有DBMS數據庫表條目 |
-D DB | DATABASE | DBMS數據庫枚舉 |
-T TBL | TABLE | 要枚舉的DBMS數據庫表 |
-C COL | COLUMN | 要枚舉的DBMS數據庫表列 |
--os-shell | 提示輸入交互式操作系統外殼 | |
--os-pwn | 提示輸入OOB shell,Meterpreter或VNC | |
--batch | 從不要求用戶輸入,使用默認行爲 | |
--flush-session | SESSION | 刷新當前目標的會話文件 |
--sqlmap-shell | 提示輸入交互式sqlmap shell | |
--wizard | wizard | 面向初學者的簡單向導界面 |
指定目標
直連數據庫
選項:-d
服務型數據庫(前提知道數據庫用戶名和密碼)
格式:
DBMS://USER:PASSWORDODBMS_IP:DBMS_PORT/DATABASE NAME(MySQL,Oracle,Microsoft SQL Server,PostgreSQL,etc.)
例如:
python sqlmap.py -d "mysql://root:84418733w@localhost:3306/test2" -f --banner
可能出現的問題:
提示是缺少包的問題,通過提示,使用以下命令可安裝所需包(根據自身python版本及平臺修改命令)
git clone https://github.com/petehunt/PyMySQL/
cd PyMySQL/
python ./setup.py install
pip3 install sqlalchemy
文件型數據庫(前提知道數據庫絕對路徑)
格式:
DBMS://DATABASE_FILEPATH(SQLite,Microsoft Access,Firebird等等)
URL探測
選項:-u或者--url
http協議及https協議都可以,指定端口時使用ip:port在url中添加即可。
python sqlmap.py -u "http://192.168.31.174:8080/login.php?id=0"
文件讀取目標
- -l 從Burpsuite proxy或WebScarab proxy中讀取Http請求日誌文件。
- -x 從sitemap.xml站點地圖文件中讀取目標探測。
- -m 從多行文本格式文件讀取多個目標,對多個目標進行探測。
- -r 從文本文件中讀取Http請求作爲Sql注入探測的目標。
- -c 從配置文件sqlmap.conf中讀取目標探測。
-l 博主僅安裝了Burpsuite,展示下Burpsuite如何操作。
示例
python sqlmap.py -l E:\Workspace\Burp_suite_workspace\test.log
按y進行探測並繼續。
-x 這個很多站點都沒有了,有的也基本沒有GET、POST,就不做展示了。
-m 多個目標就是指多個url,你可以把自己想要探測的多個url寫到txt文本中
python sqlmap.py -m urls.txt
-r 把抓到的http包複製到txt文件中,進行探測
示例
python sqlmap.py -l E:\Workspace\Burp_suite_workspace\httpbinGet.txt
這裏提示沒有參數,你可以嘗試其他的,或者靶場中的。
-c 配置文件探測
從配置文件中我們可以看到一些參數,填寫參數即可。
Google dork注入
選項:-g
就是一些google高級搜索作爲url, 常見的高級搜索有infile,inurl,intitle,filetype等。
python sqlmap.py -g "inurl:\".php?id=1\""
不怎麼樣,翻了牆也半天沒反應,瞭解下好了。
Http參數
有關Http協議的內容,可以參考網絡-http協議學習筆記(消息結構、請求方法、狀態碼等)
設置請求方法
sqlmap一般會調用合適的請求方法,但是,PUT等請求方法sqlmap不會自動調用,需要手動配置。
選項:--method=PUT
POST提交參數
sqlmap默認的是使用GET方法,可以使用--data參數來進行數據提交,key=value形式,使用&連接。
選項:--data=DATA
python sqlmap.py -u "http://www.target.com" --data="key1:value&key2:value"
設置參數分隔符
默認的分割符爲&,可以進行設置,個人認爲就用默認的就好了
選項:--param-del=PARAM
python sqlmap.py -u "http://www.target.com" --data="key1:value;key2:value" --parameter-del=";"
設置Cookie
以下兩種情況可能會使用:
- 測試頁面需要登錄,登錄狀態用cookie識別
- 想要檢測是否存在Cookie注入
--cookie=COOKIE。同時,--leverl=2或者2以上
設置User-Agent
選項:–user-agent,-A,–random-agent
Sqlmap發送的HTTP請求中的User-Agent默認值爲:
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx"
很明顯,sqlmap默認的User-Agent中含有sqlmap,而一般的網頁瀏覽是瀏覽器,比如下圖使用火狐瀏覽器進行訪問,因此,探測目標可能根據User-Agent對sqlmap進行攔截等處理,有必要進行User-Agent的僞造。
使用-A參數進行修改,如下所示。
再次抓包後發現User-Agent已修改。
當然,沒必要每次用瀏覽器抓包,你可以保存下來,或者使用–random-agent參數,用sqlmap中自帶的一些。
當“–level”參數設置爲3或更高時,Sqlmap會檢測User-Agent是否存在注入漏洞。
Host
選項:–host
使用該參數可以手動指定HTTP頭中的Host值。
當“–level”參數設置爲5或更高時,Sqlmap會檢測Host是否存在注入漏洞。
Referer
選項:–referer
使用該參數可以指定HTTP頭中的Referer值。
當“–level”設置爲3或更高時,Sqlmap會檢測Referer是否存在注入漏洞
額外的HTTP頭部
選項:-H,--header,--headers
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "blog:lady_killer9" --banner
當然,對於已有的頭部字段,也可以修改。
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "User-Agent:lady_killer9" --banner
協議認證
選項:–auth-type和–auth-cred
“–auth-type”用於指定認證方式,支持四種身份認證方式:Basic、Digest、NTLM、PKI
一般就是Basic,輸入登錄的用戶名和密碼,類似於Postman中的Basic Auth。
設置代理
選項:–proxy、–proxy-cred、–proxy-file和–ignore-proxy
使用參數“–proxy”來設置一個HTTP(S)代理,格式是“http(s)://ip:port”。
如果代理需要認證,使用參數“–proxy-cred”來提供認證憑證,格式是“username:password”。
使用參數“–proxy-file”來指定一個存儲着多條代理的文件。
使用參數“–ignore-proxy”忽略本地代理設置。
事實證明,不花錢就想得到免費ip代理,,,是在想peach。。。
Tor匿名網絡
選項:–tor、–tor-type、–tor-port和–check-tor
設置延遲
前端時間看見一位b站up主,吐槽自己的親戚好友,讓他使用刷*等軟件刷視頻賺錢,然後他寫了一個腳本,跳過廣告,自動滾屏,然後一天弄了幾十塊,還沒提現,就被後臺封號了。
爲什麼提到這個呢,因爲一些後臺會看你的訪問頻率,檢測DDOS攻擊或其他危險行爲,所以這裏我們設置延遲,讓兩個數據包之間有延遲,模擬人工瀏覽器訪問。
–-delay
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" --delay=0.5 --banner
設置超時
選項:-–timeout
超時時間默認是30秒,可以用參數“–timeout”指定超時時間。
設置重試次數
選項:-–retries
超時後Sqlmap會進行重試,重試次數默認爲3,可以用參數“–retries”指定最大重試次數。
設置隨機化參數
選項:-–randomize
使用該參數,Sqlmap會隨機生成每次HTTP請求中參數的值,可以進行簡單的fuzz,類似於Peach,內部原理是變異還是什麼目前還不清楚。
前面是a=xxx,sqlmap有隨機的賦值a其他的值,a=123時,也會隨機更改爲4184等值。
設置日誌過濾目標
選項:-–scope,配合-l參數
指定一個Python正則表達式對代理日誌進行過濾,只測試符合正則表達式的目標,如:
python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
設置忽略
選項:--ignore-code
如果測試的站點偶爾返回導致常規sqlmap運行出現問題的HTTP錯誤代碼(例如,401(未授權)),想忽略該站點並繼續進行測試,可以使用 --ignore-code
設置HTTP私鑰
選項:--auth-file
文件格式爲包含證書和私鑰的PEM格式
設置安全模式
選項:--safe-url
,--safe-post
,--safe-req
和--safe-freq
避免過多的請求失敗後會話被破壞,對錶明safe的不進行任何類型的注入
--safe-url
:測試期間經常訪問的URL地址。--safe-post
:HTTP POST數據發送到給定的安全URL地址。--safe-req
:從文件加載並使用安全的HTTP請求。--safe-freq
:測試兩次訪問給定安全位置之間的請求。
設置忽略URL編碼
選項:–skip-urlencode
使用該參數可以關閉URL編碼,服務器端不支持RFC標準時使用。
繞過反CSRF保護
選項:--csrf-token
和--csrf-url
許多站點都以令牌,每個頁面響應期間隨機設置的隱藏字段值的形式結合了反CSRF保護。SqlMap的會自動嘗試識別並繞過這種保護,但也有選項--csrf-token
,並--csrf-url
可以用來進一步微調它。選項--csrf-token
可用於設置包含隨機標記的隱藏值的名稱。在網站爲此類字段使用非標準名稱的情況下,這很有用。選項--csrf-url
可用於從任意URL地址檢索令牌值。如果易受攻擊的目標URL最初不包含必要的令牌值,但需要從其他位置提取該令牌值,則此功能很有用。
強制使用SSL / HTTPS
選項: --force-ssl
如果用戶想要向目標強制使用SSL / HTTPS請求,則可以使用此選項。在使用選項--crawl
收集URL或爲-l選項提供Burp日誌的情況下,這個選項很有用。
性能優化
設置持久HTTP連接
選項:-–keep-alive
該參數讓Sqlmap使用HTTP長連接,頭部的Connection字段會變爲keep-alive。該選項與“–proxy”不兼容。
設置不接收HTTP的body
選項:-–null-connection
有特殊的HTTP請求類型,可用於獲取HTTP響應的大小而無需獲取HTTP正文。這種知識可以在盲目注射技術被用來區分True
、False
響應。提供此選項後,sqlmap將嘗試測試和利用兩種不同的NULL連接技術:Range
和HEAD
。如果目標Web服務器支持其中任何一種,則可以明顯節省已使用的帶寬,從而提高速度。
設置多線程
選項:-–threads
使用該選項指定Sqlmap可以達到的最大併發數。默認爲3個,可修改,最大爲10。
設置預測輸出
選項: --predict-output
此選項在推理算法中用於對要檢索的值的字符進行順序統計預測。此開關與--threads
選項不兼容。
未完待續...