作者:
園長
·
2014/11/20 15:08
0x00 簡介
BurpSuite神器這些年非常的受大家歡迎,在國慶期間解了下Burp相關開發並寫了這篇筆記。希望和大家分享一下JavaSwing和Burp外掛相關開發。第一節僅簡單的瞭解下API相關,後面會帶著大家利用Netbeans開發我們自己的擴充套件以及各種有趣的小工具。
0x01 怎麼學?
第一個問題是我們應該怎麼去寫自己的Burp擴充套件?我們可以找一些現有的擴充套件學習下,或者參閱官方文件或者手冊,其次才是google一下是否有相關的教程、文章進行學習。
google搜尋:burp suite api,找到官方的API相關說明。
http://portswigger.net/burp/extender/
http://blog.portswigger.net/2012/12/draft-new-extensibility-api.html
You can:
執行和修改 HTTP 請求和響應
訪問執行時的資料,比如:代理日誌、目標站map和掃描問題
啟動自己的action,如掃描和網站爬行
自定義掃描檢測和註冊掃描問題
提供自定義Intruder payloads和payload處理
查詢和更新Suite-wide的目標作用域
查詢和更新session處理cookie jar
實現自定義session處理action
新增自定義的標籤(tabs)和上下文選單項到Burp 使用者介面
可使用自己的介面新增Burp的HTTP訊息編輯器
自定義Burp的HTTP訊息編輯器處理Burp不支援的資料格式
獲取headers, parameters, cookies分析HTTP請求和響應
讀取或修改Burp配置設定
儲存或恢復Burp狀態
0x02 學習API
API下載地址:http://portswigger.net/burp/extender/api/burp_extender_api.zip
下載API後新建Eclipse專案匯入API檔案:
不急於動手寫程式碼,先看下官方的Demo:
下載第一個HelloWorld解壓它並複製BurpExtender.java到我們的專案當中:
BurpExtender.java:
BurpExtender.java實現了IBurpExtender介面,而IBurpExtender僅定義了一個方法:registerExtenderCallbacks(註冊擴充套件回撥方法):
#!java
public interface IBurpExtender{
/**
* 這個方法將在擴充套件載入的時候.他將會註冊一個
*<code>IBurpExtenderCallbacks</code> 介面例項,可透過擴充套件
* 實現各種呼叫
[email protected]
*<code>IBurpExtenderCallbacks</code>物件.
*/
void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks);
}
在確認程式碼無任何錯誤後選中專案並匯出為jar,建議安裝一個打jar包的外掛:Build Fat Jar這樣你就可以非常方便的把整個專案打成一個jar包了.
如果你和我一樣從來都沒有使用過BurpSuite,那麼不妨先開啟它把玩幾分鐘。在extender(擴充套件)標籤當中看到了Burp的外掛載入介面。
Add我們剛打好的jar包,載入到Burp擴充套件中去。
這個時候可以看到我們的外掛已經成功執行了,在LoadBurpExtension中的output標籤已經看到了Hello output(stdout.println("Hello output");)
Errors標籤也輸出了Hello errors()stderr.println("Hello errors");
對應的錯誤資訊(throw new RuntimeException("Hello exceptions");)。
外掛名(callbacks.setExtensionName("Hello world extension");),
以及提醒皮膚的資訊Hello alerts(callbacks.issueAlert("Hello alerts");)。
獲取到Burp混淆後的擴充套件載入類(自定義類載入器):
如你所想,java載入外部擴充套件利用了URLClassLoader load外部的jar(對這感興趣的朋友可以看下p2j上的相關文章:http://p2j.cn/?s=URLClassLoader&submit=Search)。
第一個HelloWorld很容易就搞定了,第二個Event listeners的Demo。所謂事件監聽即你可以透過Burp的IBurpExtenderCallbacks去註冊自己的監聽方法。Demo只提供了四種事件(包含HTTP監聽、代理、Scanner、狀態監聽),所有的未列舉的事件直接用Eclipse的快捷鍵提示就出來了:
比如想要新增一個IScopeChangeListener很簡單,讓當前類實現IScopeChangeListener介面,註冊ScopeChange事件(callbacks.registerScopeChangeListener(this);)重寫其scopeChanged方法即可。
設定本地瀏覽器代理後再次訪問任意網站後回到擴充套件標籤,選中我們的擴充套件程式可以看到監聽中的請求已輸出。
0x03 HelloWorld
在編寫擴充套件的時候一定要注意,你的包裡面務必包含一個BurpExtender類可以有多個類實現IBurpExtender。 建立自己的Panel並加到Burp主窗體,AppPanel是我自己寫的一個應用皮膚。我們可以透過實現ITab 重寫getTabCaption和getUiComponent方法(當然實現IBurpExtender介面是必須的)將我們自己的ui巢狀到Burp當中。getTabCaption即獲取獲取標題,getUiComponent獲取元件這裡需要給Burp返回你封裝的元件物件。
我們可以先寫好JPanel再嵌入到Burp當中,這裡提供了一個簡單的ApplicationPanel小Demo:http://p2j.cn/?p=1512
#!java
package burp;
import java.awt.Component;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class BurpExtender implements IBurpExtender, ITab {
private JPanel jPanel1;
@Override
public void registerExtenderCallbacks(final IBurpExtenderCallbacks callbacks) {
//設定副檔名
callbacks.setExtensionName("應用中心");
//建立我們的窗體
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//我們的主窗體
jPanel1 = new AppPanel();
//自定義我們的元件
callbacks.customizeUiComponent(jPanel1);
//新增標籤到Burp主窗體
callbacks.addSuiteTab(BurpExtender.this);
}
});
}
@Override
public String getTabCaption() {
return "應用中心";
}
@Override
public Component getUiComponent() {
return jPanel1;
}
}
效果圖:
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!