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