URL跳转(开放重定向)挖掘技巧及实战案例全汇总

1、概念:

开放重定向(Open Redirect),也叫URL跳转漏洞,是指服务端未对传入的跳转url变量进行检查和控制,导致诱导用户跳转到恶意网站,由于是从可信的站点跳转出去的,用户会比较信任。URL形如:

https://example.com/login?return=https://mysite.com/,后端代码形如:

response.sendRedirect(request.getParameter("url"))。

2、漏洞原理:

URL跳转三种实现方式:

  • META标签内跳转
  • javascript跳转
  • header头跳转

观察响应包,每种跳转方式对应的漏洞和利用方法也不同。

漏洞产生原因:

1. 代码层忽视URL跳转漏洞,或不知道/不认为这是个漏洞;

2. 代码层过滤不严,用取子串、取后缀等方法简单判断,代码逻辑可被绕过;

3. 对传入参数操作(域名剪切/拼接/重组)和判断不当,导致绕过;

4. 原始语言自带的解析URL、判断域名的函数库出现逻辑漏洞或者意外特性;

5. 服务器/容器特性、浏览器等对标准URL协议解析处理等差异性导致被绕过;

3、漏洞危害

URL跳转漏洞本身属于低危漏洞,但可以结合其他漏洞加以深入利用,主要的利用方式不仅限于钓鱼攻击,包括:

  • xss漏洞:通过javascript:alert(0)或CRLF;
  • 获取用户权限(伪造钓鱼网站、窃取登录凭证token);
  • 绕过检测(窃取CSRF token,绕过SSRF、RCE黑名单);
  • 高级利用方法(配合其他功能/漏洞)。

利用姿势不局限于上述几种,不要思维定势,具体看下面的实例。

4、实战案例

1、登录后重定向泄露会话令牌

redirect_url参数未经任何过滤,在登录后界面,请求链接:

https://mijn.werkenbijdefensie.nl/login?redirect_url=https://google.com,页面会被重定向到:

https://www.google.com/?user=xxx&token=xxxx&channel=mijnwerkenbijdefensie

导致用户ID和会话令牌泄露,从而接管整个账号。

Tips:关注登录后的登录请求url。

2、hboeck登录重定向及绕过

登录处重定向,访问:

https://tt.hboeck.de/public.php?return=http%3a%2f%2fevil.com%2f&op=login&login=password=&profile=0

随后hboeck修复了这个漏洞,但可以通过添加//进行绕过:

https://tt.hboeck.de/public.php?return=%2f%2f%2fevil.com%2f&op=login&login=password=&profile=0

Tips:有过滤时可以尝试多加一个或几个/。

3、chaturbate购买成功重定向

在购买成功后页面会发生跳转,但对于参数prejoin_data未做验证,访问:

https://64.38.230.2/tipping/purchase_success/?product_code=4137&prejoin_data=domain%2Fevil.com,页面会被重定向到:

https://evil.com/tipping/purchase_success/?product_code=4137。

Tips:关注业务结束后的跳转,这是容易忽视的一个测试点。

4、Hackerone特殊的跳转

当用户访问:

www.hackerone.com/index.php/index.phpxyz时用户将被重定向到www.hackerone.comxyz

访问链接:

http://www.hackerone.com/index.php/index.php.evil.com,用户将被重定向到www.hackerone.com.evil.com。所以每个系统的跳转机制不一样,在渗透时要尽量尝试各种可能发生跳转的请求。

5、Twimg重定向

Twitter 视频链接处:

https://t.lv.twimg.com/live_video_stream/authorized_status/883213898672783361/LIVE_PUBLIC/DEHOXIMUQAEbRFW?url=https://google.com/&ctx...&noredirect=false

关注参数&noredirect=,将参数从true改为false,可以重定向到任意站点。

Tips:关注任何场景下请求中的布尔型参数。

6、Twitter xss

访问Twitter链接:

https://dev.twitter.com/https:/%5cblackfan.ru/,页面回显为:

观察回显在返回头和返回主体,构造payload:

https://dev.twitter.com//x:1/:///%01javascript:alert(document.cookie)/

