日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

BurpSuite插件开发指南之 Java 篇

發(fā)布時(shí)間:2025/4/16 java 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BurpSuite插件开发指南之 Java 篇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Her0in · 2016/05/27 16:53

此文接著 《BurpSuite插件開(kāi)發(fā)指南之 API 下篇》 。在此篇中將會(huì)介紹如何使用Java 開(kāi)發(fā) BurpSuite 的插件,重點(diǎn)會(huì)介紹利用 Java 的 Swing 包開(kāi)發(fā)帶有 GUI 的 Burp 插件。

《BurpSuite 插件開(kāi)發(fā)指南》系列文章如下:

  • 《BurpSuite插件開(kāi)發(fā)指南之 API 篇》
  • 《BurpSuite插件開(kāi)發(fā)指南之 Java 篇》
  • 《BurpSuite插件開(kāi)發(fā)指南之 Python 篇》

注:此系列文章是筆者利用業(yè)余時(shí)間所寫,如有錯(cuò)誤,望讀者們及時(shí)指正,另外此系列文章屬于入門級(jí)別的科普文,目的是普及Burp插件的編寫技術(shù)。

0x00 Java 接口簡(jiǎn)介


知其然更要知其所以然。在真正動(dòng)手編寫 Burp 插件之前,有必要對(duì)Burp提供的各個(gè)接口有一定的了解,同時(shí)要有一定的編程經(jīng)驗(yàn)和能力。那么,在此篇中讀者則有必要了解 Java 的接口技術(shù)。

接口(英文:Interface)在 Java 編程語(yǔ)言中是一個(gè)比較抽象的東西。熟悉 OOP 的同學(xué)可以用“類”的思想來(lái)理解接口。但是,要明白的是,類與接口有相似的地方同時(shí)也有很多不同的地方。

接口的聲明

接口的聲明語(yǔ)法格式如下:

#!java [可見(jiàn)度] interface 接口名稱 [extends 其他的類名] {// 聲明變量// 抽象方法 } 復(fù)制代碼

例如,Burp 的 接口聲明原型如下:

#!java package burp;public interface IBurpExtender {void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks); } 復(fù)制代碼

接口的實(shí)現(xiàn)

一個(gè)接口可以被另外一個(gè)接口繼承,也可以被一個(gè)類實(shí)現(xiàn)。當(dāng)類實(shí)現(xiàn)接口的時(shí)候,類要實(shí)現(xiàn)接口中所有的方法。否則,類必須聲明為抽象的類。類使用implements關(guān)鍵字實(shí)現(xiàn)接口。在類聲明中,Implements關(guān)鍵字放在class聲明后面。不熟悉Java編程的讀者要牢記這幾點(diǎn)。

實(shí)現(xiàn)一個(gè)接口的語(yǔ)法如下:

#!java ... implements 接口名稱[, 其他接口1, 其他接口2..., ...] ... 復(fù)制代碼

例如,編寫 Burp 插件必須編寫的 BurpExtender 類實(shí)現(xiàn) IBurpExtender 和 IProxyListener 接口代碼如下:

#!java package burp;public class BurpExtender implements IBurpExtender, IProxyListener{// 實(shí)現(xiàn) IBurpExtender 接口的 registerExtenderCallbacks 方法@Overridepublic void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {// TODO here}// 實(shí)現(xiàn) IProxyListener 接口的 processProxyMessage 方法@Overridepublic void processProxyMessage(boolean messageIsRequest,IInterceptedProxyMessage message) {// TODO here} } 復(fù)制代碼

需要注意的是,在Burp提供的接口文檔中,并不是所有的接口都可以用類實(shí)現(xiàn),只有在接口的描述中說(shuō)明了“該接口可以被實(shí)現(xiàn)”時(shí),所對(duì)應(yīng)的接口才可以被你所編寫的類實(shí)現(xiàn)其方法。

0x01 Java Swing 和 AWT 包簡(jiǎn)介


