01阅读须知
此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。
02基本介绍
本文内容部分节选自小报童《.NET 白名单文件通过反序列化执行命令》,完整的文章内容请加入小报童后订阅查看。现在限时只需59元,永久买断!目前已有200+位朋友抢先预定,我们会长期更新,对.NET内网安全的朋友们请尽快订阅该报刊!
03原理分析
VisualUiaVerifyNative是一款具备微软白名单的可执行文件,用于基于Microsoft UI Automation框架进行应用测试。然而,通过对其配置文件的精心操作,攻击者可以非法使用其功能来触发反序列化漏洞,执行任意代码。VisualUiaVerifyNative.exe通常依赖于以下两个重要的动态链接库。
3.1 UIAComWrapper.dll
UIAComWrapper.dll,该 DLL 文件封装了 UI Automation COM 接口,用于简化与 UI Automation 元素的交互。
3.2 WUIATestLibrary.dll
另外,WUIATestLibrary.dll 提供了一些专门用于 UI 自动化测试的库函数,主要支持自动化测试中的通用任务,例如自动化 UI 控件的查找、状态验证和操作。
这些依赖库的主要作用是为 VisualUIAVerifyNative.exe 提供接口和功能支持,使其能够与 Windows 应用程序的 UI 自动化框架进行通信,并通过自动化的方式验证和测试界面元素。
3.3 反编译
使用dnspy打开VisualUiaVerifyNative文件的入口方法Main,发现调用了MainWindow类,MainWindow类的初始化方法中,有一个至关重要的函数ApplicationStateDeserialize负责反序列化配置文件中的数据。如下图所示
进入此方法内部,发现打开读取了一个名为uiverify.config的文件,位于用户的AppData目录中,代码如下所示
private void ApplicationStateDeserialize()
{
this._configFile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "uiverify.config";
if (File.Exists(this._configFile))
{
Stream stream = File.Open(this._configFile, FileMode.Open);
BinaryFormatter binaryFormatter = new BinaryFormatter();
this._applicationState = (ApplicationState)binaryFormatter.Deserialize(stream);
stream.Close();
}
}
最核心的是调用了BinaryFormatter类反序列化内容,攻击者可以通过精心构造的payload欺骗反序列化过程,加载恶意代码
04实战利用
使用ysoserial.exe工具生成一个恶意的序列化payload,这会生成一个二进制格式的恶意payload,并将其保存为Roaminguiverify.config文件,内容如下图所示。
将生成的Roaminguiverify.config文件写入到当前用户目录,比如C:\Users\Administrator\AppData\Roaminguiverify.config。这个配置文件是VisualUiaVerifyNative在启动时会自动读取的文件,触发命令执行。
综上,在日常的红队行动中,利用微软签名的白名单文件来绕过防护措施是一种常见的行为,有些场景下红队通过利用系统白名单文件加载反序列化漏洞的方式执行恶意指令。想要了解完整或者更多的内网安全防御绕过方向的文章,可以移步订阅小报童《.NET 内网实战攻防》电子报刊。
05.NET 电子报刊
电子报刊《.NET 内网安全攻防》专栏,内容主要有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,可细分为以下8个方向。
1) .NET 安全防御绕过
2) .NET 本地权限提升
3) .NET 内网信息收集
4) .NET 内网代理通道
5) .NET 内网横向移动
6) .NET 目标权限维持
7) .NET 数据传输外发
8) .NET 目标痕迹清理