URL验证绕过速查表:全面解析SSRF与CORS绕过技术

本文详细介绍了URL验证绕过技术,包括SSRF、CORS配置错误和开放重定向等漏洞的利用方法,并提供了交互式速查表工具,帮助安全测试人员快速生成有效载荷。

引入URL验证绕过速查表

URL验证绕过是众多漏洞的根本原因,包括许多SSRF(服务器端请求伪造)、CORS(跨源资源共享)配置错误和开放重定向实例。这些漏洞通过使用模糊URL触发URL解析差异并绕过验证。然而,许多这些技术由于缺乏文档而被忽视。为了解决这个问题,我们创建了一个速查表,整合所有已知的有效载荷,节省您从互联网上搜索和收集信息的时间和精力。今天,我们很高兴推出一个新工具:URL验证绕过速查表。

我们希望您觉得它有用!这是一个频繁更新的存储库,包含所有已知技术,让您快速生成符合需求的单词列表。

如何开始使用

URL验证绕过速查表是一个全新的交互式Web应用程序,根据您的上下文自动调整其设置。目前有三种上下文可用:

  1. 完全限定的绝对URL - 适用于URL用于请求查询参数等情况。所有有效载荷都设计为与Burp Suite Intruder兼容,因此您无需担心正确的编码。
  2. 仅主机名 - 直接输入域名,例如在Host头值中。
  3. 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字符串规范化的有效载荷。例如,以下字符的规范化会导致空字符串:

  • ZeroWidthSpaceNegativeVeryThinSpaceNegativeThinSpaceNegativeMediumSpaceNegativeThickSpace
  • 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验证绕过速查表发现有趣的内容!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计