一、概述

做事端未对传入的跳转url变量进行检讨和掌握,可导致恶意用户布局一个恶意地址,勾引用户跳转到恶意网站。
跳转漏洞一样平常用于钓鱼攻击,通过跳转到恶意网站欺骗用户输入用户名和密码来盗取用户信息,或欺骗用户进行金钱交易;还可以造成xss漏洞。

常见的可能产生漏洞的参数名redirect,redirect_to,redirect_url,url,jump,jump_to,target,to,link,linkto,domain

php跳转url不变Web平安之URL跳转破绽 AJAX

定义:借助未验证的URL跳转,将运用程序勾引到不屈安的第三方区域,从而导致的安全问题。

url跳转常见涌现的地方(即漏洞产生的地方)

上岸跳转我认为是最常见的跳转类型,认证完后会跳转,以是在上岸的时候建议多不雅观察url参数用户分享、收藏内容过后,会跳转跨站点认证、授权后,会跳转站内点击其它网址链接时,会跳转在一些用户交互页面也会涌现跳转,如请填写对客服评价,评价成功跳转主页,填写问卷,等等业务,把稳不雅观察url。
业务完成后跳转这可以归结为一类跳转,比如修正密码,修正完成后跳转上岸页面,绑定银行卡,绑定成功后返回银行卡充值等页面,或者说给定一个链接办理VIP,但是你须要认证身份才能访问这个业务,这个时候常日会给定一个链接,认证之后跳转到刚刚要办理VIP的页面。

二、URL跳转漏洞事理

黑客利用URL跳转漏洞来勾引安全意识低的用户点击,导致用户信息透露或者资金的流失落。
其事理是黑客构建恶意链接(链接须要进行伪装,尽可能迷惑),发在QQ群或者是浏览量多的贴吧/论坛中。
安全意识低的用户点击后,经由做事器或者浏览器解析后,跳到恶意的网站中。

恶意链接须要进行伪装,常常的做法是熟习的链接后面加上一个恶意的网址,这样才迷惑用户。

诸如伪装成像如下的网址,你是否能够识别出来是恶意网址呢?

http://gate.baidu.com/index?act=go&url=http://t.cn/RVTatrdhttp://qt.qq.com/safecheck.html?flag=1&url=http://t.cn/RVTatrdhttp://tieba.baidu.com/f/user/passport?jumpUrl=http://t.cn/RVTatrd

三、攻击办法及危害

恶意用户完备可以借用URL跳转漏洞来欺骗安全意识低的用户,从而导致“中奖”之类的敲诈,这对付一些有在线业务的企业如淘宝等,危害较大,同时借助URL跳转,也可以打破常见的基于“白名单办法”的一些安全限定,如传统IM里对付URL的传播会进行安全校验,但是对付大公司的域名及URL将直接许可通过并且显示会可信的URL,而一旦该URL里包含一些跳转漏洞将可能导致安全限定被绕过。

如果引用一些资源的限定是依赖于“白名单办法”,同样可能被绕过导致安全风险,譬如常见的一些运用许可引入可信站点如youku.com的视频,限定办法每每是检讨URL是否是youku.com来实现,如果youku.com内含一个url跳转漏洞,将导致终极引入的资源属于不可信的第三方资源或者恶意站点,终极导致安全问题。

四、实现办法

Header头跳转Javascript跳转META标签跳转

通过以GET或者POST的办法吸收将要跳转的URL,然后通过上面的几种办法的个中一种来跳转到目标URL。
一方面,由于用户的输入会进入Meta,javascript,http头以是都可能发生相应高下文的漏洞,如xss等等,但是同时,纵然只是对付URL跳转本身功能方面就存在一个毛病,由于会将用户浏览器从可信的站点导向到不可信的站点,同时如果跳转的时候带有敏感数据一样可能将敏感数据泄露给不可信的第三方。

这里我们举个Header头跳转实现办法:

<?php$url=$_GET['jumpto'];header("Location: $url");?>

如果jumpto没有任何限定,以是恶意用户可以提交:

