涡轮入侵者:拥抱十亿要求攻击

涡轮入侵者

自动化的Web应用程beplay体育能用吗序攻击受其可以发送的HTTP请求数量的终止限制。不可能知道有多少黑客脱离了轨道,因为您没有完全设法公布密码,错过了比赛条件或未能找到重要的文件夹。

在本演讲中,我介绍,演示和分发涡轮入侵者 - 研究级开源Burp Suite扩展名从头开始构建,并牢记速度。我还讨论了基本的HTTP滥用,使其能够如此快地进行,因此您可以在碰巧编写的任何工具中达到类似的速度。

这是Bugcrowd的直播录制Levelup#03在线会议:


如果您的视频不是您的事物,则可以简要概述何时以及如何使用它。

Turbo Intruder是用于发送大量HTTP请求并分析结果的BURP套件扩展。它打算补充打击者通过处理需要出色速度,持续时间或复杂性的攻击。以下功能使其与众不同:

另一方面,不可否认的是,网络堆栈并不像核心BURP那样可靠和战斗。最后,我应该提到它是为了向单个主机发送大量请求而设计的。如果您想向许多主机发送单个请求,我建议您Zgrab

入门

使用扩展器选项卡下的Bapp商店安装涡轮入侵套件。如果您希望从源构建它,请使用Gradle建立Fatjar然后加载src/build/libs/turbo-intruder-all.jar通过Extender->扩展 - >添加

要使用它,只需突出显示您要注入的区域,然后右键单击并“发送到Turbo Intruder”:

这将打开一个包含您请求的窗口和一个python片段,看起来像这样:



您可以根据攻击要实现的目标来自定义此代码。

基本用途

您会注意到,您突出显示的请求区域已被“%s”替换 - 这是您的有效载荷的位置。首先,您可能只想将'/usr/share/dict/wists'更改为更合适的文字列表。除此之外,默认脚本应从开箱即用的情况下进行简单用例。您可以使用CTRL+Enter开始/停止攻击。

谨慎

Turbo Intruder通过网络级效率达到速度,因此即使在网络连接不佳的情况下,它也应保持相对性能。我的第一个现场演示是在隔壁的咖啡店借来的WiFi在酒吧地下室进行的,但每秒仍达到数百个请求。

这意味着目标网站可能是其运行速度的限制因素。beplay体育能用吗由于它使用了少量的并发连接,因此不太可能导致经典的DOS情况,在该情况下,服务器的连接池被消耗掉并且没有其他人可以连接。但是,针对资源密集型页面的目标可能会使服务器挣扎并减慢每个人,因此建议监视攻击过程中的应用程序性能。

过滤无聊的结果

在Turbo入侵者中,响应不会自动放置在结果表中。取而代之的是,“处理程序”功能被调用,您可以在其中决定是否将响应添加到表中。这是一个简单的例子:

DEF HANDLERESPONSE(REQ,有趣):
如果在req.response中'200 ok':
table.add(req)

编码自定义响应检查并非总是必要一个无聊的人。该策略由默认脚本。有关此过滤策略的更多信息,请查看我的介绍在后斜杠的扫描仪上。

如果您想根据响应属性来定义自己的过滤器,则可以使用装饰器轻松实现此目标:

@matchstatus(200,204)
@MatchSizerange(100,1000)
DEF HANDLERESPONSE(REQ,有趣):
table.add(req)

有关此方法的更多信息,请查看完整的装饰器文档

快速调整

如果速度对您的攻击很重要,那么您可以采取很多步骤来使其更快。

首先,通过从请求中删除不必要的标题和cookie,以使其尽可能小。

然后,探索是否可以使用头部方法修剪响应大小,范围标题(如阿加里)和接受编码标题。

接下来,选择最快的请求引擎。通常,Engine.http2是最快的工作,然后是调整良好的发动机。线程,然后是Engine.burp2,然后发动机。

接下来,调整引擎设置。如果您最终使用了任何一种Burp引擎,这仅意味着调整“ conturrentConnections”,这只是Turbo Intruder用于发送请求的线程数。如果您使用的是前两个引擎,则可能需要按照该顺序调整管道,请求connection和consurrentConnections参数。您的目标应该是找到最大化RP(每秒请求)值的值,而将重试柜台保持接近0。此处的最佳值高度依赖于服务器,但是到目前为止,我已经达到了远程服务器的最大速度是30,000 rps。