7、Digits callback_url参数绕过

Digits在登录成功后会通过HTTP 302重定向到业务界面,将登录凭证通过callback_url回调:

https://www.digits.com/login?consumer_key=9I4iINIyd0R01qEPEwT9IC6RE&host=https://www.digits.com&callback_url=https://www.periscope.tv若修改修改此参数为attacker.com,域名不在注册域内,系统会拒绝访问,此时可通过fuzzing探测后端检测机制,看是否可以绕过。

经测试发现系统只验证host值,一个常用的技巧是通过@绕过,@符之前的为认证凭据,@后为主机名,没有绕过。但经测试如果URL中包含一个ASCII码,会将非ASCII码转为?,这里输入https://attacker.com%ff@www.periscope.tv,可以成功绕过检测,?后的内容都会被解析为参数,从而跳转到attacker.com

8、Uber跳转的奇技淫巧

这是Orange发现的一个漏洞,这里写一下发现,扩展思路:

Uber内发现一个跳转链接:

http://pages.et.uber.com/Redirect.aspx?EQ=5c591a.....2406bd798a7f8312fde3acd3757bd120dfa0e40f3acb1e99e66c

EQ参数显然是加密后的参数,看起来像CBC模式加密,块大小是8,然后发现另一个链接:

https://pages.et.uber.com/hangzhou1year/?uuid=1234

在请求这个页面的时候,查看源代码会发现它的链接为:

https://pages.et.uber.com/Redirect.aspx?EQ=5c591a8916642e73e...d798a7f8312fde3acd3757bd120dfa025d290b1cf9a6e85

所以我们可以把要跳转的@attacker.com/?在此处进行加密,粘贴到参数处,最终跳转地址形如:https://uber.com@attacker.com/?a=1,成功跳转。

进一步可以触发xss:

data:text/html base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K

Tips:跳转功能参数可能经过加密,尝试发现encode算法。

9、upload导致的重定向

Slack存在重定向漏洞:https://slack.com/checkcookie?redir=http://www.example.com,后成功修复,但存在文件上传功能,上传redirect.svg:

获取文件链接:

https://slack.com/checkcookie?redir=https://files.slack.com/files-pri/T0E7QLVLL-F0G41EG2W/redirect.svg?pub_secret=7a6caed489,用户点击连接,重定向到example.com。

这里也可以上传一个完整的html文件达到相同攻击效果:

10、Xss导致的重定向

一次对xss的挖掘过程中,发现输入的字符<>都做了过滤,只剩双引号:

这里输入payload:

1;url=http://www.baidu.com"http-equiv="refresh,meta标签内闭合双引号,成功定向到baidu:

5、挖掘技巧

在实际渗透过程中,可以在抓包历史中搜索返回状态码为302的请求包,业务层面,根据之前的挖掘经验,大多数的跳转漏洞都发生在登录功能处,其他存在漏洞的功能处有:注册、注销、改密,第三方应用交互,页面切换,业务完成跳转、返回上级、账号切换、保存设置、下载文件等等。

总体来讲,要观察哪些功能需要进行跳转,并关注任何涉及跳转操作的URL,常见的参数值有return、redirect、url、jump、goto、target、link、callback等,输入任意URL地址看是否可以任意跳转,若后台进行过滤,探测过滤算法,尝试过滤绕过。

6、过滤绕过

首先要确定系统的过滤规则,进行针对性的绕过,简单列举几个实用的方法:

1、/\attacker.com;

2、// attacker.com或//// attacker.com;

3、whitelist.com@ attacker.com;

4、//%2F/attacker.com

5、# attacker.com或? attacker.com

6、更改url形式:ip、进制数、更换/缺失协议

7、白名单检测绕过:

1)结合上传等功能,链接到域内地址;

2)利用超链接,搜索引擎或二级参数,如hackerone的外链跳转案例:

7、防御手段

1、最有效的方法之一就是使用白名单严格控制将要跳转的域名,如:

function checkURL ( sURL) {

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

2、限制referer、添加token,这样可以避免恶意用户构造跳转链接进行散播;

本文分享自微信公众号 - 卓文见识(zhuowenjianshi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券