​.NET一款反序列化执行命令的白名单工具

01阅读须知

此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面

02基本介绍

Sharp4AddUtil.exe 是一款用于管理和配置 Microsoft Office 加载项的 Windows 系统实用工具,具备了微软签名,属于系统白名单文件。一般用于帮助用户和开发者进行加载项的安装、卸载和修复,提供了一种简便的方式来处理 Office 加载项相关的问题。尽管 Sharp4AddUtil.exe 提供了多种便利功能,但它也存在严重的反序列化漏洞。这一漏洞允许攻击者利用该工具加载恶意的载荷,可能导致系统受到威胁。

图片

03使用方法

首先,通过TextFormattingRunProperties链路,生成一个包含反序列化Poc的攻击载荷,载荷内容如下图所示。

图片

接着,运行如下命令即可完成反序列化漏洞,弹出winver.exe进程,具体命令如下所示。

Sharp4AddUtil.exe -AddinRoot:.

图片

04原理解析

在上文中,我们介绍了 Sharp4AddUtil.exe 的基本功能和反序列化漏洞。接下来,我们将进一步分析工具中的其他重要方法,以理解其在加载项管理中的具体实现。UpdateAddInsIfExist 方法检查加载项路径是否存在,且 AddIns.store 文件是否不存在或已过期。如果满足条件,调用 AddInStore.BuildAddInCache 方法构建或更新加载项缓存。

private static void UpdateAddInsIfExist(string addInsPath, Collection<string> warningsCollection)
{string path = Path.Combine(addInsPath, "AddIns.store");FileIOPermission fileIOPermission = new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, addInsPath);fileIOPermission.Assert();if (Directory.Exists(addInsPath) && (!File.Exists(path) || AddInStore.AddInStoreIsOutOfDate(addInsPath))){AddInStore.BuildAddInCache(addInsPath, warningsCollection);}
}

随后,AddInStoreIsOutOfDate 方法通过 GetAddInDeploymentState 方法获取当前的加载项部署状态,并检查其文件计数是否与期望值一致,确定加载项是否过期。

private static bool AddInStoreIsOutOfDate(string addInPath)
{if (addInPath == null){throw new ArgumentNullException("addInPath");}string path = Path.Combine(addInPath, "AddIns.store");DateTime lastWriteTime = File.GetLastWriteTime(path);int num = 0;if (Directory.Exists(addInPath)){foreach (string path2 in Directory.GetDirectories(addInPath)){if (AddInStore.DirectoryNeedsUpdating(path2, lastWriteTime, ref num)){return true;}}}AddInDeploymentState addInDeploymentState = AddInStore.GetAddInDeploymentState(addInPath);return addInDeploymentState == null || num != addInDeploymentState.FileCount;
}

由于使用了 BinaryFormatter 进行反序列化,该方法容易受到反序列化攻击。攻击者可以构造恶意的加载项文件,当 ReadCache 方法尝试反序列化这些文件时,将会导致执行任意代码。

[SecuritySafeCritical]
private static T ReadCache<T>(string storeFileName, bool mustExist)
{new SecurityPermission(SecurityPermissionFlag.SerializationFormatter).Demand();new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, storeFileName).Assert();BinaryFormatter binaryFormatter = new BinaryFormatter();T result = default(T);if (File.Exists(storeFileName)){using (Stream stream = File.OpenRead(storeFileName)){if (stream.Length < 12L){throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Res.DeployedAddInsFileCorrupted, new object[] { storeFileName }));}BinaryReader binaryReader = new BinaryReader(stream);int num = binaryReader.ReadInt32();long num2 = binaryReader.ReadInt64();try{result = (T)((object)binaryFormatter.Deserialize(stream));}catch (Exception innerException){throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Res.CantDeserializeData, new object[] { storeFileName }), innerException);}}}
}