如果您已经达到了良好的速度,那么该优化回调代码了。特别是,Table.Add()在秋千线上放大负载,因此您可以通过分析每个响应来确定是否将其放置在结果表中来减轻系统上的CPU负担。另外,避免将正则和循环串联串联。

最后,如果您需要更高的速度,请通过尽可能靠近目标的服务器来利用Turbo Intruder的命令行操作。你知道你想。

请注意,根据您目标的端点,申请请求处理可能是瓶颈。如果Wreedy Server必须执行15个SQL查询来处理每个请求,则您的攻击永远不会快。从明亮的一面来看,触发比赛条件可能很容易...

寻找比赛条件

默认脚本使用流攻击样式,非常适合最大程度地减少内存使用情况,但对于查找种族条件而不是理想的选择。为了找到一个种族条件,您需要确保所有要求将目标击中尽可能小的窗口,可以使用专用的“门”系统来实现race.py

对于使用涡轮入侵者找到种族条件的现实生活示例,请查看密码重置代码Brute-Force脆弱性在AWS Cognito中

内置的词列表

Turbo Intruder有两个内置的单词列表 - 一个用于发射长期爆发的蛮力攻击,另一个包含在企业内代理流量中观察到的所有单词。后一个单词列表可能会导致一些非常有趣的发现,这些发现通常需要手动测试才能识别。您可以看到如何在specterwordlists.py

命令行的用法

您可能会不时发现要从服务器运行涡轮侵入者。为了支持无头的使用,它可以直接从罐子中发射,而无需打bur。

您可能会发现最容易像往常一样在burp中开发脚本,然后在服务器上保存并启动它:

java -jar turbo.jar

例子:
java -jar turbo.jar Resources/示例/basic.py资源/示例/request.txt https://example.net:443 foo

命令行支持非常基本 - 如果您尝试使用此功能,您可能会有糟糕的时光。另外,它不支持自动有趣的响应检测,因为这依赖于各种BURP方法。

交换请求引擎

Turbo Intruder已被架构,可让您使用可选的“引擎”参数轻松地在不同的网络堆栈之间进行交换。默认情况下,它将使用快速发动机。线程选项,但是在某些情况下,您可能更喜欢通过使用Engine.burp来利用Burp的稳定性或上游代理处理。更新2021/08/24:我添加了一个自定义的HTTP/2堆栈作为Engine.http2,您还可以通过Engine.burp2使用Burp的HTTP/2堆栈。

调试问题

如果统计局中的“失败”计数器开始迅速增加,那是一个不对劲的好兆头。这可能是您的脚本,目标网站或Turbo Intuder的网络堆栈的问题。beplay体育能用吗如果您有兴趣帮助改善工具,我做了一个调试脚本帮助您识别并可能报告问题的根源。

多个参数

您可以简单地轻松地使用多个参数将它们作为清单

多主持人攻击

每个请求引擎只能与单个TCP端点交谈,但是如果您想将请求发送到多个网站,则可以通过创建来实现此目标beplay体育能用吗多个请求引擎。Turbo Intruder的设计考虑了单主机攻击,并且立即保持大量TCP连接并不能很好地扩展。另外,统计局仅反映一个请求引擎。我可能会在将来的某个时候解决这个问题,但是目前,如果您想向大量主机发送少量请求,我建议您使用Zgrab。

攻击状态

当您学会编写更多高级攻击时,您可能需要在请求之间跟踪状态。请求引擎具有称为USERSTATE的固有性,您可以使用它。我编写了一个示例脚本,该脚本将使用此功能演示为通过计时攻击列举用户名

更多示例

要了解涡轮入侵者中可用的其他高级功能,请查看示例脚本的完整列表

编辑设置

您可以通过“设置”菜单自定义一些编辑器设置,例如行数和字体大小:

最后说明

与以往一样,我有许多计划对Turbo入侵者进行改进。我们还期待最终将Turbo Intuder的网络堆栈中的某些功能引入核心Burp Suite工具。

祝你好运,玩得开心,尽量不要把任何东西放下。

回到所有文章

相关的研究

每日Swig的推荐故事beplay2018官网