Burp 是 Web 安全測試中不可或缺的神器。每一個師傅的電腦裡面應該都有一個 Burp。同時 Burp 和很多其他神器一樣,它也支援插件。但是目前總體來說網上 Burp 插件開發的資料不是特别特别的豐富。今天我也來講講自己如何從一個完全不會 Burp 插件開發的小白如何學習 Burp 插件的開發。
如何調試
其實開發一樣東西,調試真的特别重要。如果沒有調試,那就和瞎子摸象差不多,非常的難頂。尤其是在 Burp 插件的開發過程中,如果你不可以調試,那你就必須把 jar 包打包出來,再安裝,然後通過 output 來列印調試,這樣的确非常地痛苦。後來在網上找了一些資料,一開始沒太明白,後來研究發現原來調試配置這麼簡單。這麼我們以宇宙 JAVA 開發神器 IDEA 為例。
1.配置 DEBUG
首先是在 IDEA 裡面配置調試。點選右上角裡面的配置,點選 "Edit Configurations" 就可以進入對 DEBUG 的配置頁面。新增一個 Remote 配置,命名可以随自己的喜好。
2. 指令行啟動 Burp
為了配合調試,需要在指令行中使用剛才建立 DEBUG 配置的參數來啟動 Burp。
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar burpsuite_community_v2.1.02.ja
3. 部署 jar 包,打斷點
可以現在程式中打一下斷點。接着就是編譯 jar 包,并且啟動 IDE 的 DEBUG。将 jar 包部署到 Burp 中,下面就可以快樂地調試了。
Burp 開發
老實說其實 Burp 插件開發其實還是比較簡單的,隻要你掌握正常的套路,熟悉了基本的 API 之後,基本就可以進行插件的開發。插件開發最困難的部分其實是 GUI 的開發,不過這也屬于 JAVA GUI 開發的範疇,這個暫不讨論。Burp 開發注意以下幾點:
- 所有 Burp 插件都必須實作 IBurpExtender 接口
- 實作的類必須叫做 BurpExtender
- 必須要重寫 registerExtenderCallbacks 方法
後續如果需要調用啟用其它接口的方法,那麼也需要在 BurpExtender 中實作相應的接口。講一個例子,比如要對 Proxy 進行相關的操作。
首先,需要在 BurpExtender 中實作 IProxyListener 接口,接下來就需要實作 processProxyMessage 方法。在 processProxyMessage 方法中,就可以對發送的請求以及相應進行處理。
public
下面再講一個例子,擷取請求中的請求頭:
public List<Map<String, String>> getHeaders(IHttpRequestResponse messageInfo) {
List<Map<String, String>> headers = new ArrayList<>();
IRequestInfo analyzeRequest = helpers.analyzeRequest(messageInfo);
List<String> h = analyzeRequest.getHeaders();
for (String h1: h) {
Map<String, String> hMap = new HashMap<>();
if (h1.startsWith("GET") || h1.startsWith("POST")) {
continue;
} else {
String[] header = h1.split(":", -1);
hMap.put(header[0], header[1]);
}
headers.add(hMap);
}
return headers;
}
總結
其實總的來說 Burp 插件開發并不特别困難,隻要當一個合格的 API 調用者就可以了。網上目前也有很多開源的 Burp 插件代碼,其實你可以找一個感興趣的 Burp 插件代碼看一下,你就可以快速地了解這些 API 的作用。其實 Burp 的 Extender 中的 APIs 就已經列出了所有可用的 API 接口。