http://www.wooyun.org/login.php?jumpto=http://www.evil.com

来天生自己的恶意链接,安全意识较低的用户很可能会以为该链接展现的内容是www.wooyun.org从而可能产生敲诈行为,同时由于QQ,淘宝旺旺等在线IM都是基于URL的过滤,同时对一些站点会以白名单的办法放过,以是导致恶意URL在IM里可以传播,从而产生危害,譬如这里IM会认为www.wooyun.org都是可信的,但是通过在IM里点击上述链接将导致用户终极访问www.evil.com这个恶意网址。

五、绕过URL跳转限定

1.利用?号绕过限定

比如:http://www.aaa.com/acb?Url=http://login.aaa.com

这是一个跳转链接,跳转到它的二级域名下,那么这个问号放哪里可以绕过呢?实在便是放到它自身的域名前面也便是你添加的想要跳转的域名的后面,如:http://www.aaa.com/acb?Url=http://test.com?login.aaa.com 。
它实在是会跳转到这个test.com域名下,这个域名是我想要跳转的任意域名,而后面的它自身域名一定要带上,不带上就无法赞助用问号?这个特性来跳转到指定域名了,而跳转后,问号和问号后面的内容会变为这样:http://www.test.com/?login.aaa.com

2.利用反斜杠和正斜杠绕过限定

比如:http://www.aaa.com/acb?Url=http://login.aaa.com/ 同样是在它本身域名钱加上正斜杠,然后正斜杠前面跟上你想跳转的域名地址,如:http://www.aaa.com/acb?Url=http://test.com/login.aaa.com

反斜杠有三种思路

①两个反斜杠绕过方法

比如:http://www.aaa.com/acb?Url=http://login.aaa.com/ 同样是在它本身域名钱加上两个反斜杠,然后两个反斜杠前面跟上你想跳转的域名地址

如:http://www.aaa.com/acb?Url=http://test.com\login.aaa.com

②一个反斜杠绕过方法

如:http://www.aaa.com/acb?Url=http://test.com\login.aaa.com

③另一种思路,一个反斜杠一个点

利用.这样的格式,也便是一个反斜杠加一个点来跳过限定,

如:http://www.aaa.com/acb?Url=http://test.com.login.aaa.com

3.利用@绕过URL限定

如果你用这方法在火狐里进行跳转,会有弹窗提示,在其它游览器则没有。

如:http://www.aaa.com/acb?Url=http://login.aaa.com@test.com后面的test.com便是要跳转到的域名,前面的域名都是用来赞助以绕过限定的

4.利用#号绕过

如:http://www.aaa.com/acb?Url=http://test.com#login.aaa.com

5.利用白名单毛病绕过

有的域名白名单限定是不全的,比如如果想利用一个跳转,而这个跳转是通用,在这个公司网站很多子域名等都可以跳转,那么你买个域名也不算贵对吧,为什么这么说呢,这个问题便是白名单限定不当,比如,当跳转的域名包含这个网站下的所有域名,比如:

http://www.aaa.com/acb?Url=http://login.aaa.com,这个login.aaa.com也可以改成aaa.com同样可以跳转对吧,由于白名单里只要有包含这个域名就直接成功跳转。
那么当我在这个域名前面加上如testaaa.com,白名单里会检讨是否包含aaa.com这个域名,包含,然后直接跳转,而并没有检讨这个域名的全体信息,然后可以利用这个问题,直接注册一个testaaa.com这个域名就可以利用这个跳转。

6.多重验证&跳转绕过限定

现在很多网站都有多重验证,比如你上岸账户后会涌现另一个验证页面,输入手机验证码进行验证,此时这上面的URL很可能存在任意跳转的问题。
多重跳转的问题导致可绕过URL限定

比如http://www.aaa.com/acb?Url=http://login.aaa.com/acb?url=http://login.aaa.com。
当然,还有多重的,这个构造的多重跳转你修正末了面的URL就可以达到任意URL跳转,中间的URL就没必要动了。

7.点击触发达到绕过URL跳转限定

