【Python+Java】Burpsuite插件开发

admin 2023年6月5日22:15:01评论25 views字数 7079阅读23分35秒阅读模式

burpsuite 最新版下载地址:

关注公众号回复burpsuite

0x1 前言

官方只支持三种语言:Java, Python & Ruby

因Burpsuite使用Java编写,推荐使用java语言编写插件。若想用Python或Ruby,需使用借助JPython或JRuby,以达到使用Java调用Python或Ruby库的目的。

可根据实际情况进行插件编写。



0x2 Burp Api接口

保存所有接口到本地

【Python+Java】Burpsuite插件开发

0x3 Java插件编写

java环境准备

安装jdk

安装idea

idea创建web项目,可做了解  https://blog.csdn.net/justdoit_potato/article/details/82994046

代码编写

创建项目时,File-New-Project-选择jdk版本,点击下一步.

【Python+Java】Burpsuite插件开发

如此,便成功创建项目
【Python+Java】Burpsuite插件开发
将burp导出的API文件Burp文件夹,复制至新建项目src目录,便于后续调用与编写。
新建BurpExtender.java文件,内容如下:
package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender
{
  public void registerExtenderCallbacks (IBurpExtenderCallbacks callbacks)
  {
      // set our extension name
      callbacks.setExtensionName("Hello world extension");

      // obtain our output and error streams
      PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
      PrintWriter stderr = new PrintWriter(callbacks.getStderr(), true);

      // write a message to our output stream
      stdout.println("Hello output");

      // write a message to our error stream
      stderr.println("Hello errors");

      // write a message to the Burp alerts tab
      callbacks.issueAlert("Hello alerts");

      // throw an exception that will appear in our error stream
      throw new RuntimeException("Hello exceptions");
  }
}
【Python+Java】Burpsuite插件开发

项目打包

File-Project Structure-Artifacts
【Python+Java】Burpsuite插件开发
【Python+Java】Burpsuite插件开发

plugin_jar为jar包目录

【Python+Java】Burpsuite插件开发
Build-Build Artifacts

【Python+Java】Burpsuite插件开发
成功打包为jar
【Python+Java】Burpsuite插件开发

Burp插件导入

【Python+Java】Burpsuite插件开发

插件编写信息,成功展示

【Python+Java】Burpsuite插件开发

【Python+Java】Burpsuite插件开发

【Python+Java】Burpsuite插件开发

Burp调试

以上为简单插件编写,仅为输出展示可不进行调试。若是进行复杂插件编写,必不可少,需idea调试burp插件。具体配置如下:
idea配置,监听8888端口

【Python+Java】Burpsuite插件开发

开启插件调试命令:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 --illegal-access=permit -Dfile.encoding=utf-8 -javaagent:BurpSuiteLoader_v2021.8.jar -noverify -jar burpsuite_pro_v2021.8.jar
【Python+Java】Burpsuite插件开发
进行部署
【Python+Java】Burpsuite插件开发
可见,运行时,jdk版本与burp运行时jdk版本不一致。需将idea中jdk修改
File->Project Settings
【Python+Java】Burpsuite插件开发
此处点击,设置断点
【Python+Java】Burpsuite插件开发
设置成功后点击进行debug模式
【Python+Java】Burpsuite插件开发
此时,将burp插件进行加载,可见调试输出信息
【Python+Java】Burpsuite插件开发

Tips

Burp sdk与Idea jdk版本需保持一致,否则Burp调试异常
Burp版本最好使用社区版本,否则Burp调试无法开启

文章中,原本使用的中文破解版Burp,jdk 1.8,因遇到以上2问题,更换Burp为burpsuite_pro_2021.8、jdk 11

0x4 Python插件编写

python环境准备

安装python2
设置jpython路径
【Python+Java】Burpsuite插件开发

代码编写

将burp导出的API文件Burp文件夹,复制至python脚本同级目录,便于后续调用与编写。
python脚本 hello.py
from burp import IBurpExtender
from java.io import PrintWriter
from java.lang import RuntimeException

class BurpExtender(IBurpExtender):  
  def registerExtenderCallbacks(self, callbacks):
      callbacks.setExtensionName("Hello world extension")
      stdout = PrintWriter(callbacks.getStdout(), True)
      stderr = PrintWriter(callbacks.getStderr(), True)
      stdout.println("Hello output")
      stderr.println("Hello errors")
      callbacks.issueAlert("Hello alerts")
      raise RuntimeException("Hello exception")

