编写Burpsuit扩展插件

学习编写一个BurpSuit的插件

一、扩展框架

from burp import IBurpExtender                                              (1)
from burp import IIntruderPayloadGeneratorFactory
from burp import IIntruderPayloadGenerator

from java.util import List, ArrayList

import random

class BurpExtender(IBurpExtender, IIntruderPayloadGeneratorFactory):       (2)
  def registerExtenderCallbacks(self, callbacks):
    self._callbacks = callbacks
    self._helpers = callbacks.getHelpers()

    callbacks.registerIntruderPayloadGeneratorFactory(self)                (3)             

    return

  def getGeneratorName(self):                                              (4)
    return "BHP Payload Generator"

  def createNewInstance(self, attack):                                     (5)
    return BHPFuzzer(self, attack)

class BHPFuzzer(IIntruderPayloadGenerator):                                 (6)
    ...
    return

二、框架详解

(1) 导入IBurpExtender类,这是编写Burp扩展的必须类,接着创建Intruder载荷生成器导入必要的类。

(2) 定义自己的BurpExtender类,他继承和扩展了IBurpExtender类和IIntruderPayloadGeneratorFactory类。

(3) 我们使用registerIntruderPayloadGeneratorFactory()函数注册BurpExtender类,这样Intruder工具才能生成攻击载荷。      

(4) getGeneratorName()函数返回载荷生成器的名称。

(5) createNewInstance()函数接收攻击相关的参数,返回IIntruderPayloadGenerator类型的实例,命名为BHPFuzzer。

(6) 具体的处理代码写在这里

三、模糊测试代码

class BHPFuzzer(IIntruderPayloadGenerator):                    (1)
  def __init__(self, extender, attack):
    self._extender = extender
    self._helpers  = extender._helpers
    self._attack   = attack
    self.max_payloads = 1000                                   (2)
    self.num_payloads = 0

    return

 def hasMorePayloads(self):                                    (3)
    if self.num_payloads == self.max_payloads:
      return False
    else:
      return True


  def getNextPayload(self,current_payload):                    (4)

    # 转换成字符串
    payload = "".join(chr(x) for x in current_payload)         (5)

    # 调用简单的变形器对POST请求进行模糊测试
    payload = self.mutate_payload(payload)                     (6)

    # 增加FUZZ的次数
    self.num_payloads += 1                                     (7)

    return payload

  def reset(self):

    self.num_payloads = 0

    return

  def mutate_payload(self,original_payload):                   (8)
    ...
    return

(1) 定义自己的BHPFuzzer类,它扩展了IIntruderPayloadGenerator类。

(2) 定义需要的类变量,添加max_payloads和num_payloads变量,他们用来对模糊测试的过程进行追踪,让Burp了解模糊测试完成的时间。

(3) 部署hasMorePayloads()函数,该函数检查模糊测试时迭代的数量是否达到上限。

(4)  getNextPayload()函数负责接收原始的HTTP载荷,这里是进行模糊测试的地方。

(5) current_payload变量是数组模式,我们要将它变成字符串。

(6) 将字符串传递给模糊测试的函数mutate_payload()

(7) 将num_payloads变量的值增加,然后修改之后的载荷

(8) 模糊测试函数

def mutate_payload(self,original_payload):

    # 仅生成一个随机数或者调用一个外部脚本
    picker = random.randint(1,3)

    # 在载荷中选取一个随机的偏移量去变形
    offset  = random.randint(0,len(original_payload)-1)
    payload = original_payload[:offset]

    # 在随机偏移位置插入SQL注入尝试
    if picker == 1:      
      payload += "'"      

    # 插入跨站尝试
    if picker == 2:
      payload += "<script>alert('BHP!');</script>"; 

    # 随机重复原始载荷
    if picker == 3:

      chunk_length = random.randint(len(payload[offset:]),len(payload)-1)
      repeater     = random.randint(1,10)

      for i in range(repeater):
        payload += original_payload[offset:offset+chunk_length]

    # 添加载荷中剩余字节
    payload += original_payload[offset:]

    return payload

四、加载扩展插件

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值