URL跳转原理:

  由于越来越多的需要和其他第三方应用交互,以及在自身应用内部根据不同的逻辑将用户引向到不同的页面,譬如一个典型的登录接口就经常需要在认证成功之后将用户引导到登录之前的页面,整个过程中如果实现不好就可能导致一些安全问题,特定条件下可能引起严重的安全漏洞。

攻击方式及危害:

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

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

客户端跳转(重定向):

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

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

  比如index.jsp中含有重定向语句,代码如下:

<%

  response.sendRedirect("a,jsp");

%>

  当浏览器请求index.jsp后,收到302指示(也叫重定向)就会立刻进行跳转。

服务端跳转(请求转发):

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

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

  还有一些跳转不属于转发,也不属于重定向,而是直接向服务器发送请求,比如,一个简单的<a>标签:

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

钓鱼攻击:

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

如何绕过URL跳转:

1.利用问号绕过限制

  利用问号,这是一个特性,利用问号可以成功绕过URL限制。

  比如: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

  反斜杠有三种思路:

(1)两个反斜杠绕过方法

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

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

(2)一个反斜杠绕过方法

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

(3)一个反斜杠一个点

  利用\.这样的格式,也就是一个反斜杠加一个点来绕过限制,如:

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

3.利用白名单缺陷绕过限制

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

  比如,当跳转的域名包含这个网站下的所有域名,比如:http://www.aaa.com/acb?url=http://login.aaa.com,这个longin.aaa.com也可以改成aaa.com同样可以跳转,因为白名单里只要包含这个域名就直接成功跳转。那么当我在这个域名前加上如test.aaa.com,白名单里会检测是否包含aaa.com这个域名,包含,然后直接跳转,而并没有检测这个域名的整个信息,然后可以利用这个问题,直接注册一个test.aaa.com这个域名就可以利用这个跳转。

4.利用@绕过URL限制

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

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

  后面的test.com就是要跳转到的域名,前面的域名都是用来辅助绕过限制的。

5.多重验证&跳转绕过限制

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

  多重跳转的问题导致可绕过URL限制

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

6.点击触发达到绕过URL跳转限制

  比如很多登录页面的地方,其URL是一个跳转的URL,如:http://;www.aaa.com/acb?url=http://test.com。你直接修改了后面为任意URl,但是还是停留在原地,似乎没什么问题,但是,当你输入账号和密码后点击登录按钮后,就会触发跳转,当然,这个账户和密码不一定要对的,随便都可以,视系统而定。比如你修改了域名,然后点击登录,登录成功后便可触发跳转,这也是一个比较隐蔽的绕过URL限制的跳转。

7.利用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地址。

8.利用超链接绕过可信站点限制

  当然,这个影响就很小了,比如当你填什么表格或者需要填写什么的,当你上传图片,点击下一步的时候,通常下一步就是预览你填写的信息,最后才是提交,当你上传了图片后点击下一步抓包,如果过滤不严,你会看到图片的完整地址包含在POST参数里,你就可以直接修改这个地址为任意URL,然后到达下一步,这时是确定信息也就是预览自己填写的信息是正确还是不正确,由于你刚刚修改了图片地址,这里是没有显示出来的,图片会是一个小XX,当点击图片右键选择查看图像时,就会触发URL跳转问题,其实这个也可以利用来进行钓鱼,钓后台审核员的信息,为什么呢,比如审核员看到图片无法加载,一般都会点击查看图片,然后跳转,如果安全意识不知就会造成安全影响。

  当然,如果POST参数里就只是URL跳转参数,那么你就可以给它转成GET方式,然后进行跳转就可以了,只要网站支持这样的GET方式就行,在burpsuite里可以一键转换提交方式,右键选择change request methon就可以。

9.POST参数中的URL跳转

  比如一个URL,它是可以直接跳转的,但是一般测试跳转时习惯用www.baidu.com或qq.com这样的可信站点进行测试,但是有些网站是可以跳转这些网站的,只要是可信站点且常用,基本都可以跳转,那么这就属于正常的业务逻辑了。难道就这样错失一个URL跳转漏洞了?其实不然,只要你的URL被百度收录过,那么直接搜索你的域名,site:xxx.xxx 因为你在百度里点击你的域名,它会先是一个302跳转,而这个302跳转就是你百度下的302跳转,那么这样就可以绕过可信站点的限制,从而达到跳转到指定URL,当然,百度这个302有点长,你给它进行加密就行。

10.利用#号绕过

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

修复方案:

  我们需要对传入的URL做有效性的验证,保证该URL来自于正确的地方,限制的方式同防止csrf一样可以包括;

  1.referer的限制

  如果确定传递url参数进入的来源,我们可以通过该方式来实现安全限制,保证该url的有效性,避免恶意用户自己生成跳转链接

  2.加入有效性验证Token

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