Burp插件导入

【Python+Java】Burpsuite插件开发
导入成功显示如下:
【Python+Java】Burpsuite插件开发

【Python+Java】Burpsuite插件开发

【Python+Java】Burpsuite插件开发


Burp调试

因Burp插件导入,只需写插件地址即可。若是地址py脚本内容变动,只需重新载入。正因为,

【Python+Java】Burpsuite插件开发
重新载入

【Python+Java】Burpsuite插件开发
点击反勾选按钮,再次点击进行勾选即可,可见更改已经生效。

【Python+Java】Burpsuite插件开发

其它样例

官方文档中提供了三种语言的插件简单样例,可根据自己需要选择。https://portswigger.net/burp/extender#SampleExtensions

【Python+Java】Burpsuite插件开发
下面简单描述下,样例的加载与代码分析

事件监听

下载Event listeners的python代码,可见registerExtenderCallbacks用于注册以下监听

【Python+Java】Burpsuite插件开发
监听到的内容该如何展示,又展示在哪块?
【Python+Java】Burpsuite插件开发
当扫描任务发现漏洞时,会展示在Output处
【Python+Java】Burpsuite插件开发
【Python+Java】Burpsuite插件开发
当插件进行反勾选时,Output输出扩展未加载
【Python+Java】Burpsuite插件开发

报文重定向

下载TrafficRedirector的python代码,可见registerExtenderCallbacks用于注册HTTP监听
进行代码分析
【Python+Java】Burpsuite插件开发
载入插件后,访问host为127.0.0.1的url,发现已重定向到host2.example.org
【Python+Java】Burpsuite插件开发

自动记录日志

Custom Logger用于添加新选项卡以记录所有请求和响应。
下载Custom Logger的python代码,可见registerExtenderCallbacks用于注册HTTP监听
from burp import IBurpExtender
from burp import ITab
from burp import IHttpListener
from burp import IMessageEditorController
from java.awt import Component;
from java.io import PrintWriter;
from java.util import ArrayList;
from java.util import List;
from javax.swing import JScrollPane;
from javax.swing import JSplitPane;
from javax.swing import JTabbedPane;
from javax.swing import JTable;
from javax.swing import SwingUtilities;
from javax.swing.table import AbstractTableModel;
from threading import Lock

class BurpExtender(IBurpExtender, ITab, IHttpListener, IMessageEditorController, AbstractTableModel):
   

  def registerExtenderCallbacks(self, callbacks):
      self._callbacks = callbacks
      self._helpers = callbacks.getHelpers()
      callbacks.setExtensionName("Custom logger")
      self._log = ArrayList()
      self._lock = Lock()
      self._splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT)
      logTable = Table(self)
      scrollPane = JScrollPane(logTable)
      self._splitpane.setLeftComponent(scrollPane)
      tabs = JTabbedPane()
      self._requestViewer = callbacks.createMessageEditor(self, False)
      self._responseViewer = callbacks.createMessageEditor(self, False)
      tabs.addTab("Request", self._requestViewer.getComponent())
      tabs.addTab("Response", self._responseViewer.getComponent())
      self._splitpane.setRightComponent(tabs)
      callbacks.customizeUiComponent(self._splitpane)
      callbacks.customizeUiComponent(logTable)
      callbacks.customizeUiComponent(scrollPane)
      callbacks.customizeUiComponent(tabs)
      callbacks.addSuiteTab(self)
      callbacks.registerHttpListener(self)
      return
   
  def getTabCaption(self):
      return "Logger"
   
  def getUiComponent(self):
      return self._splitpane
   
  def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
      if messageIsRequest:
          return
      self._lock.acquire()
      row = self._log.size()
      self._log.add(LogEntry(toolFlag, self._callbacks.saveBuffersToTempFiles(messageInfo), self._helpers.analyzeRequest(messageInfo).getUrl()))
      self.fireTableRowsInserted(row, row)
      self._lock.release()
  def getRowCount(self):
      try:
          return self._log.size()
      except:
          return 0
  def getColumnCount(self):
      return 2
  def getColumnName(self, columnIndex):
      if columnIndex == 0:
          return "Tool"
      if columnIndex == 1:
          return "URL"
      return ""
  def getValueAt(self, rowIndex, columnIndex):
      logEntry = self._log.get(rowIndex)
      if columnIndex == 0:
          return self._callbacks.getToolName(logEntry._tool)
      if columnIndex == 1:
          return logEntry._url.toString()
      return ""
  def getHttpService(self):
      return self._currentlyDisplayedItem.getHttpService()
  def getRequest(self):
      return self._currentlyDisplayedItem.getRequest()
  def getResponse(self):
      return self._currentlyDisplayedItem.getResponse()