Java Swing 是 Java Foundation Classes(JFC)的一部分。在 Swing 中,包含了很多強(qiáng)大靈活的,跨平臺(tái)的 GUI 控件。Swing 組件遵循(MVC)模型 - 視圖 - 控制器架構(gòu),并提供了三個(gè)通用的頂層容器類 JFrame,JDialog 和 JApplet。在開(kāi)發(fā)帶有 GUI 的 BurpSuite 插件時(shí),一般不會(huì)直接用到這三個(gè)頂層容器類,具體要看個(gè)人的設(shè)計(jì)和需求。

下面是一些最常用的控件:

  • JLabel 標(biāo)簽控件,JLabel 的對(duì)象是在容器中放置一個(gè)文本標(biāo)簽。
  • JButton 按鈕控件。
  • JColorChooser 顏色選擇控件,用于讓用戶操作和選擇顏色。
  • JCheckBox 選擇框控件,支持分組。
  • JRadioButton 單選框控件,支持分組。
  • JList 列表控件。
  • JComboBox 組合框控件。
  • JTextField 文本框控件。
  • JPasswordField 密碼輸入框控件。
  • JTextArea 多行文本控件。
  • ImageIcon 繪制圖標(biāo)的控件。
  • JScrollbar 滾動(dòng)條控件,支持水平和垂直滾動(dòng)。
  • JFileChooser 選擇文件對(duì)話框。
  • JProgressBar 進(jìn)度條控件。
  • JPanel 面板控件,此控件在開(kāi)發(fā)插件時(shí)會(huì)經(jīng)常用到。

Swing 是在 AWT 的基礎(chǔ)上構(gòu)建的一套新的圖形界面系統(tǒng),所以 AWT 是 Java 實(shí)現(xiàn)圖形界面的基礎(chǔ),圖形控件的事件監(jiān)聽(tīng)和響應(yīng)也是由 AWT 完成的。不過(guò),編寫 Burp 插件所用到的圖形組件和事件并不多,很容易上手。

有關(guān)更多 GUI 組件的知識(shí),請(qǐng)讀者自行百度了解。在此不做過(guò)多闡述。

0x02 自定義 Burp UI 標(biāo)簽


編寫 GUI 的 Burp 插件在實(shí)際使用時(shí)更加易于操作和表達(dá)信息。當(dāng)然,編寫起來(lái)也十分簡(jiǎn)單,只需遵循一定的“套路”,就可以了。

最終編寫好的基本的樣式如下圖所示:

代碼如下:

#!java /** BurpSuite 插件開(kāi)發(fā)指南之 Java 篇* writend by Her0in */ package burp;import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.PrintWriter; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.SwingUtilities;public class BurpExtender implements IBurpExtender, ITab{public PrintWriter stdout;public IExtensionHelpers hps;public IBurpExtenderCallbacks cbs;public JPanel jPanelMain;@Overridepublic void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {callbacks.setExtensionName("BurpExtender");this.hps = callbacks.getHelpers();this.cbs = callbacks;this.stdout = new PrintWriter(callbacks.getStdout(), true);this.stdout.println("hello burp!");SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {jPanelMain = new JPanel();JButton jButton = new JButton("老司機(jī),快點(diǎn)我!");jButton.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e){stdout.println("嗶...");}});// 將按鈕添加到 主面板 jPanelMain 中. jPanelMain.add(jButton);// 設(shè)置自定義組件并添加標(biāo)簽cbs.customizeUiComponent(jPanelMain);cbs.addSuiteTab(BurpExtender.this);}});}// 實(shí)現(xiàn) ITab 接口的 getTabCaption 方法@Overridepublic String getTabCaption() {return "Burp 標(biāo)簽測(cè)試";}// 實(shí)現(xiàn) ITab 接口的 getUiComponent 方法@Overridepublic Component getUiComponent() {return jPanelMain;} } 復(fù)制代碼

