黑盒测试 | 挖掘.NET程序中的反序列化漏洞

news2024/9/20 16:10:06

通过不安全反序列化漏洞远程执行代码

图片

img

今天,我将回顾 OWASP 的十大漏洞之一:不安全反序列化,重点是 .NET 应用程序上反序列化漏洞的利用。

📝$ _序列化_与_反序列化

序列化是将数据对象转换为字节流的过程,字节流可以存储在文件、内存和数据库中,或者通过网络、在应用程序的不同组件之间以及在 API 调用中发送。

反序列化是相反的过程;它将流字节恢复到对象被序列化之前的原始状态。

不安全的反序列化正在传递可被应用程序解释的受操纵的序列化对象,从而导致其控制。该漏洞的影响范围从拒绝服务攻击、绕过身份验证到任意代码执行。

与任何安全漏洞一样,核心问题是应用程序端缺乏对用户输入的验证,而应用程序端盲目信任发送给它的数据。在解析数据并对其采取行动之前,没有实施适当的检查。

$_Exploitation_Demo

我选择了 Hack The Box 中的 JSON 关卡来演示 .NET 应用程序的不安全反序列化。

💭我的 Web 应用程序测试方法首先将请求分为三个部分:

手动模糊应用程序并使用 Burp Suite 仔细观察响应。我通常专注于通过更改、删除或修改值来测试发送到应用程序的每个参数。

有意生成错误消息,以查看应用程序是否会显示可见的错误,从而公开一些后端信息,帮助我了解应用程序的结构。

扫描目录和端点。

图片

img

图片

img

我通过 Burp Suite 代理发送请求来检查应用程序。我注意到日志记录请求被发送到“api/token”路由,以在授予访问令牌(Bearer Token)之前检查用户名和密码。

此外,所有数据均以 JSON 形式发送。

我将请求发送给Repeater进行进一步调查。由于我没有密码,因此我传递了随机值来观察应用程序的响应。正如我们从下面的屏幕中看到的,该用户不存在。

图片

img

通过向“ api/token”发送一个空请求来继续模糊测试过程,看看我是否仍然会收到“用户不存在”错误的相同错误。相反,应用程序返回了 500 错误响应,揭示了有关应用程序语言及其部署位置的一些有用信息;耶!!!!

根据显示的错误,用户名是admin。

图片

img

我尝试使用 admin/admin 登录,并且成功了。但该关卡并不是考察弱口令,而是展示信息泄露和不安全反序列化漏洞。

回到我们的demo……

图片

img

登录后,我注意到“api/Account”请求中添加了两个参数- Bearer token 和 OAuth2 Cookie 。这两个值均以 Base64 编码。

💡 Bearer Token 是与 OAuth 2.0 授权框架一起使用的访问令牌,用于授予对受保护资源的访问权限,而不是直接使用所有者的凭据。—RFC 6750 — OAuth 2.0 授权框架[1]

图片

img

💡不安全反序列化的主要标志之一是使用 base64 编码的序列化对象并将其放入 cookie 中。当 Cookie 返回到应用程序时,它会对其进行反序列化并执行其内容。没有用于检查不可信数据的安全/安全控制。

为了确定哪个参数获取应用程序解析的内容,我为每个参数传递了不同的值。正如您所看到的,应用程序根本不检查 Cookie。它只寻找 Bearer Token值。

图片

img

图片

img

图片

img

确认反序列化错误的另一种方法是发送格式错误的 JSON 请求并查看应用程序如何响应它。我在请求中随机添加了第二个双引号,对其进行编码,然后将其发送到应用程序。

图片

img

图片

img

正如您所看到的,应用程序返回了一个反序列化错误,说明失败的原因以及期望的序列化类型。

失败,因为无法解析格式错误的 JSON 对象

预期的序列化类型是 JSON.NET

😈 $_Paylaod_Time

现在我们开始进行漏洞利用。我们知道Bearer token是易受攻击的参数;理论上,我们发送给它的任何 JSON 数据都应该被解析。为了检查这一点,我发送了一个简单的 ping 请求来确认我们在机器上执行了任意代码。

