了解和寻找开放重定向漏洞

本文的翻译是在“ Web应用程序安全性”课程开始时准备的








Web开发人员最常见但仍被忽略的漏洞之一是Open Redirect(也称为“未经验证的重定向和转发”)。如果HTTP GET请求中的参数值(URL中``?''之后的部分)将用户重定向到新站点而不验证目标站点,则认为该网站容易受到Open Redirect的攻击。根据易受攻击的站点的体系结构,重定向可以在某些操作(例如登录)之后发生,有时可能在页面加载时立即发生。



易受攻击的链接的示例如下所示:www.example.com/login.html? RelayState= http% 3A%2F%2Fexample.com%2Fnext



在此示例中,“ RelayState”参数指定成功登录后将用户重定向到的位置(在我们的例如example.com/next)。如果站点未检查“ RelayState”参数的值的合法性和安全性,则攻击者可以使用此参数将受害者重定向到攻击者自己创建的伪造页面:www.example.com/login.html? RelayState= http% 3A%2F %2FEvilWebsite.com



开发人员已忽略了诸如Open Redirect之类的漏洞,因为它们不会直接破坏站点,也不会赋予攻击者直接窃取公司数据的能力。但是,这并不意味着“打开重定向”不是威胁。这种攻击的主要用途之一是进行有效而可靠的网络钓鱼攻击。



当网络钓鱼攻击使用“打开重定向”时,受害者可能会收到一封看起来合理的电子邮件,其中包含指向受害者正确且熟悉的域的链接。受害者可能没有注意到的是,URL的中间有一些参数会更改重定向端点。为了使打开重定向的检测复杂化,在受害者在真实站点上输入用户名和密码后,可能会发生重定向。攻击者发现,欺骗受害者的有效方法是在真实站点上输入用户名和密码后将其重定向到假站点。伪造的网站看起来与真实的网站相似,并会要求受害者重新输入密码。受害者这样做后,攻击者将写下密码,受害者将被重定向回真实站点。如果一切操作正确,受害者将认为他们是第一次输入密码错误,并且不会注意到其用户名和密码被盗。



网络钓鱼被用于大多数成功的有针对性的黑客攻击中,并经常用于机会主义攻击中。考虑到网络钓鱼在日常生活中的普遍性,也不应该消除像Open Redirect这样的漏洞。



挑出特定站点或公司容易受到Open Redirect的攻击是不公平的,因为此漏洞很常见。取而代之的是,显示多少个这样的站点以及它们的查找容易程度会有所帮助。



进行网络搜索是在您自己的站点和一般Internet上其他位置找到“打开重定向”的最佳方法之一。



Google的搜索引擎使您可以灵活地编写搜索查询,包括专门搜索页面URL的查询。



以下运算符和特殊字符将允许任何用户创建带标签的查询,以帮助检测Open Redirect:



  • allinurl是告诉Google搜索所有指定关键字的网址的运营商。例如:它将allinurl:ReturnUrl搜索地址中包含ReturnUrl部分的所有网页。
  • site-表示仅返回特定域或网站上的结果的运营商。示例:通过site:example.com查找网页example.com
  • "" -双引号是特殊字符,用于指示搜索引号内单词和字符的确切组合。
  • * -星号是表示一个或多个单词的通配符。


它们的使用使我们能够发现潜在的Open Redirect迹象:我们可以同时在GET请求的参数中搜索令牌“ http”“ https”的存在例如:



allinurl:%3Dhttps*
allinurl:%253Dhttps*
allinurl:%3Dhttp*
allinurl:%253Dhttp*


我们还可以在GET请求参数区域中搜索与重定向相关的特定通用词。例如:



allinurl:"<keyword>=https"
allinurl:"<keyword>=http"
allinurl:<keyword>=https
allinurl:<keyword>=http
allinurl:<keyword>%3Dhttps
allinurl:<keyword>%3Dhttps*
allinurl:<keyword>%253Dhttps
allinurl:<keyword>%253Dhttps*
allinurl:<keyword>%3Dhttp
allinurl:<keyword>%3Dhttp*
allinurl:<keyword>%253Dhttp
allinurl:<keyword>%253Dhttp*
allinurl:<keyword>


相反<keyword>,我们将使用以下重定向词之一:RelayState,ReturnUrl,RedirectUri,Return,Return_url,Redirect,Redirect_uri,Redirect_url,RedirectUrl,Forward,Forward_url,SuccessUrl,Redir,Exit_url,Destination。这不是关键字的完整列表。您可以通过分析GET Request Parameters部分中更通用的URL查找查询的结果来找到更多信息。



对于有针对性的搜索,您可以将其添加«site:<domain_name>»到Google搜索的末尾。此方法可以帮助您在自己的站点上找到“打开重定向”漏洞。



通过如此简单的搜索,您可以在几分钟内找到数十个“打开重定向”漏洞。易受攻击的站点列表包括银行,国际公司,受信任的公司,喜爱的项目以及众多小型组织的站点。另外,每次Google抓取工具偶然发现Open Redirect网站时,我们都会通过查询获得更新的结果。



避免“打开重定向”漏洞的最佳方法是避免特定于用户的参数重定向或GET请求。如果重定向是不可避免的,则可以通过验证目标站点并使用已验证URL的白名单清除其信誉来进行处理。



我鼓励您向您的Web开发人员朋友介绍开放重定向。您可以将本文转发给他们,甚至可以使用上述方法发现漏洞,并向公司报告问题的详细说明。让我们一起使网络钓鱼攻击更加困难!



如果您想共享可用于“打开重定向”检测的Google搜索,则可以在评论中进行。






了解有关该课程的更多信息







All Articles