BurpSuite新插件Api-Montoya
ccc 发表于 浙江 安全工具 2543浏览 · 2024-07-10 10:39

前言

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里面看对应介绍

或者直接把对用类代码塞给通义灵码让他教你写

0 条评论
某人
表情
可输入 255