從上述代碼中,讀者也能夠看到,Java 的 Swing 圖形編程有點(diǎn)蛋疼,需要一層層的編寫。首先需要添加一個(gè) JPanel 上去,然后在這個(gè) JPanel 中再添加圖形組件,如果還有上層的圖形組件,則需要再添加一個(gè) Panel 類型的控件。

在這里有一個(gè)比較快速編寫 Burp GUI插件的方法,先利用 NetBeans IDE 將圖形界面拖拽式的寫好,然后將上述顯示控件的代碼替換為顯示這個(gè) JFrame 的代碼。之后編寫相關(guān)的事件響應(yīng)代碼。

0x03 BurpSuite插件開(kāi)發(fā)實(shí)例之 JSON 水坑 檢測(cè)插件


本小節(jié),筆者將會(huì)使用一個(gè)實(shí)例來(lái)“拋磚引玉”式的描述編寫帶有 GUI 的 Burp 插件。讀者可以把關(guān)注點(diǎn)放在圖形控件的放置順序和事件處理上,可以無(wú)視 JSON 水坑檢測(cè)的邏輯是否嚴(yán)謹(jǐn)以及誤報(bào)率,準(zhǔn)確率是否科學(xué)等問(wèn)題。

最終編寫好的插件如下圖:

頂部的控件是一個(gè)表格列表控件,會(huì)放置檢測(cè)到的結(jié)果。下面兩個(gè) ITextEditor 分別顯示當(dāng)前 HTTP 數(shù)據(jù)包的請(qǐng)求信息和響應(yīng)信息。

代碼就直接貼出來(lái)吧,如下:

