前言
PortSwigger去年推出了新的插件API-Montoya,并宣布会逐步放弃支持旧版插件。Montoya API不仅提供了更为丰富的接口和功能,还极大地简化了插件开发的过程。本文将简要介绍官网的接口文档中主要的类以及demo插件制作。
接口文档
官网接口文档如下,需要获取详情信息可点击https://portswigger.github.io/burp-extensions-montoya-api/javadoc/index.html
burp.api.montoya
包含两个类
BurpExtension:所有插件必须实现该接口,内置有Burp插件初始化方法。
Burp 会自动检测并加载所有继承了BurpExtension的类。
MontoyaApi:Burp通过该接口传给插件一些可以在Burp中执行的方法,内置有访问Burp各个模块的方法。
burp.api.montoya.burpsuite
BurpSuite:提供对Brup应用相关的功能访问。
commandLineArguments():在启动时传递给 Burp 的命令行参数
exportProjectOptionsAsJson(String... paths):以 JSON 格式导出当前项目级配置
exportUserOptionsAsJson(String... paths):以 JSON 格式导出当前用户级配置
shutdown(ShutdownOptions... options):以编程方式关闭Brup
taskExecutionEngine():访问任务执行引擎的功能
burp.api.montoya.collaborator
Burp suite的协作模块,可以大致看成Burp自带的反连平台的相关操作。
Collaborator:提供对Burp Collaborator模块设施的访问。
CollaboratorClient:用于生成Collaborator payload并获得Collaborator server中使用payload后的网络交互结果。
CollaboratorPayload:有关Collaborator payload设置操作。
CollaboratorPayloadGenerator:有关Collaborator payload生成操作。
burp.api.montoya.comparer
Comparer:提供了Burp Comparer的比较功能
burp.api.montoya.extension
Extension:提供对插件相关属性或操作的访问功能。
burp.api.montoya.http
Http:提供了对HTTP请求与响应的访问功能。
HttpMode:发送HTTP请求的模式
burp.api.montoya.http.handler
HttpHandler:插件可以实现此接口,然后调用 Http.registerHttpHandler来注册 HTTP 处理程序。
burp.api.montoya.http.message
HttpMessage:检索 HttpRequest 和 HttpResponse 共享的公共信息。
burp.api.montoya.http.message.params
HttpParameter:对于HTTP 参数能够检索以保存有关 HTTP 请求参数的详细信息。
burp.api.montoya.http.message.requests
HttpRequest:对于HTTP 请求能够检索和修改 HTTP 请求的详细信息。
burp.api.montoya.http.message.responses
HttpResponse:对于HTTP 响应能够检索和修改 HTTP 响应的详细信息。
burp.api.montoya.ui
有关插件的ui设置
Selection:提供与用户在用户界面中的选择相关的有用信息和功能。
Theme:包含Burp中可用的不同主题。
UserInterface:访问各种与用户界面相关的功能。
burp.api.montoya.logging
Logging:提供对日志和是事件的访问功能。
还会用到其他很多类,比如 javax.swing.*
、java.awt.*
和GUI界面有关。
此外有关Montoya API的详细内容可以在需要用到时去官网或Burp中检索,在此只做简要介绍。
demo实例
项目创建
首先用idea创建项目,可以用maven也可以用Gradle构建
然后添加依赖,用maven构建的话在pom.xml中添加对应依赖
<dependency>
<groupId>net.portswigger.burp.extensions</groupId>
<artifactId>montoya-api</artifactId>
<version>2023.12.1</version>
</dependency>
或者直接在Burp里面保存下来
基本信息
创建一个类实现BurpExtension
实现其initialize
方法,配置一些基本信息
package org.example;
import burp.api.montoya.BurpExtension;
import burp.api.montoya.MontoyaApi;
import burp.api.montoya.logging.Logging;
public class MyExtension implements BurpExtension {
public MontoyaApi api;
@Override
public void initialize(MontoyaApi api) {
this.api = api;
//设置插件名称
api.extension().setName("MyExtension1.0");
// 加载扩展后输出的项目状态信息
Logging log = api.logging();
log.logToOutput("this is a test");
log.logToOutput("by ccc");
}
}
设置tab页与显示相关的内容
//设置tab页面
JPanel Mytab = new JPanel(new BorderLayout());// 设置布局管理器为BorderLayout
HttpRequestEditor myRequestEditor = api.userInterface().createHttpRequestEditor(READ_ONLY); //创建一个request界面,READ_ONLY为只读,不传表示可读写
Mytab.add(myRequestEditor.uiComponent(), BorderLayout.CENTER); // 将HttpRequestEditor添加到中心 api.userInterface().registerSuiteTab("test",Mytab);
//tab显示
JTextArea resultArea = new JTextArea(10, 30);
JScrollPane scrollPane = new JScrollPane(resultArea);
Mytab.add(scrollPane, BorderLayout.NORTH);
设置右键菜单选项
要实现菜单功能必须继承ContextMenuItemsProvider
接口实现provideMenuItems
方法,addActionListener
方法监听触发状态,actionPerformed
执行对应方法。
public List<Component> provideMenuItems(ContextMenuEvent event) {
List<Component> listMenuItems = new ArrayList<>();
JMenuItem TestJmenu = new JMenuItem("Test");
TestJmenu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SwingUtilities.invokeLater(() -> {
resultArea.append("baidu test\n");
resultArea.setCaretPosition(resultArea.getDocument().getLength());
});
}
});
listMenuItems.add(TestJmenu);
return listMenuItems;
}
安装效果
最后构建工件之后build再安装到Burp上面
安装日志输出
对应tab界面
对应菜单选项
进阶
感觉看官网文档作用有限,只有对应类和对应方法的简要介绍,也没有对应使用示例。想要进一步了解可以直接去看对应项目源码https://github.com/PortSwigger/burp-extensions-montoya-api 或者直接在burp里面看对应介绍
或者直接把对用类代码塞给通义灵码让他教你写
-
-
接口文档
- burp.api.montoya
- burp.api.montoya.burpsuite
- burp.api.montoya.collaborator
- burp.api.montoya.comparer
- burp.api.montoya.extension
- burp.api.montoya.http
- burp.api.montoya.http.handler
- burp.api.montoya.http.message
- burp.api.montoya.http.message.params
- burp.api.montoya.http.message.requests
- burp.api.montoya.http.message.responses
- burp.api.montoya.ui
- burp.api.montoya.logging
-
-