扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
大家好,在这篇博客文章中,我将通过与我的朋友 Refaat的合作,演示如何发现 Google SSO 用户的账户接管(ATO)。
这个账户接管是多个漏洞链的组合,让我们逐一探讨每个漏洞的细节
DOM XSS
这个 DOM XSS 漏洞位于一个棘手的位置。由于存在强力的 WAF(Web 应用防火墙),因此创建完整的攻击利用链非常具有挑战性。
获取 CSRF Token
在发现 XSS 漏洞后,我们知道任何攻击链都需要在请求中包含 CSRF token。获取 CSRF token 很简单,因为它位于个人资料页 https://taget.com/profile
的 meta 标签中。为了获取任何用户的 CSRF token 并将其随请求发送,可以使用以下脚本:
var xhr = new XMLHttpRequest();
theUrl = 'https://target.com/profile'
token = ''
xhr.open("GET", theUrl, false);
xhr.onload = async () => {
const parser = new DOMParser();
const data = parser.parseFromString(xhr.response, 'text/html')
token = data.getElementsByName('csrf-token')[0].content
解除 Google 账户绑定
此时,由于我们拥有 CSRF token,已经能够通过 XSS 发送任何经过身份验证的请求。然而,要实现账户接管(ATO),我们需要一个可以更改密码或电子邮件的请求。遗憾的是,我们发现的所有可能导致更改密码或电子邮件的请求都是安全的,且没有绕过的方法。
经过一段时间,我们发现了一些非常有趣的事情。我们发现用户可以使用 Google SSO 注册账户。当使用 Google SSO 登录时,用户可以选择解除与 Google 账户的绑定。这使得他们可以改为使用电子邮件和密码登录,而不再依赖 Google SSO。
当他们点击 继续
时,一组六位数的 OTP(一次性密码)将被发送到他们的电子邮件地址。
输入 OTP(六位数代码)后,用户可以直接设置新密码。
在这里,我们发现了一个漏洞:由于缺乏速率限制,OTP 代码可以通过暴力破解获得。
利用 XSS,我们可以通过向“解除 Google 账户绑定”发送请求并暴力破解 OTP,从而接管任何使用 Google SSO 登录的账户。一旦找到了正确的 OTP,我们便可通过正确的 OTP 发送设置新密码的请求。所有这些操作都可以利用泄露的 CSRF token 完成。
注意:我们没有将 2FA 绕过作为漏洞链的一部分进行报告,而是演示了使用另一功能的组织接管。我们在单独的报告中提交了 2FA 绕过问题,因为账户接管(ATO)无论是否绕过 2FA,其严重性都是相同的(高)。
以上内容由白帽子左一翻译并整理。原文:https://7odamoo.medium.com/account-takeover-for-google-sso-users-b50f99b49f0d
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,即可加入。