Burpsuite插件编写指南-Java篇(3)

admin 2024年12月17日13:48:23评论5 views字数 3707阅读12分21秒阅读模式

引言

经过了前面文章的学习,大家应该对Burpsuite插件的编写有了一个基本的认识了。

现在我们静下心,再来看看官网的例子,为后面的插件编写打一下夯实的基础。

Burpsuite插件编写指南-Java篇(3)

学习官网的例子

Burpsuite插件编写指南-Java篇(3)官网的example,带大家挨个学习下

0x1 Hello world

这是一个非常简单的扩展,打印一些输出到Burp内的不同位置。

package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender {

// implement IBurpExtender
// 实现接口IBurpExtender

@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
{
// 这里是设置插件名称
callbacks.setExtensionName("Hello world extension");
Burpsuite插件编写指南-Java篇(3)
    // 输出流和错误流,在burp输出内容
PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
PrintWriter stderr = new PrintWriter(callbacks.getStderr(), true);

// 在Output中输出
stdout.println("Hello output");
Burpsuite插件编写指南-Java篇(3)
    // 在Errors中输出
stderr.println("Hello errors");
Burpsuite插件编写指南-Java篇(3)
    // 在Event log中插入消息
callbacks.issueAlert("Hello alerts");
Burpsuite插件编写指南-Java篇(3)
    // 抛出一个异常
throw new RuntimeException("Hello exceptions");
Burpsuite插件编写指南-Java篇(3)
}

}

0x2 Event listeners

此扩展为各种运行时事件注册侦听器,并在每个事件发生时打印消息。

package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender, IHttpListener, IProxyListener, IScannerListener, IExtensionStateListener { private IBurpExtenderCallbacks callbacks; private PrintWriter stdout;

// implement IBurpExtender
// 实现接口IBurpExtender

@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
{
// 保持对回调对象的引用
this.callbacks = callbacks;

// 设置插件名称
callbacks.setExtensionName("Event listeners");

// 输出流,在burp输出内容
stdout = new PrintWriter(callbacks.getStdout(), true);

// 注册HTTP侦听器
callbacks.registerHttpListener(this);

// 注册为代理侦听器
callbacks.registerProxyListener(this);

// 注册为扫描侦听器
callbacks.registerScannerListener(this);

// r注册为扩展状态侦听器
callbacks.registerExtensionStateListener(this);
}

//
// implement IHttpListener
// 实现接口IHttpListener

@Override
public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo)
{
//这里是三元运算符,messageIsRequest是判断是否为true
//如果是request显示"HTTP request to "//否则就是"HTTP response from ",getToolName是获取侦听器的工具标签名
stdout.println(
(messageIsRequest ? "HTTP request to " : "HTTP response from ") +messageInfo.getHttpService() +
" [" + callbacks.getToolName(toolFlag) + "]");
Burpsuite插件编写指南-Java篇(3)
}

//
// implement IProxyListener
// 实现接口IProxyListener

@Override
public void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message)
{ //同上
stdout.println(
(messageIsRequest ? "Proxy request to " : "Proxy response from ") +
message.getMessageInfo().getHttpService());
Burpsuite插件编写指南-Java篇(3)
}

//
// implement IScannerListener
// 实现接口IScannerListener

@Override
public void newScanIssue(IScanIssue issue)
{
//这里是输出Burpsuite扫描到的问题
stdout.println("New scan issue: " + issue.getIssueName());
Burpsuite插件编写指南-Java篇(3)
}

//
// implement IExtensionStateListener
// 实现接口IExtensionStateListener

@Override
public void extensionUnloaded()
{
//卸载插件的时候会输出的文字
stdout.println("Extension was unloaded");
Burpsuite插件编写指南-Java篇(3)
}

0x3 Traffic redirector

此扩展将所有出站请求从一个主机重定向到另一个主机。

package burp;

public class BurpExtender implements IBurpExtender, IHttpListener

{
// 定义了一个主机 private static final String HOST_FROM = "host1.example.org";

// 定义了另一个主机
private static final String HOST_TO = "www.tuya.com";

private IExtensionHelpers helpers;

// implement IBurpExtender
// 实现接口IBurpExtender

@Override
public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
{
// 获取扩展助手对象
helpers = callbacks.getHelpers();

// 设置扩展名为 “流量重定向”
callbacks.setExtensionName("Traffic redirector");

// 注册HTTP侦听器
callbacks.registerHttpListener(this);
}

//
// implement IHttpListener
// 实现接口IHttpListener

@Override
public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo)
{
// 判断是request的时候再进行括号中的操作
if (messageIsRequest)
{
// 从request中获取http的相关信息,分别是getHost(主机地址)
       // getPort(端口)、getProtocol(协议)
IHttpService httpService = messageInfo.getHttpService();

// HOST_FROM在前面已经定义过了,如果主机头与HOST_FROM相等
        //就使用buildHttpService修改为HOST_TO发起请求。        //我手动导入了一下插件,下面对应的参数如下图所示。
if (HOST_FROM.equalsIgnoreCase(httpService.getHost()))
messageInfo.setHttpService(helpers.buildHttpService(
HOST_TO, httpService.getPort(), httpService.getProtocol()));
Burpsuite插件编写指南-Java篇(3)
    }
}
}

剩下的插件我们下篇文章见

Burpsuite插件编写指南-Java篇(3)

原文始发于微信公众号(白帽子飙车路):Burpsuite插件编写指南-Java篇(3)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月17日13:48:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Burpsuite插件编写指南-Java篇(3)https://cn-sec.com/archives/589876.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息