.NET内网实战:通过XOML代码绕过防护

01阅读须知

此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧。

02基本介绍

图片

03编码实现

在红队活动往往需要考虑如何在实际环境中绕过防御机制,启动木马进程。今天,我们将深入探讨一种较少被提及但非常有趣的技术—利用XOML执行.NET代码。由于该程序自带微软的数字签名,它能够绕过杀毒软件的监控,执行潜在的恶意代码。该技术利用了XOML的合法性以及系统中对白名单程序的高度信任,使得恶意代码的执行更加隐蔽,难以被检测和阻止。

3.1 XOML文件是什么

XOML文件是一种基于XML的文件格式,专用于定义和描述Windows Workflow Foundation (WF) 中的工作流程。通过XOML文件,可以指定WF工作流的结构、活动及其行为,而无需在.cs文件中编写大量的代码。

通常一个典型的XOML文件和WPF里的XAML文件基本一致,以下是一段XOML文件的示例代码,主要展示了一个简单的顺序工作流程。包括以下几个主要部分

<SequentialWorkflowActivity x:Class="MyWorkflow" x:Name="foobarx"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
  <SequentialWorkflowActivity Enabled="False">
  </SequentialWorkflowActivity>
</SequentialWorkflowActivity>

上述XML代码中,<SequentialWorkflowActivity> 是.NET早期的版本中XOML文件的根元素,定义了一个顺序工作流程。顺序工作流程意味着各个活动将按照它们在文件中的顺序依次执行。

x:Class属性指定了工作流程的类名:MyWorkflow,x:Name属性为工作流程实例指定了一个名称叫foobarx。xmlns和xmlns:x用于声明XAML和工作流程相关的命名空间,这是为了确保XOML文件中的元素和属性能够正确地映射到.NET Framework中的类型和成员。

值得一提的是,XOML文件通过<x:Code>标签,可以在XOML文件中直接嵌入.NET代码,从而在工作流程执行过程中启动winver.exe进程。具体如下所示。

<x:Code>
      Object test = System.Diagnostics.Process.Start("cmd.exe", "/c winver");
 </x:Code>

3.2 调试分析

当编译 XOML 文件时,依赖于内部的编译器组件和多个辅助类来完成整个编译流程。这些组件和方法共同作用,最终将 XOML 文件编译成可执行的 .NET 程序集。打开dnspy.exe,在调试参数处输入 1.xoml。

首先使用 AppDomain.CreateInstanceAndUnwrap 方法在独立的 AppDomain 中创建 WorkflowCompilerInternal 的对象。

图片

接着,XomlCompilerHelper.InternalCompileFromDomBatch 方法被调用,用于处理 XOML 文件的具体编译,如下图所示。

图片

最终,Sharp4XOMLLoader 通过 Activator使用反射机制创建该类型的实例,并将其作为 Activity 对象返回,从而触发.NET代码执行启动winver.exe。如下图所示。

图片

综上,凭借微软数字签名的掩护,巧妙地绕过安全防线,执行XOML文件内嵌的.NET恶意代码。其利用XOML的合法身份及系统对信任程序的宽松态度,实现了恶意行为的高度隐蔽性。

04.NET 电子报刊

《.NET 内网安全攻防》专栏,内容主要有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,可细分为以下8个方向。

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

图片

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dot.Net安全矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值