2.3 Shopify登录的开放式重定向漏洞

难度:

URL:http://mystore.myshopify.com/account/login/

报告位置:https://www.hackerone.com/reports/103772/

报告日期:2015年12月6日

支付奖金:500美元

开放式重定向漏洞的第二个例子与第一个Shopify的例子类似。所不同的是,在本例中Shopify的参数不是将用户重定向到URL参数指定的域,而是通过在Shopify子域的末尾加上参数值的方式实现开放式重定向。通常情况下,该功能用于将用户重定向到一个指定商店的特定网页。然而,攻击者仍然可以通过增加字符以改变URL的含义来操纵这些URL,从而将浏览器从Shopify的子域重定向到攻击者的网站。

在存在这种漏洞的情况下,当用户登录到Shopify后,Shopify使用checkout_url参数重定向用户。例如,假定用户访问以下URL:

他们将会被重定向到URL http://mystore.myshopify.com.<attacker>.com/,而这显然不是一个Shopify域。

由于URL以.<attacker>.com结尾,并且DNS按照域名标记右侧优先的原则进行查询,重定向将会定向到域<attacker>.com。因此,当http://mystore.myshopify.com.<attacker>.com/被提交到DNS进行查询时,将会匹配上<attacker>.com域,这并不是Shopify所拥有的域,也不是Shopify所期望的myshopify.com域。尽管攻击者不能随意地将目标对象重定向到他们指定的地方,但是能够通过增加一些特殊字符,例如句点(.),到他们能够操作的URL字符串上,来实现将目标对象重定向到另外的域上。

要点

如果你只能够控制网站使用的URL的一部分,那么通过增加特殊的URL字符的方式可以改变URL的整体含义,从而可以实现将用户重定向到另外的域。假如你只能控制参数checkout_url的值,并且你也注意到了该参数是在原网站URL(如http://mystore.myshopify.com/)的后面增加一个URL硬编码组成的,可以试着增加特殊的URL字符,例如句点(.)或者符号@来测试你是否可以控制重定向的位置。