综上,Sharp4AddUtil.exe 是一款功能丰富的 Office 加载项管理工具,能够高效地管理加载项的安装与更新。尽管提供了许多便利功能,但反序列化漏洞可以帮助红队利用白名单方式运行恶意代码。

05.NET安全知识库

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题。

图片

图片

星球文化20+个专题栏目涵盖了点、线、面、体等知识面!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。

    

图片

图片

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

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

相关文章

Unity_Obfuscator Pro代码混淆工具_学习日志

Unity_Obfuscator Pro代码混淆工具_学习日志 切勿将密码或 API 密钥存储在您附带的应用程序内。 混淆后的热更新暂时没有想到怎么办 Obfuscator 文档 https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html商店链接Obfuscator Pro&#xff08;大约$70&a…

sqli-labs靶场第三关less-3

sqli-labs靶场第三关less-3 1、确定注入点 http://192.168.128.3/sq/Less-3/?id1 http://192.168.128.3/sq/Less-3/?id2 有不同回显&#xff0c;判断可能存在注入&#xff0c; 2、判断注入类型 输入 http://192.168.128.3/sq/Less-3/?id1 and 11 http://192.168.128.3/sq/L…

Nginx07-静态资源访问

零、文章目录 Nginx07-静态资源访问 1、Nginx解决跨域问题 &#xff08;1&#xff09;同源策略 同源策略&#xff08;Same-Origin Policy&#xff09;是一个关键的网络安全概念&#xff0c;由Netscape公司在1995年引入&#xff0c;现在被所有现代浏览器所采用。它限制了从一…

每日一题|871. 最低加油次数|动态规划、内层逆序遍历

题目分析&#xff1a;找到第一个能够实现当前油量能够行驶的最大距离大于等于目标距离&#xff0c;且加油次数最小的加油站和加油次数。 每次加油之后能够行驶的最大距离都是由上一次加油的距离决定的&#xff0c;因此使用dp。 1、dp数组定义 dp[i]是一个一维数组&#xff0…