class Table(JTable):
  def init(self, extender):
      self._extender = extender
      self.setModel(extender)
   

  def changeSelection(self, row, col, toggle, extend):
      logEntry = self._extender._log.get(row)
      self._extender._requestViewer.setMessage(logEntry._requestResponse.getRequest(), True)
      self._extender._responseViewer.setMessage(logEntry._requestResponse.getResponse(), False)
      self._extender._currentlyDisplayedItem = logEntry._requestResponse      
      JTable.changeSelection(self, row, col, toggle, extend)

class LogEntry:
  def init(self, tool, requestResponse, url):
      self.tool = tool
      self.requestResponse = requestResponse
      self._url = url
代码分析:
【Python+Java】Burpsuite插件开发
目前仅对实例中4个进行代码分析,若后续自己有兴趣可参照写法进行插件编写~


如果你喜欢巫巫的原创文章,推荐加入巫巫的社群(72小时内可申请退款)。

▎  我建立这个星球来沉淀有价值的内容,更好地帮助小伙伴提升自己。 

▎  很多小伙伴都添加我的微信,向我提问越来越多,随便回答不太好,如果不回答也不好,如果都仔细回答,是真的回答不过来!

   后来发现可以建立知识星球,我会花费时间在这个星球上用以解决这一问题。

  星球里将提供:

1.高纬度的网络安全思维模式

2.SRC漏洞挖掘、CTF靶机攻克、企业安全建设、网络边界安全、GAN网络、web3.0安全、企业安全运营、打击涉网犯罪等行业全知识面覆盖

3.高质量的问题交流、导师级顾问服务

【Python+Java】Burpsuite插件开发



合抱之木,生于毫末。

九层之台,起于累土。

每一次努力和积累,都是在为网络安全领域的发展贡献自己的一份力量。

感谢您一直以来的支持和关注!





【Python+Java】Burpsuite插件开发

如何打击互联网黑灰色产业链犯罪:我总结了6个关键点

隐藏的危险:Apache Superset三个RCE漏洞浅析

一篇完整的甲方内部防钓鱼演练方案【可直接抄作业】

阿里云WAF3.0命令执行Bypass,也是WAF的通病

漏洞治理难度大?建立完善的漏洞管理流程是关键!

从Prompt注入到命令执行:探究LLM大型语言模型中 OpenAI的风险点

如何在TG群中获取用户真实IP?这些手段教你轻松实现【附代码】

漏洞治理难度大?建立完善的漏洞管理流程是关键!

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

关于打击跨境网络赌博犯罪,我们如何侦查?我的建议和想法

【完结篇】微信泄露手机号事件的回顾与总结

批量截获机场节点:科学上网工具安全分析

防范虚拟货币钱包盗窃:揭秘非Approve的新型盗U诈骗手段(终极版)

【欺负老实人】在chatgpt Prompt中注入攻击代码,截取跟踪用户信息,钓鱼XSS。

一次完整的GPT-4代码审计,挖掘CMSeasy漏洞

我使用ChatGPT审计代码发现了200多个安全漏洞(GPT-4与GPT-3对比报告)

从零开始,手把手教您如何开通ChatGPT Plus开启GPT-4之旅(depay,nobepay,某宝)

Burpsuite最新版+四款Burpsuite插件,帮你扫描JS文件中的URL链接!



原文始发于微信公众号(安全女巫):【Python+Java】Burpsuite插件开发

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月5日22:15:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【Python+Java】Burpsuite插件开发https://cn-sec.com/archives/1708764.html

发表评论

匿名网友 填写信息