burp suite 插件编写-基础


前言

burp插件入门。入门,我们大概有一个框架,心里不再有怎么做,为什么可以这么做的疑问。现在就要更具体的来回答“怎么做”这个问题。我们通过官方的文档,一步一步实现一个可以处理HTTP数据包的小扩展。

一、插件的官方文档

从官方发的documentation跳转到Montoya API JavaDoc
在这里插入图片描述
跳转到MontoyaApi接口,看接口的描述::

Burp Suite 使用此接口将一组方法传递给extensions,这些extensions可在Burp中执行各种操作。当加载扩展时,Burp调用它的BurpExtension.initialize(MontoyaApi)方法并传递一个MontoyaApi接口的实例。然后,扩展可以根据需要调用该接口实例的方法,以扩展Burp的功能。

意思就是说,我们要写一个BurpExtension类,实现initialize(MontoyaApi)方法,在该方法里面可以写我们的插件代码了。这个MontoyaApi接口的实例对象是Burp Suite传递过来的,我们通过该对象(调用对象方法)就可以访问Burp的功能了。我们再点进BurpExtension类
在这里插入图片描述
看到,BurpExtension是一个接口,所以我们要编写一个类实现该接口,再通过上面MontoyaApi接口的一个实例对象,调用Burp的功能。
现在,就有了我们的基本代码框架了

  • 实现BurpExtension接口
  • 调用MontoyaApi实例的方法
// 导入两个最基本的接口
import burp.api.montoya.BurpExtension;
import burp.api.montoya.MontoyaApi;

import burp.api.montoya.logging.Logging;

//新建一个类,实现BurpExtension接口
public class HelloWorld implements BurpExtension {
//实现initialize(MontoyaApi api)方法,其中 api对象 是调用这个对象的对象(Burp主程序)传过来的
    @Override
    public void initialize(MontoyaApi api) {
// 利用api对象访问Burp提供的功能
        // set extension name  设置扩展的名称
        api.extension().setName("Hello montoya extension");

        Logging logging = api.logging();

        // write a message to our output stream  输出信息
        logging.logToOutput("Hello output.");

        // write a message to our error stream
        logging.logToError("Hello error.");
    }
}

那之后的事情就明确了:

  • 我们想要实现什么功能 ----> 编写我们的逻辑代码
  • 实现功能需要Burp的支撑 ----> MontoyaApi 接口中的方法

二、Montoya API jar包结构

解压Montoya API 的jar包,我们之前导入的BurpExtension接口,就是对应下图中BurpExtension.class,其目录就为burp > api > montoya。下面还有一个MontoyaApi接口,就是我们主要使用的方法集合。各个文件夹内也是各种类和接口的定义,每个文件夹对应burp里面的一个工具/模块接口。
在这里插入图片描述

三、HTTP 处理程序

    到目前为止,我们还是很难去写出一个有用的扩展,或者说,我们还是无从下手。我们不了解MontoyaApi对象,不了解其中的使用过程,所以总感觉摸不着头脑。所以多看例子、官方文档、多写一些小demo,熟悉其中的对象调用流程、方法,之后才会有“这就是Bp插件”的感觉,才能体会到面向对象、面向接口的编程思想。

    burp的核心是能够在 Burp 工具之间传递 HTTP 请求以执行特定任务的能力,现在我们要编写自己的工具,那么首先就需要获取到burp拦截或记录的HTTP请求。怎么获取?我们说过: 通过MontoyaApi的实例来访问Burp中的功能

通过下面的文档,我们知道需要通过MontoyaApi实例调用http()方法,通过返回的HTTP实例访问HTTP请求和响应。
在这里插入图片描述

调用该方法,返会一个Http接口的实现,也就是一个实现了Http接口的类的对象。点进Http接口
在这里插入图片描述

进去之后,发现要注册一个handler来处理http数据包,点进HTTPHandler
在这里插入图片描述
根据描述,我们还需要实现HttpHandler这个接口,并调用之前的http()方法注册这个handler,之后就可以通过handler来对数据包进行操作了。我们有发现,HttpHandler接口中只有两个方法,但是该方法中传入了HttpRequestToBeSentHttpResponseReceived的两个对象,那大概我们就可通过这两个对象操作HTTP数据包,点进去。
在这里插入图片描述

小结

在这里插入图片描述

  • 实现BurpExtension接口,调用http()创建HTTP实例
  • 实现HtpHandler接口,重写其中的方法,Burp主程序会分别传入HttpRequestToBeSentHttpRespnseReceived2个实例,利用这2个实例可以对流经Burp的数据表做一定的操作
  • 调用HTTP实例注册HttpHandler,注册过后的handler才会被调用

四、代码示例

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值