开放式重定向利用对一个给定域的信任诱使目标对象访问一个恶意Web网站。
例如:https://www.google.com/?redirect_to=https://evil.com
由于开放式重定向仅仅重定向用户,因此有时认为它们的影响很小,挖掘这类漏洞不值得被奖赏。例如,Google漏洞奖励项目就认为开放式重定向风险很小,不值得奖励
就上面的例子而已,当我们访问上面的URL时,Google网站会接收到一个HTTP的GET请求,然后依据redirect_to参数中指定的值来确定将你的浏览器重定向到哪里。
Google网站服务器会返回一个用于指示浏览器重定向用户的HTTP响应状态码。通常,这个状态码是302,但有时也可能是301、303、307或308。
参数攻击
如果Google没有验证redirect_to参数是否为其将访问者重定向到一个自有合法站点,攻击者就可以将该参数的值换成它们自己的URL。
当检查这类漏洞时,要重点关注具有特定名称的URL参数,例如url=、redirect=、next=等,因为这些都有可能会表示引导用户重定向去的URL。
另一个需要注意的是,重定向参数不总是明显命名的,参数也可能随着网站的不同而不同,即使同一个网站内部不同的链接时也可能不同。在有些情况下,参数可能以单个字母的形式表示,例如r=或u=等
标签重定向
TML标签和JavaScript都可以重定向浏览器。HTML标签可以告知浏览器刷新网页,并向标签中的content属性定义的URL发起GET请求。下面是一个例子:
<meta http-equiv="refresh" content="0; url=https://www.google.com/">
content属性定义了浏览器发起HTTP请求的两个步骤
- content属性定义了浏览器在向URL发起HTTP请求前需要等待的时间,在本例中,这个时间是0秒
- content属性确定了浏览器向其发起GET请求的网站中URL的参数,在本例中,这个参数是https://www.google.com
当攻击者可以控制标签时,就可以利用这种重定向的能力。
JS重定向
攻击者可以通过JS修改DOM中的window对象的localtion属性来实现重定向。
window.location = https://www.google.com/
window.location.href =https://www.google.com
window.location.replace(https://www.google.com)
通常,仅当攻击者能够执行JavaScript语句时才能设置window.location的属性值,而获得JavaScript执行权限一般是通过跨站脚本漏洞或者网站允许用户自定义重定向URL的漏洞来实现。
开放式重定向例子
1.Shopify主题设置的开放式重定向漏洞
链接:https://www.hackerone.com/reports/101962/
URL: https://apps.shopify.com/services/google/themes/preview/supply–blue?domain_name
这里是一个参数攻击,利用的URL:
https://app.shopify.com/services/google/themes/preview/supply–blue?domain_name=attacker.com
主要是shopify并没有对domain_name进行验证,导致可以重定向到恶意网址。
挖掘难点: 主要是需要去熟悉业务,而且这个开店的业务,这个主题的漏洞一般人还是很难去测试。
2.Shopify登录的开放式重定向漏
链接:https://www.hackerone.com/reports/103772
URL:http://mystore.myshopify.com/account/login
利用URL:
http://mystore.myshopify.com/account/login?checkout_url=.attacker
.com
checkout_url参数用来重定向用户,当访问上面的链接时,会重定向到
http://mystore.myshopify.com.<attacker>.com/
然后DNS解析上面的URL时,会根据右侧优先的原则,重定向到<attacker>.com
3.HackerOne中间网页重定向漏洞
链接:https://www.hackerone.com/reports/111968/
很多网站会实现链接跳转的中间页来抵御重定向。这个中间页会说明你正在离开网站的域。在这个漏洞中,黑客利用了hackerone使用的一个zendesk系统来跳转。因为hackerone是信任zendesk的,zendesk缺可以注册个性化的zendesk账户,而且还支持重定向到其他的域。这就导致了hackerone可以被重定向到一个非信任的网站,而不会被提醒。
为了验证这个漏洞,黑客Mahmoud Jamal创建了一个具有子域http://compayn.zendesk.com
的Zendesk账号。然后他使用Zendesk主题编辑器(管理者可以通过主题编辑器定制自己的Zendesk网站的外观)在头文件中加上了如下JavaScript代码:
<script>document.location.href = «http://evil.com»;</script>
通过使用上面的JavaScript脚本,Jamal引导浏览器去访问http://evil.com。
当用户点击以下链接的时候,就会去访问evil.com了
注意的点
在挖掘的时候,一定要注意网站所使用的服务,这些服务也会成为一个攻击的点。
[…] Day023:漏洞学习之开放式重定向 […]
赞赞