比如很多上岸页面的地方,其URL是一个跳转的URL,如:http://www.aaa.com/acb?Url=http://test.com。
你直接修正了后面为任意URL,但是还是勾留在原地,彷佛没什么问题,但是,当你输入账号和密码后点击上岸按钮后,就会触发跳转,当然,这个账户和密码不一定要对的,随便都可以,但得视系统而定吧。
这个我碰着了很多,比如你修正了域名,然后点击上岸,上岸成功后便可触发跳转,这也是一个比较暗藏的绕过URL限定的跳转。

8.POST参数中的URL跳转

当你填什么表格或者须要填写什么的,当你上传图片,点击下一步的时候,常日下一步便是预览你填写的信息,末了才是提交,当你上传了图片后点击下一步抓包,如果过滤不严,你会看到图片的完全地址包含在POST参数里,你就可以直接修正这个地址为任意URL,然后到达下一步,这时是确定信息也便是预览自己填写的信息的精确还是禁绝确,由于你刚刚修正了图片地址,这里是没有显示出来的,图像会是一个小XX,当点击图片右键选择查看图像时,就会触发URL跳转问题,实在这个也可以利用来进行钓鱼,钓后台审核员的信息(引用)

9.利用xip.io绕过

要求是http://www.127.0.0.1.xip.io 这个绕过是在SSRF场景中的绕过,比如SSRF你要读取内网地址,一样平常都做了限定,可以考试测验用这方法进行绕过限定,从而访问到内网。
其余一点,URL跳转涉及的安全问题大家常见的便是钓鱼,那么利用这个思路也可达成一个钓鱼问题,如,http://www.qq.com.220.181.57.217.xip.io 当你访问qq这个域名时,实在这个链接已经被解析到后面这个ip地址上了,那么实际访问的便是后面这个IP地址。

六、url跳转修复

1.若跳转的URL事先是可以确定的,包括url和参数的值,则可以在后台先配置好,url参数只需传对应url的索引即可,通过索引找到对应详细url再进行跳转;

2.若跳转的URL事先不愿定,但其输入是由后台天生的(不是用户通过参数传人),则可以师长西席成好跳转链接然后进行署名,而跳转cg首先须要进行验证署名通过才能进行跳转;

3.若1和2都不知足,url事先无法确定,只能通过前端参数传入,则必须在跳转的时候对url进行按规则校验:即掌握url是否是你们公司授权的白名单或者是符合你们公司规则的url:

function checkURL ( sURL) {return (/^(https?:\/\/)?[\w-.]+.(yourDomainA|yourDomainB|yourDomainC).com($|\/|\)/i).test(sUrl)||(/^[\w][\w\/.-_%]+$/i).test(sUrl)||(/^[\/\][^\/\]/i).test(sUrl) ? true : false; }

4.XSS漏洞的把稳事变 :跳转url检测中也加入了CRLF头部注入漏洞的检测逻辑, 详细便是在要求参数中加入了%0d%0a这种测试代码,须要对这些参数进行删除处理(事实上:在判断到一个参数中包含 %00 -> %1f 的掌握字符时都是不合法的,需对其进行删除)。

七、如何防御

理论上讲,url跳转属于CSRF的一种,我们须要对传入的URL做有效性的认证,担保该URL来自于精确的地方,限定的办法同防止csrf一样可以包括:

1.referer的限定

如果确定通报URL参数进入的来源,我们可以通过该办法实现安全限定,担保该URL的有效性,避免恶意用户自己天生跳转链接

2.加入有效性验证Token

我们担保所有天生的链接都是来自于我们可信域的,通过在天生的链接里加入用户不可控的Token对天生的链接进行校验,可以避免用户天生自己的恶意链接从而被利用,但是如果功能本身哀求比较开放,可能导致有一定的限定。

参考:

https://juejin.cn/post/6844903772930441230

http://drops.xmd5.com/static/drops/papers-58.html

https://blog.csdn.net/pro20/article/details/105731095

https://segmentfault.com/a/1190000021968717