从低危OAuth漏洞到高危存储型XSS
大家好,这篇文章将展示我最近发现的一个很酷的漏洞,让我们开始吧!
前不久,我对hackerone上的某个悬赏目标进行了一番研究,发现了一个Self-XSS漏洞(AngularJS模板注入)和一个OAuth的配置错误漏洞。这两个漏洞本身都是低危漏洞,不会造成很大的影响,但如果结合在一起,就会生成一个高危的存储型XSS漏洞!
出于安全等原因,我称这个目标网站为redacted.com
。
这个网站主要提供网络存储服务,就像Google Drive或DropBox一样。用户可以在这个网站上传、下载、共享他们的文件。
我经过一番摸索在上传文件的文件名处找到了一个XSS。只要你上传一个文件名如{{constructor.constructor(‘alert(1)’)()}}.jpg
这样的文件,那么你就会在上载文件的管理页面上看到XSS弹框。
很好!但可惜这只是一个Self-XSS。
当然,有一种简单的方法可以用它攻击其他用户,就是和受害者共享一个指向文件的链接,一旦受害者点击,攻击就会生效。但在这篇文章中,我将向你展示一种更有趣的利用方法。
在网站的设置中,我发现了一个从Dropbox导入文件的功能。为了使用这个功能,你需要通过OAuth将你的Dropbox帐户和这个网站绑定。
为了方便理解,我将快速解释一下这个OAuth流程。
- 首先,用户单击
Connect Dropbox
按钮,浏览器就会发出如下GET请求(https://dropbox.com/oauth2/authorize?client_id=***********&response_type=code&state=****************&redirect_uri=https%3A%2F%2Fwww.redacted.com%2Faccount%2Fsettings%2Fdropbox-callback
) - 然后用户被重定向到Dropbox,登录帐户并授予访问权限。
3.单击上图的“Allow”后,包含状态参数和身份验证码的GET请求将被发送到redacted.com
,如下图所示。
4.一旦redacted.com
接收执行这个GET请求,Dropbox将同步当前用户的session,并将其存储的所有文件导入redacted.com
。
当我测试以上OAuth流程时。尝试把我的Dropbox帐户和其他redacted.com
用户绑定在一起,一开始时我觉得这应该不难。
重定向的uri被列出来了,状态参数也在那里,虽然身份验证码不能使用两次,但是我仍然测试了状态参数,发现验证过程时和当前用户的session的有关联。
所以,我不能简单地给其他redacted.com
用户发送链接https://www.redacted.com/account/settings/dropbox-callback?state=********code=**********
来攻击。但是,出于好奇,我删除了状态参数,以其他用户身份点击了https://www.redacted.com/account/settings/dropbox-callback?code=**********
,我惊讶的发现,我的Dropbox帐户成功绑定到其他帐户。
所以,最终,我可以通过一个GET请求将我的Dropbox帐户与任何人的redacted.com
帐户绑定到一起。你可能会问,这有什么用?又不可以使用Dropbox帐户登录redacted.com
,系统没这个功能。
但是,结合上一个XSS漏洞,我可以形成如下攻击链。
利用场景
往Dropbox上传一个文件名为
{{constructor.constructor(‘alert(1)’)()}}.jpg
的文件。将如下恶意URL,分享给受害者
https://www.redacted.com/account/settings/dropbox-callback?code=**********
受害者一旦点击,就会绑定到我的Dropbox帐户,并自动从Dropbox导入所有文件,包括那个恶意XSS文件。
当用户访问上载的文件的管理页面时,XSS便攻击成功了。
总的来说,服务器只会在状态参数存在的情况下进行参数验证,如果不存在状态参数,那就直接下一步。
我们可以猜测后端验证逻辑如下:
if(isset($_GET['state'])){
if($_GET['state'] != current_user_state)
ACCESS DENIED
exit()
}
ACCESS GRANTED
如上所述,一个利用OAuth漏洞来实现存储型XSS的攻击手法就完成了。
最后欢迎大家关注我的推特!
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@nahoragg/chaining-tricky-oauth-exploitation-to-stored-xss-b67eaea4aabd
最新评论