Burp插件之Turbo_Intruder
安装
可以在 burpsuite 的 BApp Store 直接安装该插件,也可以在它的 github 地址下载手动安装插件。
GitHub : https://github.com/PortSwigger/turbo-intruder
BApp Store : https://portswigger.net/bappstore/9abaa233088242e8be252cd4ff534988
Turbo Intruder 低层原理
Turbo Intruder 使用自定义的 HTTP 栈来和服务器进行通信。
首先它会使 Connection: keepalive 头发起 HTTP 请求,如果是使用默认的 Connection: close 头,那么每次和服务器建立 HTTP 请求时都要重新建立一条 TCP 连接,这样比较浪费时间。
Connection: keepalive 头可以复用同一条 TCP 连接来发送多个 HTTP 请求, 这样就可以节省重复建立 TCP 连接的时间,使用 Connection: keepalive 头后速度是原来的 400% 。
另外, 它还使用了 HTTP Pipelining (HTTP 管道)的方式来发送 HTTP 请求,这种方式会一次性发送几十个 HTTP 请求到服务器, 然后再一次性读取几十个请求响应。通过 HTTP 管道的方式,速度是一开始的 6000% !
使用
选中数据包右键选择 Extensions
- Turbo Intruder
- Send to turbo intruder
。
此时会打开一个新的窗口,该窗口上半部分区域为原始的HTTP请求包,下半部分为操作代码,中间部分可以根据场景从下拉框中选择具体操作代码。每次打开时此处默认为Last code used,即为上次使用的代码。
代码区需要使用%s
字符来代替需要进行Fuzz的部分。选择对应的操作代码点击最下方Attack即可开始攻击。
并发测试
在请求包任意位置添加 %s
操作代码如下:
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)
参考
https://blog.csdn.net/ma963852/article/details/129585309
https://blog.csdn.net/qq_28205153/article/details/113832488
https://www.cnblogs.com/backlion/p/18088702
https://sanshiok.com/archive/16.html