引言
经过了前面文章的学习,大家应该对Burpsuite插件的编写有了一个基本的认识了。
现在我们静下心,再来看看官网的例子,为后面的插件编写打一下夯实的基础。
学习官网的例子
官网的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");
// 输出流和错误流,在burp输出内容
PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
PrintWriter stderr = new PrintWriter(callbacks.getStderr(), true);
// 在Output中输出
stdout.println("Hello output");
// 在Errors中输出
stderr.println("Hello errors");
// 在Event log中插入消息
callbacks.issueAlert("Hello alerts");
// 抛出一个异常
throw new RuntimeException("Hello exceptions");
}
}
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) + "]");
}
//
// implement IProxyListener
// 实现接口IProxyListener
@Override
public void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message)
{ //同上
stdout.println(
(messageIsRequest ? "Proxy request to " : "Proxy response from ") +
message.getMessageInfo().getHttpService());
}
//
// implement IScannerListener
// 实现接口IScannerListener
@Override
public void newScanIssue(IScanIssue issue)
{
//这里是输出Burpsuite扫描到的问题
stdout.println("New scan issue: " + issue.getIssueName());
}
//
// implement IExtensionStateListener
// 实现接口IExtensionStateListener
@Override
public void extensionUnloaded()
{
//卸载插件的时候会输出的文字
stdout.println("Extension was unloaded");
}
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)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论