#!java /** BurpSuite 插件開(kāi)發(fā)指南之 Java 篇* writend by Her0in */ package burp;import java.awt.BorderLayout; import java.awt.Component; import java.awt.Rectangle; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.io.PrintWriter; import java.util.Vector; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.ScrollPaneConstants; import javax.swing.SwingUtilities;public class BurpExtender implements IBurpExtender, ITab, IHttpListener{public PrintWriter stdout;public IExtensionHelpers hps;public IBurpExtenderCallbacks cbs;public IRequestInfo iRequestInfo;public IResponseInfo iResponseInfo;public JPanel jPanel_top;public JTabbedPane jTabbedPane; public JScrollPane jScrollPane;public JSplitPane jSplitPaneV;// 自己封裝一個(gè) Table 控件private Her0inTable jsonTable;//請(qǐng)求,響應(yīng)信息顯示public JPanel jPanel_reqInfo_left;public JPanel jPanel_respInfo_right;public JSplitPane jSplitPaneInfo;public ITextEditor iRequestTextEditor;public ITextEditor iResponseTextEditor;Boolean bFind = false;String strTags = "";@Overridepublic void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {callbacks.setExtensionName("JSON 水坑檢測(cè)");this.hps = callbacks.getHelpers();this.cbs = callbacks;this.stdout = new PrintWriter(callbacks.getStdout(), true);this.stdout.println("hello burp!");SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {// 初始化垂直分隔面板jSplitPaneV = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true);jSplitPaneV.setDividerLocation(0.5);jSplitPaneV.setOneTouchExpandable(true);// 垂直分隔面板的頂部jPanel_top = new JPanel();// 設(shè)置垂直分隔面板頂部的子控件// 放置表格控件jTabbedPane = new JTabbedPane();// 初始化 Burp 提供的 ITextEditor 編輯器接口iRequestTextEditor = cbs.createTextEditor();iRequestTextEditor.setEditable(false);iResponseTextEditor = cbs.createTextEditor();iResponseTextEditor.setEditable(false);// 初始化 jsonTablejsonTable = new Her0inTable(iRequestTextEditor, iResponseTextEditor, stdout);// 最好放置一個(gè) JScrollPaneJScrollPane jScrollPane1 = new JScrollPane(jsonTable.getTab());jScrollPane1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);jScrollPane1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);jTabbedPane.scrollRectToVisible(new Rectangle(500, 70));jTabbedPane.addTab("JSON 水坑檢測(cè)", jScrollPane1);jScrollPane = new JScrollPane(jTabbedPane);jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);jPanel_top.add(jScrollPane, BorderLayout.CENTER);jPanel_top.setLayout(null);// 添加componentResized事件 否則在改變Burp 主窗口大小時(shí)會(huì)錯(cuò)位jPanel_top.addComponentListener(new ComponentListener() {@Overridepublic void componentShown(ComponentEvent e) {}@Overridepublic void componentResized(ComponentEvent e) {if(e.getSource() == jPanel_top){jScrollPane.setSize(jPanel_top.getSize().width - 5,jPanel_top.getSize().height - 5); jScrollPane.setSize(jPanel_top.getSize().width - 10,jPanel_top.getSize().height - 10);}}@Overridepublic void componentMoved(ComponentEvent e) {// TODO Auto-generated method stub}@Overridepublic void componentHidden(ComponentEvent e) {// TODO Auto-generated method stub }});// 設(shè)置垂直分隔面板底部的子控件// 顯示請(qǐng)求/響應(yīng) 信息的水平分隔面板初始化jSplitPaneInfo = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);jSplitPaneInfo.setDividerLocation(0.5);jSplitPaneInfo.setOneTouchExpandable(true); // 初始化 請(qǐng)求,響應(yīng)信息顯示 面板 jPanel_reqInfo_left = new JPanel();jPanel_respInfo_right = new JPanel();jPanel_reqInfo_left.setLayout(new BorderLayout());jPanel_respInfo_right.setLayout(new BorderLayout());// 將 Burp 提供的 ITextEditor 編輯器 添加到請(qǐng)求,響應(yīng)信息顯示 面板中jPanel_reqInfo_left.add(iRequestTextEditor.getComponent(),BorderLayout.CENTER);jPanel_respInfo_right.add(iResponseTextEditor.getComponent(),BorderLayout.CENTER);// 分別添加 請(qǐng)求,響應(yīng)信息顯示 面板 到 垂直分隔面板底部jSplitPaneInfo.add(jPanel_reqInfo_left, JSplitPane.LEFT);jSplitPaneInfo.add(jPanel_respInfo_right, JSplitPane.RIGHT);// 最后,為垂直分隔面板添加頂部面板和水平分隔面板jSplitPaneV.add(jPanel_top, JSplitPane.TOP);jSplitPaneV.add(jSplitPaneInfo, JSplitPane.BOTTOM);// 設(shè)置自定義組件并添加標(biāo)簽cbs.customizeUiComponent(jSplitPaneV);cbs.addSuiteTab(BurpExtender.this);}});callbacks.registerHttpListener(this);}// 實(shí)現(xiàn) ITab 接口的 getTabCaption 方法@Overridepublic String getTabCaption() {return "JSON 水坑檢測(cè)";}// 實(shí)現(xiàn) ITab 接口的 getUiComponent 方法@Overridepublic Component getUiComponent() {return jSplitPaneV;}public void CheckJson(IHttpRequestResponse messageInfo) {try {this.iRequestInfo = this.hps.analyzeRequest(messageInfo);this.iResponseInfo = this.hps.analyzeResponse(messageInfo.getResponse()); } catch (Exception e) {return ;}// stdout.println(messageInfo.getHttpService().getHost());this.bFind = false;java.util.List<IParameter> listIParameters = iRequestInfo.getParameters(); strTags = "";for (IParameter param : listIParameters) {String strName = param.getName().toLowerCase();if(strName.indexOf("callback") != -1 || strName.indexOf("_callback") !=-1 ||strName.indexOf("cb") !=-1 || strName.indexOf("_cb") != -1 ||strName.indexOf("huidiao") !=-1 ){strTags += "# find => " + strName;this.bFind = true;}}if(this.bFind){Vector<String> vectorRow = new Vector<String>();vectorRow.addElement(new String(Integer.toString(jsonTable.defaultTableModel.getRowCount())));vectorRow.addElement(new String(this.iRequestInfo.getUrl().getHost()));vectorRow.addElement(new String(this.iRequestInfo.getMethod()));if(this.iRequestInfo.getUrl().getQuery() != null){vectorRow.addElement(new String(this.iRequestInfo.getUrl().getPath() + "?" + this.iRequestInfo.getUrl().getQuery()));}else{vectorRow.addElement(new String(this.iRequestInfo.getUrl().getPath()));}vectorRow.addElement(new String(strTags));jsonTable.defaultTableModel.addRow(vectorRow);jsonTable.iHttpList.add(messageInfo);}}@Overridepublic void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo) {if (!messageIsRequest) {//JSON 檢測(cè)this.CheckJson(messageInfo);}} } 復(fù)制代碼

