URL 跳转原理

  1. 应用越来越多的需要与第三方应用交互
  2. 在自身应用内部根据不同的逻辑将用户引向不同的页面

譬如:一个典型的登录接口就经常需要在登录成功之后将用户引导到登陆之前的页面,整个过程中如果处理不好,就可能导致一些安全问题,特定条件下可能引起严重的安全漏洞。

类型

两种类型的跳转对用户来说是透明的,都是指向或跳转到另一个页面,页面发生了变化。

客户端跳转(重定向)

客户端替换也被称为 URL 重定向,用户浏览器的地址栏 URL 会有明显的变化。

比如:当前页面为 http://www.test.com.xk.php ,当点击 “登录“ 按钮后会指向 http:test.com/login/php 页面发生变化,这就是客户端跳转。

服务端跳转(请求转发)

服务端也称为 URL 转发,服务端跳转时, 用户浏览的地址栏不会变化的。

比如:当前页面 URL 为 http://www.test.com/xk.php, 当点击 “登录” 按钮后, 浏览器地址栏的 URL 没变。但是页面会发生变化。

还有一些跳转不属于转发,也不属于重定向,而是直接向服务器发送请求,这就是点击劫持了。比如:下面 a 标签

1
<a href="http://www.test.com/xk.jsp">安全测试</a>

攻击方式及危害

后台服务器在告知浏览器跳转时,未对客户端传入的重定向地址进行合法的校验导致了用户浏览器跳转到钓鱼页面的一种漏洞。

恶意用户完全可以借用 URL 跳转来欺骗安全意识较低的用户,从而导致“中奖”之类的欺诈,这对于一些有在线业务的企业如:淘宝,亚马逊等,危害较大。

同时借助 URL 跳转, 也可以突破常见的基于“白名单方式”的一些安全限制,如传统 IM 里对于 URL 的传播会进行安全校验,但是对于大公司的域名及 URL 将直接允许通过并且显示为可信的 URL,而一旦 URL 里包含一些跳转漏洞将可能导致安全限制被绕过。

如果允许引用一些资源的限制是依赖于 “白名单方式”, 同样可能被绕过导致安全风险

譬如:常见的一些应用允许引入可信站点如:baidu.com 的视频,限制方式往往是检查 URL 是否是 baidu.com 来实现,如果 baidu.com 内含一个 URL 跳转漏洞,将导致最终引入的资源属于不可信的第三方资源或者恶意站点,最终导致安全问题。

钓鱼攻击

模拟网页或者软件,几乎与官方的软件完全相同,连域名也非常相似。

防护措施:比如:黑名单策略,对一些链接进行危险标识

URL 跳转对自身没有危害,但是这个漏洞可以成为黑客进行其他恶意行为的助手或跳板。

绕过 URL 限制

URL 跳转漏洞

常见的:正/反斜杠,双反斜杠。@,#,白名单缺陷

URL 批量:

常见关键字:

1
redirect、go、return、returnTo、redirect、returnurl

常出现的位置:

1
2
login, register, logout ,
changesite language, links in emails

漏洞组合

URL 漏洞与其他漏洞组合

zseano 漏洞赏金猎人系列教程开放 URL 重定向

跳转的地方很容易有 XSS,比如:使用 window.location.href 跳转的时候