毕业设计项目 深度学习安全帽佩戴检测(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

keras yolo8目标检测

是从coco数据集提取其中的veh_ids[3,6,8,10] labels[car,bus,truck,traffic light]来做目标检测,分别表示汽车,公交车&#xff0c;卡车&#xff0c;交通灯,用的backbone keras_cv.models.YOLOV8Backbone.from_preset( "yolo_v8_m_backbone_coco" ),不用预训练…

JVM 内存区域 堆

堆是JVM中相当核心的内容&#xff0c;因为堆是JVM中管理的最大一块内存区域&#xff0c;大部分的GC也发生在堆区&#xff0c;那接下来就让深入地探究一下JVM中的堆结构。 需要明确&#xff0c;一个JVM实例只存在一个堆内存&#xff0c;堆区在JVM启动的时候就被创建&#xff0c…

(贪心) 反悔贪心之反悔堆

文章目录 ⭐例题&#x1f6a9;题意与思路 ⭐返回贪心&#x1f6a9;原理&#xff08;反悔池&#xff09;&#x1f6a9;落实到题&#x1f6a9;AC code ⭐练习题⭐END&#x1f31f;交流方式 ⭐例题 经典例题&#xff1a; 871. 最低加油次数 &#x1f6a9;题意与思路 题意&#xf…

MATLAB与R语言在建模中的合作与应用(下篇)

目录 目录 模型训练的协同使用 1. 使用 R 语言进行统计建模 2. 使用 MATLAB 进行机器学习建模 模型评估与调优 1. 在 R 中评估模型性能 2. 在 MATLAB 中进行模型优化 实战示例&#xff1a;MATLAB 与 R 的协同建模 总结 在上篇文章中&#xff0c;我们介绍了 MATLAB 和 R…

2024兴国专转本长期集训产品发布!

9月13日&#xff0c;兴国教育2024长期集训产品发布会在江苏南京顺利召开。 成立于2002年的兴国品牌&#xff0c;时至今日&#xff0c;已经走过了二十二年。兴国新媒体发言人祁老师在发布会上&#xff0c;为大家介绍了兴国这二十年来的变化。 截至2024年8月&#xff0c;兴国在全…

论文阅读:Split-Aperture 2-in-1 Computational Cameras (二)

Split-Aperture 2-in-1 Computational Cameras (一) Coded Optics for High Dynamic Range Imaging 接下来&#xff0c;文章介绍了二合一相机在几种场景下的应用&#xff0c;首先是高动态范围成像&#xff0c;现有的快照高动态范围&#xff08;HDR&#xff09;成像工作已经证…

ctf.bugku - 本地管理员

题目来源&#xff1a;本地管理员 - Bugku CTF 访问页面 页面的最后返回一个字符串&#xff1b; 结尾 应该是base64 编码&#xff1b; 解码得到 test123 同时&#xff0c;提示信息还有 IP禁止访问&#xff0c;本地管理员登陆&#xff1b; 所以&#xff0c;请求头添加&#x…

【AI知识点】残差网络(ResNet,Residual Networks)

残差网络&#xff08;ResNet&#xff0c;Residual Networks&#xff09; 是由微软研究院的何凯明等人在 2015 年提出的一种深度神经网络架构&#xff0c;在深度学习领域取得了巨大的成功。它通过引入残差连接&#xff08;Residual Connection&#xff09; 解决了深层神经网络中…

基于图像的3D动物重建与生成

一、背景与目标 3D-Fauna 是一款用于基于图像和视频进行四足动物3D重建与生成的开源方案。自然界展示了复杂的相似性与多样性,该方法通过学习来自网上图片的四足动物的3D形态,能够从单张图片生成可动画化的带有纹理的3D网格模型。其最终目标是通过大量扩展现有的解决方案,实…

【网络篇】计算机网络——运输层详述(笔记)

目录 一、运输层 1. 概述 2. 运输层和网络层的关系 3. 运输层协议概述 二、多路复用和多路分解 1. 综述 2. 无连接的多路复用与多路分解&#xff08;UDP&#xff09; 3. 面向连接的多路复用与多路分解&#xff08;TCP&#xff09; 4. Web 服务器与TCP 三、UDP&#x…

Django学习笔记十三:优秀案例学习

Django CMS 是一个基于 Django 框架的开源内容管理系统&#xff0c;它允许开发者轻松地创建和管理网站内容。Django CMS 提供了一个易于使用的界面来实现动态网站的快速开发&#xff0c;并且具有丰富的内容管理功能和多种插件扩展。以下是 Django CMS 的一些核心特性和如何开始…

力扣之1336.每次访问的交易次数

题目&#xff1a; sql建表语句&#xff1a; Create table If Not Exists Visits (user_id int, visit_date date); Create table If Not Exists Transactions (user_id int, transaction_date date, amount int); Truncate table Visits; insert into Visits (user_id,…

Unity3d使用JsonUtility.FromJson读取json文件

使用JsonUtility.FromJson方法不需要额外引用第三方库。该方法只能读取json对象&#xff0c;而不能读取json数组。 假如我们有如下的json数组&#xff1a; [ {"id":1, "name":"first2021", "level":5, "score":100, "…

The 2024 ICPC Kunming Invitational Contest F. Collect the Coins(二分)

在知乎内查看 题目 思路来源 官方题解 题解 一旦某个速度v满足&#xff0c;那么大于速度v的都满足&#xff0c;所以可以被二分&#xff0c;但是二分的check不好想&#xff0c;卡住了 最后去看了题解&#xff0c;其实维护的是&#xff0c;一个机器人在目标点收集硬币时&…

UGUI(三大现成UI控件)

Rawimage 可以是任意类型的图&#xff0c;所以这里的泛型就更宽泛&#xff0c;不止sprite 相比Image唯二的不同 uvrect有点像平铺 Text suddenly come to a Free island. best fit开启后会有范围选择 Image image 组件是挂在RectTransform的ui下的&#xff0c;换句话说&…