首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跟zseano大牛一起做漏洞赏金猎人系列教程之教程一:开放 URL 重定向

欢迎关注:07v8论安全,技术干货等你来

这是07v8的第1篇技术文章,希望对你有用

跟zseano大牛一起做漏洞赏金猎人系列教程之:开放URL重定向

作者:@zseano

翻译:cnRay

* 本文参与双dan投稿活动

本系列教程编译自漏洞赏金项目大牛@zseano的博客:https://zseano.com

@zseano是一位来自英国的安全研究者,在漏洞赏金平台Bugcrowd有着不错的成绩(目前排名第2)。他擅长Web渗透测试,目前也活跃在Hackerone和Synack等平台。他自己这样说道:我喜欢帮助别人,因为每个人的目的都是不同的,所以我觉得跟他人合作来获得一些很酷的新想法是非常有趣的。我对保护这个互联网世界充满了热情。

个人觉得@zseano真的挺棒的,首先技术实力没得说,其次能够把好的想法以及自己的一些经验分享给大家,不仅符合黑客的侠义精神,还能推动大家一起做好安全这件事,为他点赞!

下面是一些@zseano写的帮助其他研究人员挖掘漏洞的教程。 这里面讨论了各种主题,例如通过FacebookOauth和公共区域更改开放的URL重定向到账户接管,以发现IDOR(不安全的直接对象引用)漏洞。他本人计划发布更多教程,所以感兴趣的伙伴请记得常去访问他的博客哟。

开放URL重定向简单说就是像下面这个链接这种形式的,当该链接被访问的时候会从example.com跳转到google.com。通常这种漏洞被评为低危,但是我们能利用其接管账户吗?

https://www.example.com/?go=https://www.google.com/

嗯,让我们开始实战吧!找一个开放URL重定向和一个常见的地方试试。我们试试在Google里面使用site:example.cominurl:redirect,看看能发现什么。当然,我们还能使用更多的普通重定向词语,比如

inurl:go, inurl:return, inurl:returnTo

什么都没发现?别灰心,让我们从目标站点开始并看看常见的地方。从我的经验来看,容易出现该漏洞的地方通常是这些页面:

login, register, logout,

changesite language,links in emails

假设这次我们起码能找到一处开放URL重定向,如果没有,那就继续找下去!;)现在我们找到一处漏洞,是该立马提交还是用它来干点其他的事呢?从我的经验来看,我总是会继续深入,所以建议你也这样做!以下是一些能用该漏洞继续升入挖掘的常见手段:

1 通过错误配置的Facebook客户端窃取Facebook Oauth令牌(凭证)

Facebook通过使用类似appsecret_proof这种功能,在保护用户的接入令牌(access_token)方面做得很不错,但是很遗憾,用户基本不去使用这项功能。在黑客眼里,Facebook的Oauth系统相当简单:提供一个客户端ID(client_id)和一个白名单中的重定向URI(redirect_uri)即可获得令牌(token)。

案例

https://www.facebook.com/dialog/oauth?client_id=388795771235143&response_type=token&redirect_uri=https://www.cbssports.com/&scope=email

注解:使用&response_type=code或response_type=token能实现不同的结果。

想象一下,在zseano.cbssports.com这个站点上我们发现了一处开放URL重定向。如果我们输入&redirect_uri=https://zseano.cbssports.com/并且被它接受了——那就太好了!如果没有被接受,也别灰心,试试https://www.cbssports.com/test/这种。如果仍然不行,那么说明这个站点是安全的。但是能行,那么只能是http://www.cbssports.com/*这种。

现在我来讲一下在Facebook的Oauth系统这个案例中用到的技巧。如果你给Facebook提供一个&redirect_uri=https://zseano.cbssports.com/?goto=https://www.google.com/,那么它不会跟着重定向到你的站点(也就是你用来窃取他们Oauth令牌的站点)。