由于应用程序正在寻找 JSON.NET 对象,因此我们可以使用Alvaro Muñoz开发的名为ysoserial.net:https://github.com/pwntester/ysoserial.net的工具来创建所需的对象。他的 GitHub 存储库提供了使用该工具的优秀示例。

注意:此工具在 Windows 计算机上效果最佳。

图片

img

图片

img

我使用 Base64 对请求进行编码,并启动tcpdump来侦听 ICMP 数据包 [echo requests]。当我将编码的有效负载传递给应用程序时,我立即收到了机器的响应,验证了我们执行代码的能力。

图片

img

图片

img

从这里,我们可以使用NetcatNishang Powershell来反弹shell。我选择了Nishang TCP on-liner。

图片

img

图片

img

图片

img

正如我们所看到的,精心设计的payload被反序列化并执行,应用程序没有进行验证检查以防止此类攻击。影响是远程代码执行。

✏️ $预防&建议:

•如果可能,请停止使用序列化 😐

•使用HMAC签名等数字签名来检查传递的数据是否未被篡改。

•在序列化并发送到应用程序之前始终验证用户输入并清理数据

这就是本教程的全部内容。感谢您的阅读!

无偿获取网络安全优质学习资料与干货教程

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

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

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

相关文章

Entity更新坐标不闪烁需采用setCallbackPositions方法赋值

