Burp Extender Apis 插件开发 (一)

国际新闻 浏览(992)

原标题:Burp Extender Apis插件开发(1)

声明

因传播和使用本文提供的信息而导致的任何直接或间接后果和损失应由用户自己负责,雷神公司的公开测试和本文作者对此概不负责。

雷神众源有权修改和解释本文。如果你想转载或传播这篇文章,你必须确保这篇文章的完整性,包括所有内容,如版权声明。未经雷神公司许可,不得随意修改、增加或减少本条款的内容,也不得以任何方式用于商业目的。

Present

BurpsuIte允许用户编写自己的自定义插件,这些插件在Java、python和Ruby中都受支持。本系列主要分享Python写作。

安装环境

jython环境需要首先安装。下载jython后,下载地址

并开始配置burp usite,如下图

所示,此时已经配置了jython环境和burp usite的模块,只需加载py脚本即可。

4号Burp Extender Apis

介绍了burpsuite提供的各种接口。burpsuite软件本身也提供了api文档

您也可以查看官方api地址:

Interfaces可以大致分为四种类型

插件门户和帮助接口类:IBurpExtender、IBurpExtenderCallbacks、IExtensionHelpers、iExtensionStateListener

iBurpender接口类是Burp插件的入口,所有的BURP插件都需要实现这个接口,这个类叫做BurpExtender。

IBurpExtenderCallbacks接口类是IBurpExtender接口的实现类和其他Burp组件(扫描器、入侵者、蜘蛛,)和通信对象(HttpRequestResponse、HttpService、SessionHandlingAction)。两个接口类

IExtensionHelpers和IExtensionStateListener是插件帮助和管理操作的接口定义。

与用户界面相关的接口类:IContextMenuFactory、IContextMenuInvocation、ITab、ITextEditor、IMessageEditor、IMenuItemHandler

这些接口类主要用于软件交互中定义Burp插件的用户界面显示和动作处理事件。

Burp工具组件接口类:IInterceptedProxyMessage,IIntruderAttack,iIntertruderPayLoadGenerator,iIntertruderPayLoadGenerator,IIntruderPayloadProcessor,IProxyListener,IScannerCheck,IsCannerinerPertinPointProvider,IScannerListener,IScanQueueItem,IScopeChangeListener

这些接口类的功能都很好理解。在接口定义的命名中,Burp使用了一个众所周知的规范。看到接口类的名称后,人们基本上可以猜出这个接口适合哪个工具组件。

HTTP消息处理接口类:ICookie、IHttpListener、IHttpRequestResponse、IHttpRequestResponsePersisted、ihttprequestresponsewithtmarkers、IHttpService、IRequestInfo、IParameter和IResponseInfo

的定义主要围绕Cookie、Request、Response和Parameter,它们都涉及到HTTP消息通信的过程。通过对通信报文头和报文体的数据处理,达到控制HTTP报文传输的目的。

5号试图先编写一个最简单的演示

import ibupextender接口类的burp插件,因为所有后续的函数代码都是从这个类

fromBurpimport ibupextender

所有的Burp插件都需要实现这个接口,并且这个类被命名为Burpextender

class Burpextender(ibupextender):

以在加载扩展时调用这个方法。它注册了一个IBurpExtenderCallbacks接口的实例,并提供了扩展可以调用来执行各种操作的方法。

def RegisterExtenderCallbacks(self,Callbacks):

整体代码如下:

fromBurpimport ibupextender

class Burpextender(ibupextender):

def RegisterExtenderCallbacks(self,Callbacks):

您的扩展代码这里

Return

这个空扩展不执行任何操作,但它仍然可以加载到Burp

成功加载了我们自己的自定义py插件

中加载扩展后,Burp调用它的registerExtenderCallbacks()方法,并传递一个IBurpExtenderCallbacks接口的实例。然后,扩展可以根据需要调用该接口的方法来扩展Burp的功能。

让我们看看这个接口有哪些可用的方法

我们可以看到有很多方法,所以根据自己的需要选择相应的方法。

SetExtensionName(Java . lang . string name)

此方法用于设置当前扩展的显示名称,该名称将显示在扩展程序工具的用户界面中。

自我。回调(_ l)。SetExtensionName(‘SQL Inject’)

Registration Function

注册一个HTTP侦听器。然后是HTTP侦听器

callbacks . Register HTTP listener(self)

#注册菜单上下文

#注册消息编辑器选项卡工厂

callbacks . Register messageeditorTabfactory(self)

#注册菜单项工厂

callbacks . registersontextensnumfactory(self)

#注册扫描

callbacks . registerscancercheck(self)

get helpers()调用此方法返回对象IExtensionHelpers

此方法用于获取IExtensionHelpers对象,扩展可以使用该对象来构建和分析HTTP请求。

self。_ helpers=callback . gethelpers()

然后代码可以编写如下:

classburpextender(iburpxtender,ihttplistener):

defregisterxtenderlacks(Self,Callbacks) :

Self。_ Callbacks=Callbacks

#用于获取IExtensionHelpers对象,扩展可以使用该对象来执行许多有用的任务。返回:一个包含许多帮助器方法的对象,用于构建和分析HTTP请求等任务。

self。_ helpers=callback . gethelpers()

#用于设置当前扩展的显示名称,该名称将显示在扩展器工具的用户界面中。参数:名称扩展。

