简述
Win32_Process 多年来一直是 WMI 远程命令执行的首选类。本文将介绍一个新的 WMI 类,它具有类似 Win32_Process 的功能并提供更多能力
在不同版本的 Windows 中,我会定期查看 Windows Management Instrumentation (WMI) 类,寻找可以执行特定操作的有趣类和方法。其中一个重点是寻找可用于通用后渗透能力的方法。
要深入挖掘 WMI 的新机会,我们需要先了解横向移动等现有技术。当前已知的类及其方法包括:
-
Process – Win32_Process (Create) -
Service – Win32_Service (Create/StartService or Change) -
Job – Win32_ScheduledJob (Create) -
Task – PS_ScheduledTask (New) -
Product – Win32_Product (Install) -
Performance – Win32_PerfData/Win32_PerfRawData -
Custom/Malicious WMI Provider -
Derived Class -
Event Subscription
在搜索过程中,我发现了一些有趣的类及其方法,它们扩展了上述功能。由于其他潜在候选类还不够成熟,本文仅详细介绍其中一个。
MSFT_MTProcess
MSFT_MTProcess 是我见过的最接近 Win32_Process 的 WMI 类。Win32_Process 是 WMI 横向移动的经典案例,也是大多数人讨论 WMI 横向移动时首先想到的类。MSFT_MTProcess 具有一个名为 CreateProcess 的方法,与 Win32_Process 一样接受命令行参数。但是,这个类有一个重大限制:它仅在 Windows Server 2016 及更高版本中存在。这意味着在对工作站进行横向移动时无法使用,但它能够像 Win32_Process 一样触发指定二进制文件的执行。其优势在于配置过程与 Win32_Process 同样简单,只需向二进制文件传递参数即可,不像 Win32_PerfData 那样需要额外配置。该类位于 .RootMicrosoftWindowsManagementTools命名空间中。
MSFT_MTProcess 的另一功能
MSFT_MTProcess 的第二个有趣方法是 CreateDump。该类可用于创建指定进程的转储文件。如果希望在不添加新工具的情况下远程(或本地)创建进程转储,可以使用 MSFT_MTProcess 的 CreateDump 方法。同样,该类仅存在于 Windows Server 2016 或更高版本中。这意味着如果要获取大家都关注的进程(如 lsass.exe)的转储文件并离线提取数据,完全可以实现。那么这个类是否提供了有趣或新颖的进程转储方式?并没有。该类采用与任务管理器相同的技术,即在任务管理器中右键单击进程并创建进程转储。这会加载 dbghelpd.dll并对指定进程实例调用 MiniDumpWriteDump。这很合理,因为该 WMI 提供程序被称为任务管理器提供程序;不过进程执行链略有不同。不是由任务管理器加载 DLL,而是由 WmiPrvSe 完成加载并执行函数调用。

在工作站上使用 MSFT_MTProcess
我确实遗漏了关于 MSFT_MTProcess 的一个重要说明。前面提到它只能在 Windows Server 2016 及更高版本上工作。默认情况下确实如此;但是,我们也可以使其在 Windows 工作站操作系统上运行。这需要两个主要组件:首先是提供程序动态链接库 (DLL),即 WMI 类提供程序 mttmprov.dll;其次是 MOF 文件,用于定义 WMI 类的所有参数和相关数据。通过几个步骤,我们可以将这两个文件安装到 Windows 10/11 主机上,从而获得前面提到的进程转储或程序执行功能。
首先,将提供程序 DLL 和 MOF 文件复制到目标主机的 C:WindowsSystem32wbem目录。接下来,需要安装 MOF 文件,以便在 WMI 数据库中创建类并使其可用。执行以下命令:
mofcomp.exe C:WindowsSystem32wbemmttmprov.mof
技术上,我们不一定要使用 mofcomp。也 可以 使用纯 WMI 方式来实现,但这样做容易遇到问题。最后,需要通过创建一些注册表项来手动注册 COM CLSID。完成所有步骤后,该类即可使用。

整个过程类似于安装恶意 WMI 提供程序(如上文已知横向移动技术列表中所述);但不同的是,这并非明显的恶意软件,而是现有的合法 Windows WMI 提供程序,如同 Win32_Process 的提供程序一样。

工具
既然介绍了一个新的可用类,没有相应的工具就不太实用了。我开发了两个工具来实现上述类的功能:WMI_Proc_Dump.py 和 mtprocess.py。
WMI_Proc_Dump.py 是一个使用 MSFT_MTProcess 类进行远程进程转储的工具,适用于 Windows Server 2016 或更高版本(或已安装 MT Process 提供程序的 Windows 工作站)。该工具会调用 MSFT_MTProcess 进行进程转储,自动将 <Process_Name>.dmp文件写入 C:WindowsTemp目录。如果需要重命名为不那么可疑的文件名,可以使用 CIM_DataFile(不过遥测系统可能仍会捕获原始名称)。

Mtprocess.py 是第二个发布的脚本,实现了 MSFT_MTProcess 类的 CreateProcess 方法。该脚本还提供了将 MSFT_MTProcess 类自动安装到工作站主机的功能。


该实现的一个主要缺陷是,为了远程完成此操作,我使用了 Win32_Process 来调用 MOF 文件上的 mofcomp.exe。这形成了一个循环依赖问题,因为添加 MSFT_MTProcess 的初衷正是为了摆脱对 Win32_Process 的依赖。此外,MOF 文件将命名空间从 .RootMicrosoftWindowsManagementTools 更改为 .RootCIMv2,因为前者在 Windows 工作站操作系统上并不存在。
WMI_Proc_Dump 的源码位置:https://github.com/0xthirteen/WMI_Proc_Dump,mtprocess 的源码位置:https://github.com/0xthirteen/mtprocess。
结论
Win32_Process 一直是大多数横向移动场景中的首选 WMI 类,至今仍在广泛使用。随着时间推移,出现了其他可以实现类似功能的替代方法。然而,这些方法通常需要满足额外条件才能成功执行,有时操作起来比较繁琐。MSFT_MTProcess 类是我在所有 Windows 主机上见过的最接近 Win32_Process 的替代方案,并且在 Windows Server 2016 及更高版本中默认安装。通过一些原生 Windows 工具,可以非常简便地将其安装到非服务器操作系统上,甚至支持远程安装。额外的好处是,该提供程序还能够获取指定进程实例的转储文件。这些功能使得该类在攻击性场景中具有很大的实用价值。
翻译自: More Fun With WMI
免责声明:本博客文章仅用于教育和研究目的。提供的所有技术和代码示例旨在帮助防御者理解攻击手法并提高安全态势。请勿使用此信息访问或干扰您不拥有或没有明确测试权限的系统。未经授权的使用可能违反法律和道德准则。作者对因应用所讨论概念而导致的任何误用或损害不承担任何责任。
原文始发于微信公众号(securitainment):更多关于 WMI 的乐趣
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-


评论