那么FB Oauth令牌能干嘛呢?根据Facebook的说明,可以做很多事。我们可以查询他们的邮件,在涂鸦墙上发帖(如果有正确的权限),反正一大堆。因为他们访问我们的站点,我们就可以窃取他们用户的邮件,那么我们的开放URL重定向是不是就有意义了呢?

2 使用Facebook接入令牌来接管账户

这个漏洞不仅是能查询他们Facebook信息那么简单。用你的手机看看这个站点是不是还有一个APP,9成的APP都有一个“使用Facebook登录”的按钮并且从我的经验来看,使用他们的FB app登录(包括注册)时,他们会做以下的事:

- 获取我的Facebook接入令牌

- 将其发送到他们的服务器并交换不记名令牌

- 在所有的调用(基本上是我的会话)中使用这个令牌

那么你一直跟着我看到这里了吗?我测试过的APP基本上允许我将用户重定向到Facebook oauth对话框屏幕,重定向到我的网站并劫持他的令牌,然后查询实际站点的移动api系统作为……的交换令牌,你猜对了,受害者帐户。

其他值得看看的常见地方是“关联”到Facebook账户的账户设置。

所以,我们刚刚将一个“无害的”开放URL重定向变成了一个能接入受害者账户的权限。当然每个开放URL重定向都不同,但这是我经常关注的关键部位(而且一般都能成功!)。

还能做其他的吗?

开放URL重定向在一些方面也能用来XSS攻击。让我们探讨一下下面的案例。

如你所见,我们首先找到一处开放URL重定向,而且能执行XSS攻击。如果我们输入";alert(0);// 会发生什么呢?(我们使用”;来结束varredirectToUrl="";变量,然后使用 // 注释掉最后的”;—如果不是JavaScript就只能抱怨了。在一般的脚本标签上使用这个也能绕过chrome的xss auditor :D)

耶!成功啦! :D.

使用原来的 ?redirect=javascript:alert(0); 有时候也能起作用,尤其是遇到SWF文件的时候。(site: example.com inurl:?clickTag=ext:swf 就是最常见的一个!)

绕过过滤器的方法

每个开放URL重定向都不同,但是这里是一些我成功执行重定向 / XSS 的payload。

java%0d%0ascript%0d%0a:alert(0)

(用crlf攻击来绕过JavaScript:被加入黑名单)

//google.com

(以防http:// 被加入黑名单)

https:google.com

(在浏览器接受的情况下,如果 // 被加入黑名单,那么用这个就很棒!)

//google%E3%80%82com

(%E3%80%82是。的编码。十分感谢filedescriptor向我展示这个。)

\/\/google.com/

(对于绕过// http://黑名单十分有效。浏览器把\/\/看作是//)

/\/google.com/

(同上)

//google%00.com

(null 字节在任何地方都能用来绕过黑名单过滤器)

(老掉牙啦,但是浏览器会重定向到@后面的任何东西)

http://www.yoursite.com/http://www.theirsite.com/

(如果@被加入到黑名单而且他们还检查了他们的域名是否在参数里,那么久建一个目录作为他们的域名 :D)

";alert(0);//

(这是从上面的例子得来的。如果url在变量中响应而且我们想在脚本标签中执行xss的话。)

嗯……这样我们就达到了目的。我希望大家都能喜欢第一篇教程,并且从中学到一些关于开放URL重定向的新东西,并让他们变得有价值。

07V8 字温说

原文作者zseano是一个技术强硬且具有分享精神的真正的大佬,他对URL重定向的理解非常深入,这也是他不断实验研究探索的成果。这里也把他自己的一些payload提供给大家,供学习研究,希望大家能有所收获。感谢翻译者cnRay时间和精力的付出,与大家一起分享技术,以及对07V8的支持,此系列教程会持续更新,请继续关注!

更多干货,敬请关注

精彩活动尽在服务号技术干货尽在订阅号

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171225G02KZE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券