在 Burp Suite 中,你可以使用 Burp Extender 編寫自定義攔截器插件,以攔截并修改 HTTP 請求或響應。Burp Suite 支持 Java 和 Python (Jython) 作為擴展開發語言。以下是一個完整的流程,介紹如何創建一個 Burp 插件來攔截請求并進行自定義處理。
1. 選擇開發語言
Burp Suite 官方推薦使用 Java 進行插件開發,但如果你更熟悉 Python,可以使用 Jython(Java 版 Python)。
下面分別介紹 Java 版 和 Python 版 實現。
2. 使用 Java 編寫攔截器插件
如果你熟悉 Java,可以使用 Burp Extender API 編寫一個攔截器。
此插件示例:
- 攔截所有 HTTP 請求
- 在請求頭中添加一個自定義字段
X-Custom-Header: BurpInterceptor
- 攔截特定接口
/api/target-endpoint
并修改其響應
代碼:BurpInterceptor.java
import burp.*;import java.io.PrintWriter;public class BurpInterceptor implements IBurpExtender, IHttpListener {private PrintWriter stdout;@Overridepublic void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {// 設置插件名稱callbacks.setExtensionName("Custom HTTP Interceptor");// 獲取控制臺輸出stdout = new PrintWriter(callbacks.getStdout(), true);// 注冊 HTTP 監聽器callbacks.registerHttpListener(this);stdout.println("Custom HTTP Interceptor Loaded!");}@Overridepublic void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) {// 獲取請求或響應數據IRequestInfo requestInfo = BurpExtenderHelpers.getHelpers().analyzeRequest(messageInfo);String url = requestInfo.getUrl().toString();if (messageIsRequest) {// 處理 HTTP 請求stdout.println("Intercepting Request: " + url);// 修改請求頭byte[] requestBytes = messageInfo.getRequest();String requestStr = new String(requestBytes);String modifiedRequest = requestStr.replaceFirst("User-Agent: .*", "User-Agent: BurpCustomPlugin");messageInfo.setRequest(modifiedRequest.getBytes());} else {// 處理 HTTP 響應stdout.println("Intercepting Response for: " + url);if (url.contains("/api/target-endpoint")) {String modifiedResponse = "HTTP/1.1 403 Forbidden\r\nContent-Length: 0\r\n\r\n";messageInfo.setResponse(modifiedResponse.getBytes());stdout.println("Modified response to 403 Forbidden.");}}}
}
編譯和使用
- 下載 Burp Suite Extender API
- 從 PortSwigger 官方網站 下載
burp-extender-api.jar
- 從 PortSwigger 官方網站 下載
- 編譯插件
javac -cp burp-extender-api.jar BurpInterceptor.java jar cf BurpInterceptor.jar BurpInterceptor.class
- 加載插件
- 打開 Burp Suite → Extender → Extensions
- 選擇 Add → 選擇
BurpInterceptor.jar
- 插件加載后,Burp 控制臺應顯示
"Custom HTTP Interceptor Loaded!"
3. 使用 Python (Jython) 編寫攔截器插件
如果你更熟悉 Python,可以使用 Jython 進行開發。以下是一個類似的 Python 版本:
- 攔截所有 HTTP 請求
- 在請求頭中添加
X-Burp-Plugin: Active
- 攔截
/api/target-endpoint
并修改返回內容
代碼:BurpInterceptor.py
from burp import IBurpExtender, IHttpListener
from java.io import PrintWriterclass BurpExtender(IBurpExtender, IHttpListener):def registerExtenderCallbacks(self, callbacks):self._callbacks = callbacksself._helpers = callbacks.getHelpers()self.stdout = PrintWriter(callbacks.getStdout(), True)# 設置插件名稱callbacks.setExtensionName("Python HTTP Interceptor")# 注冊 HTTP 監聽器callbacks.registerHttpListener(self)self.stdout.println("Python HTTP Interceptor Loaded!")def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):requestInfo = self._helpers.analyzeRequest(messageInfo)if messageIsRequest:# 修改請求頭,添加自定義 Headerrequest = self._helpers.bytesToString(messageInfo.getRequest())modified_request = request.replace("User-Agent: ", "User-Agent: BurpCustom\nX-Burp-Plugin: Active\n")messageInfo.setRequest(self._helpers.stringToBytes(modified_request))self.stdout.println("Modified request headers.")else:# 攔截特定接口并修改響應url = requestInfo.getUrl().toString()if "/api/target-endpoint" in url:modified_response = "HTTP/1.1 403 Forbidden\r\nContent-Length: 0\r\n\r\n"messageInfo.setResponse(self._helpers.stringToBytes(modified_response))self.stdout.println("Intercepted /api/target-endpoint, modified response to 403 Forbidden.")
加載 Python 插件
- 下載并安裝 Jython
- 下載 Jython Standalone (
jython-standalone-2.7.2.jar
)
- 下載 Jython Standalone (
- 加載 Python 插件
- 在 Burp Suite → Extender → Extensions
- 選擇 Add
- 選擇 Extension Type: Python
- 選擇
BurpInterceptor.py
- 運行插件,Burp 控制臺應顯示
"Python HTTP Interceptor Loaded!"
4. 選擇 Java 還是 Python
語言 | 適用場景 | 優勢 | 缺點 |
---|---|---|---|
Java | 高性能 Burp 插件 | 官方推薦,運行效率高 | 需要編譯,開發較復雜 |
Python (Jython) | 快速開發 Burp 插件 | 代碼簡單,修改方便 | 依賴 Jython,運行效率較低 |
如果是快速測試或實驗性功能,建議使用 Python(Jython)。
如果是長期使用的插件,建議使用 Java。
5. 總結
- Java 版插件 適用于 生產環境和高性能需求,但開發較復雜。
- Python (Jython) 插件 適用于 快速測試,代碼修改更靈活。
- Burp Extender API 允許攔截、修改 HTTP 請求和響應,適用于 Web 安全測試。
個人推薦使用 jython 節省時間,用起來真的很方便