URL跳转漏洞的更多相关文章

  1. url跳转漏洞(1)

    转载 https://landgrey.me/open-redirect-bypass/ 0x00:漏洞场景 URL跳转漏洞的出现场景还是很杂的,出现漏洞的原因大概有以下5个: 1. 写代码时没有考虑 ...

  2. Web安全之url跳转漏洞及bypass总结

    0x01 成因 对于URL跳转的实现一般会有几种实现方式: META标签内跳转 javascript跳转 header头跳转 通过以GET或者POST的方式接收将要跳转的URL,然后通过上面的几种方式 ...

  3. Url跳转漏洞常见

    Url跳转漏洞常见出现点: 1.用户登录.统一身份认证处,认证完后会跳转. 2.用户分享.收藏内容过后,会跳转. 3.跨站点认证.授权后,会跳转. 4.站内点击其它网址链接时,会跳转. Url跳转漏洞 ...

  4. PHP代码审计笔记--URL跳转漏洞

    0x01 url任意跳转 未做任何限制,传入任何网址即可进行跳转. 漏洞示例代码: <?php $redirect_url = $_GET['url']; header("Locati ...

  5. WEB安全番外第一篇--其他所谓的“非主流”漏洞:URL跳转漏洞与参数污染

    一.URL跳转篇: 1.原理:先来看这段代码: <?php if(isset($_GET["url_redircetion_target"])){ $url_redirect ...

  6. Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)

    影响版本 Django < 2.0.8 抓包 访问http://192.168.49.2:8000//www.example.com,即可返回是301跳转到//www.example.com

  7. URL重定向及跳转漏洞

    URL跳转漏洞 URL 跳转漏洞是指后台服务器在告知浏览器跳转时,未对客户端传入的重定向地址进行合法性校验,导致用户浏览器跳转到钓鱼页面的一种漏洞. 使用场景    现在 Web 登录很多都接入了QQ ...

  8. 安全测试4_客户端的安全漏洞(XSS、CSRF、点击劫持、URL跳转)

    那个fanh前面学习的都是基础,现在开始正式学习下安全的知识,这一章主要讲解客户端常见的安全漏洞. 看到这个不错,给大家记一下: 1.常见的安全事件: 2.XSS(跨站脚本),英文全称:Cross S ...

  9. [WEB安全]绕过URL跳转限制的思路

    0x00 简介 说起URL跳转漏洞,有些人可能会觉得,不就是单纯的跳转到某一个其他网页吗?有什么用??? 给大家一个链接,你们进去看一下就明白了: http://www.anquan.us/searc ...

随机推荐

  1. 我常用的前端开发工具—cutterman,mark man,sublime text,yeoman,gulp……

    虽然才刚刚开始练习切图,不过之前还是接触到不少工具的,决定一一用上,果然用了一天就切完了一个psd,对于一个菜鸟来说,还是很开心的. 我先从学ui网下载了一个psd.切图肯定是要用的ps的啦,这里和大 ...

  2. Python笔记(二十四)_魔法方法_运算符的魔法方法

    算数运算方法 .反运算方法 以对象A+对象B为例,都是将A作为self值,而B作为other值传入__add__(self,other)方法: 当用户输入A+B,就会调用重写的add方法: >& ...

  3. 【FICO系列】SAP 关于SAP中的记账码的解释

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP 关于SAP中的记账码的解 ...

  4. [13期]mysql-root全手工注入写马实例实战

    回显方便的小工具

  5. 在使用spring中的ContextConfiguration、test注解时出现的错误

    错误: 在使用测试注解时出现ContextConfiguration注解和test注解无法正常导包使用的编译异常,如图: 解决办法: 将pom.xml文件中以下依赖管理 中的<scope> ...

  6. 实现atoi

    1. 去掉首位空格 2. 判断首位是否有正负号 3. 判断各位是否是0~9,有其他字符直接返回当前结果   public class Solution { public int atoi(String ...

  7. dfs(枚举)

    http://codeforces.com/gym/100989/problem/L L. Plus or Minus (A) time limit per test 1.0 s memory lim ...

  8. docker私有仓库部署

    首先科普docker几种“仓库”概念,可分为:本地镜像,本地仓库,公有仓库(docker hub) 本地镜像:在把java程序打包成镜像,输出的镜像的位置就是本地镜像 公有仓库:一个叫docker h ...

  9. controller函数中参数列表使用多个@RequestBody

    首先出现这种情况是因为有下面这种需求 $.ajax({ type: "POST", url: "${pageContext.request.contextPath}/co ...

  10. 让Elasticsearch飞起来!——性能优化实践干货

    原文:让Elasticsearch飞起来!--性能优化实践干货 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog ...