BurpSuite武器库打造之环境搭建和API介绍(下)

本文详细介绍了BurpSuite的多种接口,包括IHttpRequestResponseWithMarkers、IHttpService、IProxyListener等,通过示例展示了如何使用这些接口进行HTTP服务操作、代理监听、自定义IntruderPayload生成器和Scanner监听器等,旨在帮助开发者深入理解BurpSuite的扩展开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

                                

0x00 前言

 

接上篇丹丹妹,我又给大家带来了下篇,还是以python为开发语言,如有错误的地方还望大家多指正,轻喷。然后呢这边亲亲建议大家代码这种东西还是要多敲,多踩坑。毕竟伟大的爱情家周树人老先生说过只有痛过才能在心底留下不可磨灭的记号。

(多图警告!!!)

 

0x01 正文接口介绍

 

● IHttpRequestResponseWithMarkers

 

此接口是IHttpRequestResponse接口的一个子接口,用于那些被标记的 IHttpRequestResponse 对象,插件可以使用 IBurpExtenderCallbacks.applyMarkers() 创建一个IHttpRequestResponseWithMarkers实例。标记可用于各种情况,如指定Intruder 工具的 payload 位置,Scanner 工具的插入点或将 Scanner 工具的Issue设置高亮。

/*
* 以下两个方法均返回一个整型数组,这个数组包含了已定义标识的起始和结束的偏移量。
* 如果未定义标志将返回null
*/
//获取带有标记的请求的详细信息
java.util.List<int[]> getRequestMarkers()

 

//获取带有标记的响应的详细信息
java.util.List<int[]> getResponseMarkers()

Demo:

from burp import *
from array import array

class BurpExtender(IBurpExtender, IHttpListener):

    def registerExtenderCallbacks(self, callbacks):
        self._callbacks = callbacks
        callbacks.registerHttpListener(self)

    def processHttpMessage(self, toolFlag, messageIsRequest, IHttpRequestResponse):
        #通过IBurpExtenderCallbacks.applyMarkers()创建一个IHttpRequestResponseWithMarkers实例
        #并设置requestMarkers [5,9] responseMarkers [0,3]
        markers = self._callbacks.applyMarkers(IHttpRequestResponse, [array('i', [5,9])], [array('i', [0,3])])
        print('RequestMarkers--->',markers.getRequestMarkers()[0])
        print('ResponseMarkers--->',markers.getResponseMarkers()[0])

 

 

以下Demo配合IScanner设置关键字高亮。

from burp import *
from array import array

class BurpExtender(IBurpExtender, IScannerCheck, IScannerInsertionPoint):
   
    def registerExtenderCallbacks(self, callbacks):
        self._helpers = callbacks.getHelpers()
        self._callbacks = callbacks
        callbacks.registerScannerCheck(self)

    def doPassiveScan(self, baseRequestResponse):
        array = list()
        match = self.getMatche(baseRequestResponse.getResponse(), 'Flag')
        
        array.append(ScanIssue(
                                [self._callbacks.applyMarkers(baseRequestResponse, None, match)],
                                baseRequestResponse.getHttpService(),
                                self._helpers.analyzeRequest(baseRequestResponse).getUrl()
                                )
                    )
        return array

    def doActiveScan(self, baseRequestResponse, insertionPoint):
        pass
   
    def getMatche(self, baseReqRes, rule):
        length = len(baseReqRes)
        matche = [array('i')]

        start = self._helpers.indexOf(baseReqRes, rule, True, 0, length)
        if (start > 0):
            matche[0].append(start)
            matche[0].append(start+len(rule))
            return matche

class ScanIssue(IScanIssue):
   
    def __init__(self, httpMessages, httpService, url):
        self._httpMessages = httpMessages
        self._httpService = httpService
        self._url = url

    def getConfidence(self):
        return 'Certain'

    def getHttpMessages(self):
        return self._httpMessages

    def getHttpService(self):
        return self._httpService

    def getIssueBackground(self):
        return None

    def getIssueDetail(self):
        return None

    def getIssueName(self):
        return 'test'

    def getIssueType(self):
        return 0

    def getRemediationBackground(self):
        return None

    def getRemediationDetail(self):
        return None

    def getSeverity(self):
        return 'Information'

    def getUrl(self):
        return self._url

    def getHost(self):
        return 'localhost'

    def getPort(self):
        return int(80)

 

