Intruder 功能介紹
Intruder 是 Burp Suite 中最強大的自動化攻擊工具之一。它允許滲透測試人員對 HTTP 請求中的特定位置進行自動化測試,透過大量的 payload 來發現潛在的安全漏洞。
主要用途
- 暴力破解:對登入頁面進行密碼猜測攻擊
- 參數模糊測試(Fuzzing):測試輸入驗證和邊界條件
- 漏洞探測:自動化測試 SQL 注入、XSS 等漏洞
- 列舉攻擊:發現隱藏的資源、使用者帳號等
- 資料擷取:從回應中提取敏感資訊
介面概覽
Intruder 模組主要分為四個標籤頁:
| 標籤頁 | 功能說明 |
|---|---|
| Target | 設定目標主機和連接埠 |
| Positions | 定義請求中要進行攻擊的位置 |
| Payloads | 設定要使用的攻擊載荷 |
| Options | 設定攻擊選項和結果處理 |
攻擊類型
Intruder 提供四種不同的攻擊類型,每種類型適用於不同的測試場景。
1. Sniper(狙擊手)
Sniper 是最基本的攻擊類型,它會逐一對每個標記的位置進行測試。
特點:
- 一次只測試一個位置
- 其他位置保持原始值
- 適合單一參數的模糊測試
範例:
假設有兩個標記位置 §username§ 和 §password§,payload 列表為 [A, B, C]:
| 請求編號 | username | password |
|---|---|---|
| 1 | A | (原始值) |
| 2 | B | (原始值) |
| 3 | C | (原始值) |
| 4 | (原始值) | A |
| 5 | (原始值) | B |
| 6 | (原始值) | C |
使用場景:
- 測試單一輸入欄位的漏洞
- 參數模糊測試
- 識別有效的使用者名稱
2. Battering Ram(攻城錘)
Battering Ram 會將相同的 payload 同時套用到所有標記的位置。
特點:
- 所有位置使用相同的 payload
- 適合需要在多處使用相同值的情況
範例: 同樣的兩個位置和 payload 列表:
| 請求編號 | username | password |
|---|---|---|
| 1 | A | A |
| 2 | B | B |
| 3 | C | C |
使用場景:
- CSRF token 測試
- 需要在請求的多個位置使用相同值
3. Pitchfork(叉子)
Pitchfork 允許為每個位置設定不同的 payload 列表,並平行地進行測試。
特點:
- 每個位置有獨立的 payload 列表
- 各列表同步遍歷(第一個配第一個,第二個配第二個)
- 請求數量等於最短 payload 列表的長度
範例:
位置 1 的 payload:[admin, user, guest]
位置 2 的 payload:[pass1, pass2, pass3]
| 請求編號 | username | password |
|---|---|---|
| 1 | admin | pass1 |
| 2 | user | pass2 |
| 3 | guest | pass3 |
使用場景:
- 測試已知的使用者名稱和密碼組合
- 憑證填充攻擊(Credential Stuffing)
- 關聯資料測試
4. Cluster Bomb(集束炸彈)
Cluster Bomb 會對所有位置的 payload 進行完全排列組合。
特點:
- 測試所有可能的 payload 組合
- 請求數量為各 payload 列表長度的乘積
- 計算量最大,但覆蓋最全面
範例:
位置 1 的 payload:[admin, user]
位置 2 的 payload:[pass1, pass2, pass3]
| 請求編號 | username | password |
|---|---|---|
| 1 | admin | pass1 |
| 2 | admin | pass2 |
| 3 | admin | pass3 |
| 4 | user | pass1 |
| 5 | user | pass2 |
| 6 | user | pass3 |
使用場景:
- 暴力破解登入頁面
- 多參數漏洞測試
- 完整的組合測試
Payload 設定
Payload 是 Intruder 攻擊的核心,正確設定 payload 對攻擊效果至關重要。
Payload 類型
Burp Suite 提供多種 payload 類型:
1. Simple List(簡單列表)
手動輸入或載入 payload 列表。
| |
設定方式:
- 在 Payloads 標籤頁選擇 Payload type:
Simple list - 手動輸入或使用「Load」按鈕載入檔案
- 可使用「Add from list」載入內建列表
2. Numbers(數字)
產生數字序列,適合列舉攻擊。
設定參數:
- From:起始數字
- To:結束數字
- Step:遞增步長
- Format:數字格式(如:十進制、十六進制)
範例:
- 測試 ID 參數:
/user?id=§1§從 1 到 1000
3. Brute Forcer(暴力破解器)
根據字元集產生所有可能的組合。
設定參數:
- Character set:使用的字元集
- Min length:最小長度
- Max length:最大長度
範例字元集:
- 小寫字母:
abcdefghijklmnopqrstuvwxyz - 數字:
0123456789 - 特殊字元:
!@#$%^&*()
4. Runtime File(執行時檔案)
從外部檔案讀取 payload,適合大型字典。
優點:
- 記憶體效率高
- 支援大型字典檔案
- 即時讀取,不需預載
5. Dates(日期)
產生日期格式的 payload。
設定參數:
- From:起始日期
- To:結束日期
- Step:間隔天數
- Format:日期格式(如:
YYYY-MM-DD)
Payload Processing(處理規則)
可以對 payload 進行預處理:
| 規則類型 | 說明 |
|---|---|
| Add prefix | 新增前綴 |
| Add suffix | 新增後綴 |
| Match/Replace | 取代特定字串 |
| Encode | 編碼(URL、Base64 等) |
| Hash | 雜湊處理(MD5、SHA 等) |
| Case modification | 大小寫轉換 |
範例: 將密碼進行 MD5 雜湊後再發送:
- 新增處理規則:Hash > MD5
- payload
password123會變成482c811da5d5b4bc6d497ffa98491e38
Payload Encoding(編碼設定)
預設情況下,Intruder 會對特殊字元進行 URL 編碼。
設定位置: Payloads > Payload Encoding
可以選擇:
- 啟用/停用 URL 編碼
- 自訂需要編碼的字元
結果分析
攻擊完成後,需要分析結果以識別成功的請求或潛在漏洞。
結果視窗欄位
| 欄位 | 說明 |
|---|---|
| Request | 請求編號 |
| Payload | 使用的 payload 值 |
| Status | HTTP 狀態碼 |
| Error | 錯誤資訊 |
| Timeout | 是否逾時 |
| Length | 回應長度 |
| Comment | 備註 |
分析技巧
1. 依據狀態碼篩選
- 200 OK:請求成功
- 302 Found:重新導向(可能登入成功)
- 401/403:認證失敗或禁止存取
- 500:伺服器錯誤(可能觸發漏洞)
2. 依據回應長度篩選
不同的回應長度通常表示不同的處理結果:
- 登入成功的回應通常與失敗不同
- 有效使用者名稱可能產生不同長度的錯誤訊息
操作步驟:
- 點擊「Length」欄位排序
- 找出異常的回應長度
- 檢視對應的請求和回應
3. 使用 Grep Match
自動標記包含特定字串的回應:
設定位置: Options > Grep - Match
範例:
- 搜尋「Login successful」標記成功登入
- 搜尋「error」或「exception」標記錯誤
4. 使用 Grep Extract
從回應中提取特定資料:
設定位置: Options > Grep - Extract
範例:
- 提取 CSRF token
- 提取錯誤訊息內容
- 提取使用者資訊
匯出結果
可以將攻擊結果匯出以進行進一步分析:
- 選擇「Save」選項
- 選擇匯出格式(XML、CSV 等)
- 選擇要匯出的欄位
實戰範例
範例一:暴力破解登入頁面
目標: 對登入頁面進行密碼猜測攻擊
步驟:
攔截登入請求
使用 Proxy 攔截正常的登入請求:
1 2 3 4 5POST /login HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencoded username=admin&password=test發送到 Intruder
右鍵選擇「Send to Intruder」
設定攻擊位置
在 Positions 標籤頁中,清除所有標記後,只標記密碼位置:
1username=admin&password=§test§選擇攻擊類型
選擇「Sniper」模式
設定 Payload
載入常用密碼字典:
- 使用內建列表:Passwords
- 或載入外部字典檔案(如 rockyou.txt)
設定 Grep Match
新增成功標記字串:
WelcomeDashboardLogin successful
開始攻擊
點擊「Start attack」
分析結果
- 檢查標記為成功的請求
- 注意回應長度異常的請求
- 檢查 302 重新導向的請求
範例二:列舉有效使用者名稱
目標: 透過錯誤訊息差異發現有效的使用者名稱
步驟:
分析錯誤訊息
觀察不同情況的錯誤訊息:
- 無效使用者:「User does not exist」
- 有效使用者但密碼錯誤:「Invalid password」
設定攻擊
標記使用者名稱位置:
1username=§admin§&password=wrongpassword設定 Payload
載入使用者名稱字典或常見名稱列表
設定 Grep Match
新增「Invalid password」作為有效使用者的標記
分析結果
被標記的請求表示使用者名稱有效
範例三:參數模糊測試發現 SQL 注入
目標: 測試參數是否存在 SQL 注入漏洞
步驟:
準備 SQL 注入 payload
建立 SQL 注入測試列表:
1 2 3 4 5 6 7 8 9 10' '' '-- ' OR '1'='1 ' OR '1'='1'-- ' UNION SELECT NULL-- 1 OR 1=1 1' OR '1'='1 admin'-- '; DROP TABLE users--設定攻擊位置
標記可疑參數:
1GET /search?id=§1§ HTTP/1.1設定 Grep Match
新增常見的 SQL 錯誤訊息:
SQL syntaxmysql_fetchORA-PostgreSQLSQLiteODBC
分析結果
- 檢查包含錯誤訊息的回應
- 注意回應時間異常的請求(可能是時間盲注)
- 檢查回應內容的變化
範例四:目錄暴力列舉
目標: 發現隱藏的網站目錄和檔案
步驟:
設定攻擊請求
1 2GET /§admin§ HTTP/1.1 Host: example.com設定 Payload
載入目錄字典:
- admin
- backup
- config
- test
- api
- uploads
- .git
篩選結果
- 狀態碼 200:目錄存在
- 狀態碼 301/302:目錄存在但重新導向
- 狀態碼 403:目錄存在但禁止存取
進階技巧
1. 使用 Macros 處理 Session
當目標網站需要有效的 Session 時:
- 前往
Project options>Sessions - 新增 Session Handling Rule
- 設定 Macro 自動獲取新的 Session
2. 繞過速率限制
策略:
- 調整請求間隔時間
- 使用多個 IP 地址
- 在 Resource Pool 中設定並發數
設定位置: Options > Request Engine
3. 結合 Extension
使用 BApp Store 的擴充套件增強功能:
- Turbo Intruder:高速攻擊引擎
- Autorize:自動化授權測試
- Param Miner:隱藏參數發現
注意事項
法律與道德考量
- 取得授權:務必在測試前取得書面授權
- 測試範圍:只對授權範圍內的目標進行測試
- 避免損害:注意攻擊可能對目標系統造成的影響
效能考量
- 控制請求速率:避免對目標造成 DoS
- 設定適當的超時時間:避免長時間等待無回應的請求
- 監控資源使用:大規模攻擊可能消耗大量記憶體
Community vs Professional 版本差異
| 功能 | Community | Professional |
|---|---|---|
| 攻擊速度 | 有限制 | 無限制 |
| 並發請求 | 有限制 | 可自訂 |
| 儲存專案 | 僅暫存 | 完整儲存 |
總結
Burp Suite Intruder 是一個功能強大的自動化攻擊工具。本文介紹了:
- 四種攻擊類型:Sniper、Battering Ram、Pitchfork、Cluster Bomb
- Payload 設定:多種類型和處理規則
- 結果分析:狀態碼、回應長度、Grep 匹配
- 實戰範例:暴力破解、使用者列舉、SQL 注入測試
掌握 Intruder 的使用技巧,可以大幅提升滲透測試的效率。建議搭配 Repeater 進行手動驗證,確保測試結果的準確性。