问题描述: 1.new mars3d.graphic.PolygonEntity({在更新点位高度模拟水面上身的时候,会存在闪烁 2.当把addDemoGraphic4添加到图层后,addDemoGraphic1水位变化不闪烁,把addDemoGraphic4注释后,addDemoGraphic1闪烁。…

UI自动化测试的边界怎么定义?

标题:定义UI自动化测试的边界:从0到1的详细指南 引言: UI自动化测试是现代软件开发过程中至关重要的一环。为了确保自动化测试的有效性和准确性,我们需要明确定义测试的边界。本文将从0到1为您提供一篇详细且规范的指南&#xf…

基于YOLOv8/YOLOv9/YOLOv10的河道漂浮物检测识别系统

摘要: 河道漂浮物检测识别是指利用技术手段自动识别河流、湖泊等水体表面的漂浮垃圾或物体的过程。随着环境保护意识的增强和技术的进步,河道漂浮物检测已经成为水环境保护和管理的重要组成部分。这项技术的应用可以帮助及时发现污染源,采取措…

一些线上常用排查问题的命令

排查CPU过高时使用到的一些命令 top free df top命令 top 命令是一个动态的实时视图,显示系统的整体运行状况,包括 CPU 使用率、内存使用情况、进程信息等。 free 命令 free 命令用于显示系统中物理内存和交换内存的使用情况。 df 命令 df 命令用…

纯前端表格导出Excel

先写好两个js文件 直接复制粘贴 文件目录是这样的 Bolb.js /* eslint-disable */ /* Blob.js* A Blob implementation.* 2014-05-27** By Eli Grey, http://eligrey.com* By Devin Samarin, https://github.com/eboyjr* License: X11/MIT* See LICENSE.md*//*global self, …

Vuex 入门与实战

引言 Vuex 是 Vue.js 官方推荐的状态管理库,它可以帮助我们更好地管理 Vue 应用的状态。在大型应用中,组件之间的状态共享和通信是一个非常重要的问题,而 Vuex 提供了一种优雅的解决方案。 在 Vue 应用中,数据的流动一般是单向的…

PCA贡献率

什么是 PCA? PCA(Principal Component Analysis, 主成分分析)是一种常用的数据降维技术。它通过找到一组新的互不相关的正交轴(主成分),将高维数据映射到低维空间。这些新轴是按照数据的方差大小排列的&am…

让Tkinter更美观:教你同步Tkinter窗口与弹窗图标(Tkinter同步主窗口与Messagebox的图标)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 步骤1:主窗口图标📝 步骤2:messagebox 图标📝 示例代码📝 实现原理与代码解释⚓️ 相关链接 ⚓️📖 介绍 📖 你有没有注意到,在开发软件图形界面时,会需要弹出一些提示框,而这些提示框的图标总…

阿里国际发布最新版多模态大模型Ovis,拿下开源第一

看一眼菜品图就知道怎么做、能给植物看病、能把手写英文准确翻译成中文、还能精准分析财报数据……多模态能力再次升级!阿里国际AI团队发布了一款多模态大模型Ovis,在图像理解任务上不断突破极限,多种具体的子类任务中均达到了SOTA&#xff0…

【Linux】-----进程第一弹

目录 概念 描述进程-PCB 查看进程 获取进程标识符 终止进程 fork创建进程 返回值说明 进程的状态 ①运行状态(R) ②浅度睡眠(S) ③深度睡眠(D) ④暂停状态(T) ⑤僵尸状态(Z)(重点) 是什么? 举例 危害 孤儿进程 ⑥死亡状态(X) 概念 课本上对于进程…

如何保护电脑文件夹?多种方法保护数据安全

在数字化时代,电脑中的文件夹往往存储着我们最私密、最重要的数据,如个人文档、照片、工作资料等。因此,保护这些文件夹免受未经授权的访问、盗窃或损坏变得尤为重要。本文将介绍多种方法来有效保护电脑文件夹及其数据安全。 文件夹保护3000 …

MySQL中的比较条件

符号!也能够表示不等于条件。 示例一:查询employees表中员工薪水大于等于3000的员工的姓名与薪水。 select l ast_name,salary from employees where salary > 3000; 示例二:查询employees表中员工薪水不等于5000的员工的姓名与薪水。 select las…

人工智能在肿瘤浸润淋巴细胞研究中的最新进展|文献速递·24-09-20

小罗碎碎念 文献速递|目录 一、胆道癌治疗应答的新型AI生物标志物:肿瘤浸润性淋巴细胞的空间分布 补充文献:22年发表于JCO的一篇类似文献 二、生物标志物在肝细胞癌管理中的作用:从发现到临床应用 三、肿瘤样本中免疫细胞浸润水…

C语言进阶【5】---数据在内存中的存储【2】(小数存储很难吗?)

本章概述 本章引要练习 浮点数的存储浮点数的取出小补充题目解析彩蛋时刻!!! 本章引要 常见的浮点数:3.1415,1E10等。其中,1E10是科学计数法的形式,它也就等于1*10^10。小数数据类型&#xff1…

块匹配算法简介(上)

图像中的运动估计方法大致分为两类:光流法和块匹配算法(BMA,Block Matching Algorithm)。本文将介绍BMA的相关内容,包括基本原理、相似度计算准则与常见的几种搜索方法,如三步法、四步法、钻石搜索法等。 1. 背景 视频中相邻帧往往存在大量的相似内容,即只有局部的一些…

【CustomPainter】渐变圆环

说明 实现一个渐变圆环,起点位置为- π / 2。 效果 源码 GradientCircularPainter1 class GradientCircularPainter1 extends CustomPainter {final double progress;GradientCircularPainter1(this.progress);overridevoid paint(Canvas canvas, Size size) {c…

零基础到项目实战:Node.js版Selenium WebDriver教程

在当今数字化时代,Web应用程序的质量和性能至关重要。为了确保这些应用的可靠性,自动化测试成为一种不可或缺的工具。Selenium,作为自动化测试领域的瑰宝,为我们提供了无限可能。本教程将深入介绍Selenium,以及如何结合…

如何删除EXCELL文件中的空行?

1,选择某一列 2,点击《开始》《查找和选择》>《定位条件》,调出《定位条件》的选择框; 3,在定位条件选项框,选择《空值》; 4,找到变灰被选中的某一行,右击《删除》 5&…

配置管理之configmap

一 、云原生要素——配 置分离 ConfigMap:存储明文配置 Secret:存储密文、敏感配置、用户重要信息和密码 等。 配置更新直接同步容器,热加载,无需重启pod或者容 器;镜像和配置分离,可单独修改发布 二、ConfigMap 1.…

详细分析Pytorch中的register_buffer基本知识(附Demo)

目录 1. 基本知识2. Demo3. 与自动注册的差异3.1 torch.nn.Parameter3.2 自动注册子模块3.3 总结 1. 基本知识 register_buffer 是 PyTorch 中 torch.nn.Module 提供的一个方法,允许用户将某些张量注册为模块的一部分,但不会被视为可训练参数。这些张量…