BurpSuite 擴充套件開發[1]-API與HelloWold

wyzsk發表於2020-08-19
作者: 園長 · 2014/11/20 15:08

0x00 簡介


BurpSuite神器這些年非常的受大家歡迎,在國慶期間解了下Burp相關開發並寫了這篇筆記。希望和大家分享一下JavaSwing和Burp外掛相關開發。第一節僅簡單的瞭解下API相關,後面會帶著大家利用Netbeans開發我們自己的擴充套件以及各種有趣的小工具。

0x01 怎麼學?


第一個問題是我們應該怎麼去寫自己的Burp擴充套件?我們可以找一些現有的擴充套件學習下,或者參閱官方文件或者手冊,其次才是google一下是否有相關的教程、文章進行學習。

google搜尋:burp suite api,找到官方的API相關說明。

  1. http://portswigger.net/burp/extender/

  2. http://blog.portswigger.net/2012/12/draft-new-extensibility-api.html

enter image description here

You can:

  1. 執行和修改 HTTP 請求和響應

  2. 訪問執行時的資料,比如:代理日誌、目標站map和掃描問題

  3. 啟動自己的action,如掃描和網站爬行

  4. 自定義掃描檢測和註冊掃描問題

  5. 提供自定義Intruder payloads和payload處理

  6. 查詢和更新Suite-wide的目標作用域

  7. 查詢和更新session處理cookie jar

  8. 實現自定義session處理action

  9. 新增自定義的標籤(tabs)和上下文選單項到Burp 使用者介面

  10. 可使用自己的介面新增Burp的HTTP訊息編輯器

  11. 自定義Burp的HTTP訊息編輯器處理Burp不支援的資料格式

  12. 獲取headers, parameters, cookies分析HTTP請求和響應

  13. 讀取或修改Burp配置設定

  14. 儲存或恢復Burp狀態

0x02 學習API


API下載地址:http://portswigger.net/burp/extender/api/burp_extender_api.zip

下載API後新建Eclipse專案匯入API檔案:

enter image description here

不急於動手寫程式碼,先看下官方的Demo:

enter image description here

下載第一個HelloWorld解壓它並複製BurpExtender.java到我們的專案當中:

enter image description here

BurpExtender.java:

enter image description here

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包了.

enter image description here

如果你和我一樣從來都沒有使用過BurpSuite,那麼不妨先開啟它把玩幾分鐘。在extender(擴充套件)標籤當中看到了Burp的外掛載入介面。

enter image description here

Add我們剛打好的jar包,載入到Burp擴充套件中去。

enter image description here

這個時候可以看到我們的外掛已經成功執行了,在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");)。

enter image description here

獲取到Burp混淆後的擴充套件載入類(自定義類載入器):

enter image description here

如你所想,java載入外部擴充套件利用了URLClassLoader load外部的jar(對這感興趣的朋友可以看下p2j上的相關文章:http://p2j.cn/?s=URLClassLoader&submit=Search)。

第一個HelloWorld很容易就搞定了,第二個Event listeners的Demo。所謂事件監聽即你可以透過Burp的IBurpExtenderCallbacks去註冊自己的監聽方法。Demo只提供了四種事件(包含HTTP監聽、代理、Scanner、狀態監聽),所有的未列舉的事件直接用Eclipse的快捷鍵提示就出來了:

z

比如想要新增一個IScopeChangeListener很簡單,讓當前類實現IScopeChangeListener介面,註冊ScopeChange事件(callbacks.registerScopeChangeListener(this);)重寫其scopeChanged方法即可。

enter image description here

設定本地瀏覽器代理後再次訪問任意網站後回到擴充套件標籤,選中我們的擴充套件程式可以看到監聽中的請求已輸出。

enter image description here

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;
     }

}

效果圖:

enter image description here

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章