zseano 07v8论安全
跟zseano大牛一起做漏洞赏金猎人系列教程之教程一:开放 URL 重定向
本系列教程编译自漏洞赏金项目大牛@zseano的博客:https://zseano.com
https://zseano.com/tutorials/1.html
前言
@zseano是一位来自英国的安全研究者,在漏洞赏金平台Bugcrowd有着不错的成绩(目前排名第2)。他擅长Web渗透测试,目前也活跃在Hackerone和Synack等平台。他自己这样说道:我喜欢帮助别人,因为每个人的目的都是不同的,所以我觉得跟他人合作来获得一些很酷的新想法是非常有趣的。我对保护这个互联网世界充满了热情。
个人觉得@zseano真的挺棒的,首先技术实力没得说,其次能够把好的想法以及自己的一些经验分享给大家,不仅符合黑客的侠义精神,还能推动大家一起做好安全这件事,为他点赞!
下面是一些@zseano写的帮助其他研究人员挖掘漏洞的教程。 这里面讨论了各种主题,例如通过FacebookOauth和公共区域更改开放的URL重定向到账户接管,以发现IDOR(不安全的直接对象引用)漏洞。他本人计划发布更多教程,所以感兴趣的伙伴请记得常去访问他的博客哟。
正文
https://www.example.com/?go=https://www.google.com/
嗯,让我们开始实战吧!找一个开放URL重定向和一个常见的地方试试。我们试试在Google里面使用site:example.com inurl:redirect,看看能发现什么。当然,我们还能使用更多的普通重定向词语,比如
什么都没发现?别灰心,让我们从目标站点开始并看看常见的地方。从我的经验来看,容易出现该漏洞的地方通常是这些页面:
|
|
假设这次我们起码能找到一处开放URL重定向,如果没有,那就继续找下去!;)现在我们找到一处漏洞,是该立马提交还是用它来干点其他的事呢?从我的经验来看,我总是会继续深入,所以建议你也这样做!以下是一些能用该漏洞继续升入挖掘的常见手段:
- 开放URL跳转 -> 通过错误配置的Facebook客户端窃取Facebook Oauth令牌(凭证)
- 开放URL跳转 -> 使用Facebook接入令牌来接管(第三方)账户
- 开放URL跳转 -> DOM XSS
通过错误配置的Facebook客户端窃取Facebook Oauth令牌(凭证)
Facebook通过使用类似 appsecret_proof
这种功能,在保护用户的接入令牌(access_token
)方面做得很不错,但是很遗憾,用户基本不去使用这项功能。在黑客眼里,Facebook的Oauth系统相当简单:提供一个客户端ID(client_id
)和一个白名单中的重定向URI(redirect_uri
)即可获得令牌(token
)。
注解:使用&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令牌的站点)。
说好的技巧呢?URL编码。没错,如果我们给Facebook 添加&
redirect_uri=https%3A%2F%2Fzseano.cbssports.com%2F%3Fgoto%3Dhttps%3A%2F%2Fwww.google.com%2F,那么它就会跟着重定向到你的站点,这样你就可以收获他们的fb Oauth令牌啦!:)
那么FB Oauth令牌能干嘛呢?根据Facebook的说明,可以做很多事。我们可以查询他们的邮件,在涂鸦墙上发帖(如果有正确的权限),反正一大堆。因为他们访问我们的站点,我们就可以窃取他们用户的邮件,那么我们的开放URL重定向是不是就有意义了呢?
使用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 就是最常见的一个!)
绕过过滤器(Filter)的方法
使用原来的 ?redirect=javascript:alert(0); 有时候也能起作用,尤其是遇到SWF文件的时候。(site: example.com inurl:?clickTag=ext:swf 就是最常见的一个!)
绕过过滤器的方法
每个开放URL重定向都不同,但是这里是一些我成功执行重定向 / XSS 的payload。
|
|
嗯……这样我们就达到了目的。我希望大家都能喜欢第一篇教程,并且从中学到一些关于开放URL重定向的新东西,并让他们变得有价值。