跳转至

开放 URL 重定向 (Open URL Redirect)

当 Web 应用程序接受可能导致应用程序将请求重定向到不可信输入所包含的 URL 的不可信输入时,就可能发生未经验证的重定向和转发。通过将不可信的 URL 输入修改为恶意站点,攻击者可能会成功发起网络钓鱼诈骗并窃取用户凭据。由于修改后链接中的服务器名称与原始站点相同,网络钓鱼尝试可能具有更值得信赖的外观。未经验证的重定向和转发攻击也可用于恶意构造一个能够通过应用程序访问控制检查的 URL,然后将攻击者转发到他们通常无法访问的特权功能。

摘要 (Summary)

方法论 (Methodology)

当 Web 应用程序或服务器使用未经证实的、用户提供的输入将用户重定向到其他站点时,就会发生开放重定向漏洞。这允许攻击者构建指向易受攻击站点的链接,该链接会重定向到他们选择的恶意站点。

攻击者可以利用此漏洞进行网络钓鱼活动、会话窃取,或强迫用户在未经其同意的情况下执行操作。

示例:Web 应用程序具有一项功能,允许用户单击链接并自动重定向到保存的首选主页。这可能是这样实现的:

https://example.com/redirect?url=https://userpreferredsite.com

攻击者可以在此处利用开放重定向,将 userpreferredsite.com 替换为指向恶意网站的链接。然后,他们可以在网络钓鱼电子邮件或另一个网站上分发此链接。当用户点击链接时,他们将被带到恶意网站。

HTTP 重定向状态码 (HTTP Redirection Status Code)

HTTP 重定向状态码(以 3 开头的状态码)表示客户端必须采取进一步行动才能完成请求。以下是一些最常见的状态码:

重定向方法 (Redirect Methods)

基于路径的重定向 (Path-based Redirects)

重定向逻辑可能依赖于路径而不是查询参数:

  • 在 URL 中使用斜杠:https://example.com/redirect/http://malicious.com
  • 注入相对路径:https://example.com/redirect/../http://malicious.com

基于 JavaScript 的重定向 (JavaScript-based Redirects)

如果应用程序使用 JavaScript 进行重定向,攻击者可以操纵脚本变量:

示例

var redirectTo = "http://trusted.com";
window.location = redirectTo;

载荷 (Payload)?redirectTo=http://malicious.com

常见的查询参数 (Common Query Parameters)

?checkout_url={payload}
?continue={payload}
?dest={payload}
?destination={payload}
?go={payload}
?image_url={payload}
?next={payload}
?redir={payload}
?redirect_uri={payload}
?redirect_url={payload}
?redirect={payload}
?return_path={payload}
?return_to={payload}
?return={payload}
?returnTo={payload}
?rurl={payload}
?target={payload}
?url={payload}
?view={payload}
/{payload}
/redirect/{payload}

过滤器绕过 (Filter Bypass)

  • 使用白名单域名或关键词

    www.whitelisted.com.evil.com 重定向到 evil.com
    
  • 使用 CRLF 绕过 "javascript" 黑名单关键词

    java%0d%0ascript%0d%0a:alert(0)
    
  • 使用 "//" 和 "////" 绕过 "http" 黑名单关键词

    //google.com
    ////google.com
    
  • 使用 "https:" 绕过 "//" 黑名单关键词

    https:google.com
    
  • 使用 "\/\/" 绕过 "//" 黑名单关键词

    \/\/google.com/
    /\/google.com/
    
  • 使用 "%E3%80%82" 绕过 "." 黑名单字符

    /?redir=googlecom
    //google%E3%80%82com
    
  • 使用空字节 "%00" 绕过黑名单过滤器

    //google%00.com
    
  • 使用 HTTP 参数污染 (HTTP Parameter Pollution)

    ?next=whitelisted.com&next=google.com
    
  • 使用 "@" 字符。 常见互联网方案语法 (Common Internet Scheme Syntax)

    //<user>:<password>@<host>:<port>/<url-path>
    http://www.theirsite.com@yoursite.com/
    
  • 创建以其域名命名的文件夹

    http://www.yoursite.com/http://www.theirsite.com/
    http://www.yoursite.com/folder/www.folder.com
    
  • 使用 "?" 字符,浏览器会将其翻译为 "/?"

    http://www.yoursite.com?http://www.theirsite.com/
    http://www.yoursite.com?folder/www.folder.com
    
  • 主机/拆分 Unicode 归一化 (Host/Split Unicode Normalization)

    https://evil.c.example.com  ---> https://evil.ca/c.example.com
    http://a.comX.b.com
    

实验环境 (Labs)

参考资料 (References)