引入URL验证绕过速查表
URL验证绕过是众多漏洞的根本原因,包括许多SSRF(服务器端请求伪造)、CORS(跨源资源共享)配置错误和开放重定向实例。这些漏洞通过使用模糊URL触发URL解析差异并绕过验证。然而,许多这些技术由于缺乏文档而被忽视。为了解决这个问题,我们创建了一个速查表,整合所有已知的有效载荷,节省您从互联网上搜索和收集信息的时间和精力。今天,我们很高兴推出一个新工具:URL验证绕过速查表。
我们希望您觉得它有用!这是一个频繁更新的存储库,包含所有已知技术,让您快速生成符合需求的单词列表。
如何开始使用
URL验证绕过速查表是一个全新的交互式Web应用程序,根据您的上下文自动调整其设置。目前有三种上下文可用:
- 完全限定的绝对URL - 适用于URL用于请求查询参数等情况。所有有效载荷都设计为与Burp Suite Intruder兼容,因此您无需担心正确的编码。
- 仅主机名 - 直接输入域名,例如在Host头值中。
- CORS Origin - 主机名用于有效的浏览器Origin头。
最初,速查表提供六种类型的有效载荷单词列表。高级设置允许您选择特定的单词列表或同时使用所有列表。以下是最重要的一些概述:
- 域名允许列表绕过:专为域名混淆攻击设计。您可以通过输入允许的域名和攻击者域名来自定义测试域名。
- 伪造相对URL:包括浏览器有效的绝对URL,这些URL可能会被客户端代码错误地验证。
- 环回地址:此单词列表包括IPv4、IPv6地址的各种表示及其规范化。
编码
URL验证速查表支持几种类型的字符串编码:
- Intruder的百分比编码:此选项通过将某些字符替换为代表字符UTF-8编码的一到四个转义序列来编码有效载荷字符串。它排除了Burp Suite Intruder的默认字符,并默认启用,使其与Burp Suite轻松兼容。
- 全部编码:此选项对所有非字母数字字符进行百分比编码。
- 特殊字符:编码除以下字符之外的所有字符:
["!","$","'","\"","(",")","*",",","-",".","/","\\",":",";","[","]","^","_","{","}","|","~"]
。 - Unicode转义:此选项将有效载荷字符串表示为六字符转义序列
\uXXXX
,除了以下字符:['"','\\','\b','\f','\n','\r','\t']
和范围[0x0020 - 0x007f]
内的字符。
注意:未编码的字符串应谨慎使用,因为Unicode值可能无法正确传输。
高级设置
IPv4地址表示
在处理Web应用程序时,将IP地址编码为不同格式对于测试、验证和安全目的至关重要。速查表支持标准IPv4地址作为攻击者IP输入,并返回一系列编码表示,包括八进制、十六进制、二进制和十进制格式。它还将IPv4地址转换为其IPv6映射地址格式。
编码细节:
- 八进制:IP地址的每个段转换为八进制数并填充到4位。例如,环回IP地址
127.0.0.1
将表示为0177.0000.0000.0001
。 - 十六进制:每个段转换为十六进制数,前缀为
0x
,并填充到2位。相同的环回IP地址将为0x7F.0x00.0x00.0x01
。 - 二进制:每个段转换为8位二进制数。示例IP地址将为
01111111.00000000.00000000.00000001
。 - 部分十进制:将IP地址的第三和第四部分组合成一个十进制数:
127.0.1
。 - DWORD表示法:整个IP地址转换为无符号32位整数:
2130706433
。 - 带溢出的DWORD表示法:将先前转换的结果加上
2^32 * 10 = 45080379393
。 - IPv6映射地址:将IPv4段转换为十六进制并格式化为标准IPv6映射地址。环回IP地址可以表示为
[::FFFF:7F00:0001]
或::FFFF:127.0.0.1
。
规范化
单词列表包括许多利用Unicode字符串规范化的有效载荷。例如,以下字符的规范化会导致空字符串:
ZeroWidthSpace
、NegativeVeryThinSpace
、NegativeThinSpace
、NegativeMediumSpace
、NegativeThickSpace
。Word Joiner (U+2060)
(⁠
)。Soft Hyphen Character U+00AD
(­
)。
这些技术可用于绕过Web应用程序防火墙(WAF)。另一个允许域名绕过的例子是当验证正则表达式允许多行字符串时。例如,如果使用正则表达式^allowed_domain$
,以下内容可以绕过验证:
attacker_domain(U+2028)allowed_domain
(行分隔符)。attacker_domain(U+2029)allowed_domain
(段落分隔符)。
致谢
这个速查表离不开分享研究的Web安全社区。特别感谢:
- Gareth Heyes、
- James Kettle、
- Jann Horn、
- Liv Matan、
- Takeshi Terada、
- Orange Tsai、
- Nicolas Grégoire。
我们在GitHub账户上发布了所有有效载荷:https://github.com/PortSwigger/url-cheatsheet-data,您可以通过创建新问题或更新JSON文件并提交拉取请求来为此速查表做出贡献。
我们期待您使用我们的新URL验证绕过速查表发现有趣的内容!