我写了这个插件使用的技术博客文章在这里一会儿回来。如果存在特定标头,许多 WAF 设备可能会被诱骗相信请求来自自身,因此是可信的。绕过方法的基础知识可以在此处的 HP 博客文章中找到。
一段时间以来,我一直在 Burp 中实施匹配/替换规则,以将这些标头自动添加到发送到受 WAF 保护的站点的请求中,但决定创建一个插件,可用于将标头添加到主动扫描、转发器请求、入侵者请求中等等。我从 Fishnet Security 那里看到这篇文章,这真的让我大开眼界。
首先,我在 Python 中实现了该插件,因为它既快速又简单,而且我实际上在最近的一个项目中很快就需要它。然后我做了一些关于如何将它实现为 Java 扩展以提高效率的快速研究。
要使用此插件添加必要的头文件,首先您需要下载插件的 Python 版本、插件的 Java 版本或 Java 源代码并自行编译。有了插件后,启动 Burp 并导航到“Extender->Extensions”,然后单击“添加”按钮。选择扩展类型“Java”(如果使用 Java 插件)或“Python”(如果使用 Python 版本),然后导航到扩展路径。配置应该类似于:
现在应该加载插件并显示如下内容:
现在您需要导航到“选项(这里是Project options)->会话”,然后单击“会话处理规则”配置部分的“添加”按钮,如下所示:
给规则起个名字,然后在“Rule Actions”部分点击“Add”按钮,选择“Invoke a Burp extension”,如下图:
您应该能够在下拉框中选择“绕过 WAF”,如下所示:
单击“确定”,然后选择“范围”选项卡。启用要在扩展范围内的所有工具,然后设置范围。我喜欢为所有工具启用范围,并将请求的范围限制为已添加到套件范围的那些,如下所示:
绕过 WAF 包含以下功能:
大多数新功能都基于 Ivan Ristic 在此处和此处找到的 WAF 绕过工作。每个功能的描述如下:
- 用户可以修改每个请求中发送的 X-Originating-IP、X-Forwarded-For、X-Remote-IP、X-Remote-Addr 标头。这可能是该工具中最重要的绕过技术。将 WAF 配置为信任自身 (127.0.0.1) 或上游代理设备的情况并不少见,这正是该绕过的目标。
- “Content-Type”标头可以在每个请求中保持不变,从所有请求中删除,或者修改为每个请求的许多其他选项之一。一些 WAF 只会根据已知的内容类型解码/评估请求,此功能针对该弱点。
- 也可以修改“Host”标头。配置不当的 WAF 可能被配置为仅根据在此标头中找到的主机的正确 FQDN 来评估请求,这正是绕过的目标。
- 请求类型选项允许 Burp 用户仅在给定的“GET”或“POST”请求方法上使用剩余的绕过技术,或者将它们应用于所有请求。
- 路径注入功能可以不修改请求,注入随机路径信息信息(/path/to/example.php/randomvalue?restofquery),或注入随机路径参数(/path/to/example.php;randomparam=randomvalue?重置查询)。这可用于绕过依赖路径信息的编写不当的规则。
- 路径混淆功能将路径中的最后一个正斜杠修改为一个随机值,或者默认情况下什么都不做。最后一个斜杠可以修改为许多值中的一个,这在许多情况下会导致仍然有效的请求,但可以绕过依赖路径信息的写得不好的 WAF 规则。
- 参数混淆功能是特定于语言的。PHP 会丢弃每个参数开头的 +,但是可能会为特定的参数名称编写写得不好的 WAF 规则,从而忽略开头带有 + 的参数。同样,ASP 在每个参数的开头丢弃一个 %。
- “设置配置”按钮激活您选择的所有设置。
所有这些功能都可以结合起来提供多种旁路选项。我打算在未来的版本中至少添加以下功能:
- HTTP 参数污染 - 自动对 GET/POST 参数执行 HPP 攻击。
- HTTP 请求走私 - 自动对每个请求执行 HTTP 请求走私攻击,其中在开头添加虚拟请求并在末尾添加真实(走私)请求。
我一直在快速添加功能,并且很可能在任何人实际阅读本文时上述内容都已包含在代码中。
这就是您需要做的所有事情。您可以在此处获取扩展名。