<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/3962

            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

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线