Run Screenshot :添加了一个Issues并将Response中关键词设为高亮。

 

● IHttpService

此接口用于提供关于HTTP服务的详细信息,可以将HTTP请求发送到该服务。此接口提供了以下方法。

//返回HTTP服务信息的主机名或IP地址
java.lang.String getHost()

//返回HTTP服务器信息的端口
int getPort()

//返回HTTP服务信息的协议
java.lang.String getProtocol()

 

● Demo:

from burp import *

class BurpExtender(IBurpExtender, IHttpListener):

    def registerExtenderCallbacks(self, callbacks):
        callbacks.registerHttpListener(self)

    def processHttpMessage(self, toolFlage, messageIsResponse, messageInfo):
        #通过HttpService方法获取Http服务详细信息
        IHttpService = messageInfo.getHttpService()
        print("Host------>", IHttpService.getHost())
        print("Port------>", IHttpService.getPort())
        print("Protocol-->", IHttpService.getProtocol())

 

Run Output:

●IProxyListener

 

插件通过注册一个ProxyListener() 监听器,Proxy将在处理请求或者响应时通知该监听器,插件可以对这些信息执行自定义分析或修改。此接口提供了以下方法。

// Proxy模块处理HTTP消息时调用
void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message)

 

● IInterceptedProxyMessage

 

通过此接口,插件可以注册一个IProxyListenner来接收Proxy的详细信息 此接口包括以下方法。

//返回被截获的http消息所请求的客户端IP地址
java.net.InetAddress getClientIpAddress()

//返回拦截操作的类型,具体类型可在官方文档关于此接口的属性描述中查看
int getInterceptAction()

//返回当前截获该HTTP消息监听器的名称
java.lang.String getListenerInterface()

//返回被截获消息的详细信息
IHttpRequestResponse getMessageInfo()

//返回请求/响应消息的唯一引用号
int getMessageReference()

// 设置更新拦截操作
void setInterceptAction(int interceptAction)

 

Demo:

from burp import *

class BurpExtender(IBurpExtender, IProxyListener):

    def registerExtenderCallbacks(self, callbacks):
        callbacks.registerProxyListener(self)

    def processProxyMessage(self, messageIsRequest, message):
        #只对request操作
        if(messageIsRequest):
            print("IP ---> ", message.getClientIpAddress())
            print("Type ---> ", message.getInterceptAction())
            print("Listener ---> ", message.getListenerInterface())
            #将所有的http信息都做drop操作
            message.setInterceptAction(IInterceptedProxyMessage.ACTION_DROP)

 

Run Output:

● IIntruderPayloadGeneratorFactory

 

插件可以实现此接口,并且调用IBurpExtenderCallbacks.registerIntruderPayloadGeneratorFactory() 注册。IntruderPayloadGenerator工厂,然后通过重写该接口的createNewInstance方法来实现自定义Payload生成器, 该接口提供一下方法。

//返回一个IintruderPayloadGenerator Payload生成器对象
IIntruderPayloadGenerator createNewInstance(IIntruderAttack attack)

 

// 设置PayloadGenerator 名称
java.lang.String getGeneratorName()

IIntruderAttack
此接口用于操作Intruder Attack 模块, 并提供以下方法

//获取HTTP服务器信息
IHttpService getHttpService()

//获取
byte[] getRequestTemplate()

 

Run Output:

● IIntruderPayloadGenerator

此接口用于自定义Intruder 的Payload生成器,当发起一个Intruder工具时,插件通过注IIntruderPayloadGeneratorFactory 返回次接口实例。次接口提供入下方法。

//该方法用于获取下一个Payload的值
byte[] getNextPayload(byte[] baseValue)

 

// 此方法由Burp调用,由Paylaod生成器告知Burp是否继续提供Payload 继续为True,停止为False
boolean hasMorePayloads()

// 重置Payload 生成器的状态,这将导致下一次调用getNextPayload方法时会返回第一条payload
v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值