總結(jié)

以上是生活随笔為你收集整理的BurpSuite插件开发指南之 Java 篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色播av | 美女福利片 | 性欧美成人播放77777 | 一级成人毛片 | 欧美三级在线播放 | 欧美国产日韩一区二区三区 | 性生活视屏 | 黄色在线免费观看视频 | 可以免费看av | 中文国产视频 | 艹男人的日日夜夜 | 国产精选91 | 日韩污视频 | 少妇在线| 琪琪色18 | 欧美两根一起进3p做受视频 | 免费看黄色a级片 | 色羞羞 | 色先锋影院 | 麻豆传媒视频入口 | 日本在线视频中文字幕 | 亚洲人成高清 | 女优在线观看 | 中文精品在线 | 日韩无套无码精品 | 国产无遮挡又黄又爽又色视频 | 成年人看的视频网站 | 亚洲精品鲁一鲁一区二区三区 | 欧美老熟妇又粗又大 | 性色av一区二区三区在线观看 | 欧美日韩黄色网 | 色五婷婷| 99色综合网 | 麻豆一区在线 | 美女国产免费 | 国产九色91回来了 | 久久精品亚洲精品 | 波多野结衣av在线观看 | 成人午夜视频在线播放 | www.haoav| 小萝莉末成年一区二区 | 天天艹夜夜艹 | 亚洲国产高清在线 | 久久99精品国产.久久久久 | av夜色| 亚洲欧美自拍另类 | 各处沟厕大尺度偷拍女厕嘘嘘 | 国产调教 | 成人自拍网站 | 国产精品美女久久久久av超清 | 97超碰网| 国内自拍2020| jizz日本少妇 | 啪视频免费 | 成人做爰69片免费观看 | 女人十八岁毛片 | 女人叫床高潮娇喘声录音mp3 | 2019av视频| 天天躁日日躁狠狠躁av | 简单av在线 | 原创真实夫妻啪啪av | 中文字幕第12页 | 91成人网页| 久久97精品 | www久久久com| 国产一级爱c视频 | 日本www色 | 无套暴操 | 国产精品无码内射 | 亚洲免费视频一区二区三区 | 欧美性生活一级 | 韩国中文字幕hd久久精品 | 国产精品国产馆在线真实露脸 | 国产嫩bbwbbw高潮 | 激情综合站| 无限资源日本好片 | 91丨九色丨黑人外教 | 中文字幕在线2019 | 欧洲亚洲另类 | 无码人妻丰满熟妇区毛片18 | 日本理论片午伦夜理片在线观看 | 中文天堂在线视频 | 香蕉传媒 | 无码无遮挡又大又爽又黄的视频 | 天天干妹子 | 午夜日韩电影 | 神秘电影永久入口 | 亚洲精品综合精品自拍 | 日本在线一级片 | 久久久亚洲国产精品 | 久久天堂av| 99爱视频在线 | 中文字幕精品一区二 | 亚洲一本在线 | 操屁股视频 | 美国特色黄a大片 | 亚洲欧美日韩一区二区三区在线观看 | 日韩av在线播放一区 | 91国内精品久久久久 |