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

本文介绍了PortSwigger Research推出的URL验证绕过速查表,详细解析了如何利用模糊URL触发解析差异,绕过验证,涵盖多种编码格式、IPv4/IPv6表示及Unicode规范化技术,助力渗透测试与漏洞挖掘。

介绍URL验证绕过速查表

URL验证绕过是众多漏洞的根本原因,包括许多SSRF(服务器端请求伪造)、CORS(跨源资源共享)配置错误和开放重定向实例。这些漏洞通过使用模糊URL触发URL解析差异并绕过验证来实现。然而,许多这些技术文档记录不足,因此被忽视。

为了解决这个问题,我们创建了一个速查表,整合了所有已知的有效载荷,节省您从互联网搜索和收集信息的时间和精力。今天,我们很高兴介绍一个旨在解决此问题的新工具:URL验证绕过速查表。

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

如何开始

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

  • 完全限定的绝对URL:适用于URL用于请求查询参数等情况。所有有效载荷设计为与Burp Suite Intruder兼容,因此您无需担心正确编码。
  • 仅主机名:直接输入域名,例如在Host头值中。
  • CORS Origin:主机名旨在用于有效的浏览器origin头。

最初,速查表提供六种类型的有效载荷单词列表。高级设置允许您选择特定单词列表或同时使用所有列表。以下是其中最重要的简要概述:

  • 域名允许列表绕过:专为域名混淆攻击设计。您可以通过输入允许和攻击者域名来自定义测试域名。
  • 伪相对URL:包括浏览器有效的绝对URL,可能被客户端代码错误验证。
  • 环回地址:此单词列表包括IPv4、IPv6地址的各种表示及其规范化。

编码

URL验证速查表支持多种字符串编码类型:

  • Intruder的百分比编码:此选项通过将某些字符替换为代表字符UTF-8编码的一到四个转义序列来编码有效载荷字符串。它排除Burp Suite Intruder的默认字符,默认启用,使其易于与Burp Suite兼容。
  • Everything:此选项对除字母数字字符外的所有字符进行百分比编码。
  • 特殊字符:此选项编码除以下字符外的所有字符:["!","$","’",""","(",")","*",",","-",".","/","\",":",";","[","]","^","_","{","}","|","~"]。
  • 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) (& NoBreak;)
  • 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 设计