注册一个HTTP侦听器。然后是HTTP侦听器

callbacks . Register HTTP listener(self)

#注册菜单上下文

#注册消息编辑器选项卡工厂

callbacks . Register messageeditorTabfactory(self)

#注册菜单项工厂

callbacks . registersontextensnumfactory(self)

#注册扫描

callbacks . registerscancercheck(self)

回调。RegistersCannercheck (Self)

已经编写了最简单的基本配置,接下来将实现该功能。

No.7 processHttpMessage

刚刚介绍了registerHttpListener方法注册一个侦听器,然后每当Burp侦听数据包时,它将调用processHttpMessage方法。

processhttpemessage(int toolflag,boolean messagesrequest,ihttprequestresponsemessageinfo)

以下是代码和参数的介绍

defprocesshttpemessage(self,tool flag,Messageisrequest,message info):

: param tool flag :表示发出请求的Burp工具的标志。Burp工具标志在IBurpExtenderCallbacks接口中定义。例如,代理和中继器触发插件

3336 param messageisrequest :标记它们是请求数据包还是响应数据包

:param messageInfo:要处理的请求/响应的详细信息。扩展可以调用这个对象上的setter方法来更新当前消息,从而修改Burp的行为。

defprocesshttpemessage(self,tool flag,Messageisrequest,message info):

' ' '

此处的toolFlag数字代表模块。例如,哪个模块触发监听器,如代理或中继器

官方网站给出链接:

然后我只希望代理和中继器触发插件功能。代码如下:

# Proxy和Repeater触发插件

if toolflag==64或toolflag==4:

整体代码如下:

#-*-编码:utf-8 -*-

# Burp侦听数据包。processHttpMessage method

from burp port iburperextender,Ihttplistener

classburpextender(iburpxtender,ihttplistener):

defregisterxtenderlacks(Self,Callbacks) :

Self。_ Callbacks=Callbacks

#用于获取IExtensionHelpers对象,扩展可以使用该对象来执行许多有用的任务。返回:一个包含许多帮助器方法的对象,用于构建和分析HTTP请求等任务。

self。_ helpers=callback . gethelpers()

#用于设置当前扩展的显示名称,该名称将显示在扩展器工具的用户界面中。参数:名称扩展。

#用于设置当前扩展的显示名称,该名称将显示在扩展器工具的用户界面中。参数:名称扩展。

#用于注册将请求和响应通知任何Burp工具的侦听器。扩展可以通过注册HTTP侦听器来执行自定义分析或修改这些消息。参数:侦听器-通过实现IHttpListener接口的扩展创建的对象。

callbacks . RegisterHttpListener(self)

def processHttpMessage(self,toolFlag,messageIsRequest,Message Info):

: Param Tool Flag :一个指示发出请求的Burp工具的标志。Burp工具标志在IBurpExtenderCallbacks接口中定义。例如,代理和中继器触发插件

3336 param messageisrequest :标记它们是请求数据包还是响应数据包

:param messageInfo:要处理的请求/响应的详细信息。扩展可以调用这个对象上的setter方法来更新当前消息,从而修改Burp的行为。

: return :

#代理和中继器触发器插件

iftoolflag==64或tool flag==4:

# Handle response content

if not message is request :

print ' callprocesshttpemessage '

practice:

load py script

Repeater send packet

successful trigger method

no . 8 CreateMenultEms

create上下文菜单 需要icontextmenufactory

from javax . swing import jmen item

menu才能注册

# register消息编辑器选项卡工厂

callbacks . RegisterMessageEditorTabFactory(self )

# RegisterMenuitem工厂

Callbacks。 RegisterContextMenuFactory(Self)

创建一个上下文菜单,触发运行方法

# Create菜单右键单击

def createMenuItems(self,调用):

Self . invokation=invokation

menu _ list=[]

menu _ list . append(JMenuItem('发送到createMenuItems ',无,

action performed=Self . run))

return menu _ list

def运行方法

def运行(Self,事件)3360

print '调用创建菜单项'

总体代码如下

#--IconTextMenuFactory

from javax . swing import JMenuItem

class BurpeXtender(iBurpExtender,IMessageEditorTabFactory,IconTextMenuFactory):

defregisterxtenderfacolls(self,callbacks) :

self。_ callbacks=callbacks

#用于获取IExtensionHelpers对象,扩展可以使用该对象来执行许多有用的任务。返回:一个包含许多帮助器方法的对象,用于构建和分析HTTP请求等任务。

callbacks . RegisterMessageEditorTabFactory(self )

# RegisterMenuitem工厂

self。_ Callbacks . SetExtensionName(' CreateMenuItems ')

#注册消息编辑器选项卡工厂

callbacks . RegisterMessageEditorTabFactory(自身)

# RegisterMenuItem工厂

Callbacks。registercontextMenuFactory(Self)

#创建菜单右键单击

def createMenuItems(self,调用):

创建一个上下文菜单,触发运行方法

# Create菜单右键单击

def createMenuItems(self,调用):

Self . invokation=invokation

menu _ list . append(JMenuItem('发送到createMenuItems ',无,

action performed=Self . run))

return menu _ list

def运行方法

def运行(Self,事件)3360

print '调用创建菜单项'

总体代码如下

from javax . swing import JMenuItem

class BurpeXtender(iBurpExtender,IMessageEditorTabFactory,IconTextMenuFactory):

practice: