一、背景:为什么要学习 WMI 协议?
Windows Management Instrumentation(WMI)是微软推出的系统管理协议,是众多远程管理、信息查询、自动化脚本背后的“隐形主角”。
无论你是想远程启动服务,获取硬件信息,还是实现无文件攻击,WMI 都能胜任:
运维工程师:通过 WMI 批量收集系统信息(CPU、磁盘、内存)
安全研究员:WMI 是渗透测试中远程代码执行的“常客”
红队/蓝队人员:WMI 被广泛用于后门通信、横向移动
一句话理解:WMI 就是 Windows 的“网络远控接口”,可以实现对目标主机的无感操作。
二、WMI 是什么?用人话解释!
WMI 是一种基于 COM(Component Object Model)和 DCOM(Distributed COM)协议实现的 Windows 系统管理框架,它允许本地或远程机器:
查询系统硬件信息(WMI 查询语言 WQL)
执行进程、启动服务、注册脚本
配置系统设置
常见场景举例:
三、WMI 协议原理简析
WMI 本质上运行在以下三层:
客户端调用层(如 PowerShell、VBScript、C++)
WMI 服务(Winmgmt 进程)
CIMOM(Common Information Model Object Manager)管理信息库
WMI 支持两种远程调用协议:
DCOM
:默认基于 RPC 协议工作,使用端口135及动态端口(49152-65535)WinRM
:基于 HTTP/HTTPS 的远程 WMI(推荐方式)
WMI 的数据格式基于 CIM(公共信息模型),可类比 Linux 的
/proc
虚拟文件系统。
3.1 、Windows下使用WMI
(1)查看是否开启WMI服务
依次右键我的电脑=》管理=》打开计算机管理=》服务=》Windows Management Instrumentation
(2)查看是否启动远程服务。
依次右键我的电脑=》管理=》打开计算机管理=》WMI控件=》更多操作=》属性
登录之后,设置WMI控件的属性,进入安全选项卡,然后设置Root\CIMV2安全设置,然后查看当前的组是否设置远程启用的权限,特别是查看Authenticated Users是否启用远程,如果没有启用,则勾选“远程启用”,另外就是看Administrators这个组是否也启用了远程,这些都是非常重要的。
这里为什么要设置Authenticated Users这个组的远程启用?这个组的作用是什么?
通过查阅相关文档:Authenticated Users:Windows系统中所有使用用户名、密码登录并通过身份验证的账户,并且拒绝Authenticated Users组造成Administrator无法访问AD对象,并且因为Administrator属于Authenticated Users组,而我们登录的用户Administrator要启用远程,所以这个组也要启用远程。另外LOCAL SERVICE,NETWORK SERVICE是由操作系统创建的、一类较为特别的内置帐户或组,主要是为了安全性。NETWORK SERVICE主要针对网络,而LOCAL SERVICE主要针对本地应用程序,对于这些组也只能查到这些消息了,希望能对此有一些大致的了解。
WMI控件安全设置
开启“远程启用”
连接远程主机WMI服务
按下Windows+R组合键,调用系统运行窗口。输入wbemtest命令。
打开WMI测试器。
连接远程WMI服务
连接WMI服务时需要进行下面的步骤:首先输入命名空间,输入用户名和密码,点击“连接”。
连接成功标志
如果连接不成功,可能出现下面的对话框,请按照下面的提示来进行一步步排查。
可能需要在被连接机器上配置登录用户名和密码或者关闭防火墙放行端口号。
测试数据获取
点击查询
输入WQL语句,点击应用,这条命令是查询查询所有硬盘分区
然后会弹出查询结果。
查询计算机信息
3.2 、Linux下使用WMI
安装依赖
yum -y install wget time make gcc autoconf nagios-plugins-perl perl-Config-IniFiles perl-DateTime perl-Scalar-List-Utils perl-Number-Format perl-FindBin perl python
下载WMIC Source v1.4.1
下载地址https://edcint.co.nz/checkwmiplus/download/wmic-source-v1-4-1/
解压和编译
tar zxvf /opt/nagios/rpm/wmi-1.4.1.tar.gz
cd wmi-1.4.1
make "CPP=gcc -E -ffreestanding"
执行文件在Samba/source/bin路径下
查看版本
wmic --version
Version 1.4.1tp4-SVN-build-UNKNOWN
测试命令
cd Samba/source/bin/
[root@localhost bin]# ./wmic -U administrator%abcedfer //192.168.1.1 "select * from Win32_ComputerSystem"
CLASS: Win32_ComputerSystem
AdminPasswordStatus|AutomaticManagedPagefile|AutomaticResetBootOption|AutomaticResetCapability|BootOptionOnLimit|BootOptionOnWatchDog|BootROMSupported|BootStatus|BootupState|Caption|ChassisBootupState|ChassisSKUNumber|CreationClassName|CurrentTimeZone|DaylightInEffect|Description|DNSHostName|Domain|DomainRole|EnableDaylightSavingsTime|FrontPanelResetStatus|HypervisorPresent|InfraredSupported|InitialLoadInfo|InstallDate|KeyboardPasswordStatus|LastLoadInfo|Manufacturer|Model|Name|NameFormat|NetworkServerModeEnabled|NumberOfLogicalProcessors|NumberOfProcessors|OEMLogoBitmap|OEMStringArray|PartOfDomain|PauseAfterReset|PCSystemType|PCSystemTypeEx|PowerManagementCapabilities|PowerManagementSupported|PowerOnPasswordStatus|PowerState|PowerSupplyState|PrimaryOwnerContact|PrimaryOwnerName|ResetCapability|ResetCount|ResetLimit|Roles|Status|SupportContactDescription|SystemFamily|SystemSKUNumber|SystemStartupDelay|SystemStartupOptions|SystemStartupSetting|SystemType|ThermalState|TotalPhysicalMemory|UserName|WakeUpType|Workgroup
3|True|True|True|0|0|True|(0,0,0,0,0,0,0,0,0,0)|Normal boot|DESKTOP-MREILLJ|3|Default string|Win32_ComputerSystem|480|False|AT/AT COMPATIBLE|DESKTOP-MREILLJ|WORKGROUP|0|True|3|False|False|NULL|(null)|3|(null)|Default string|Default string|DESKTOP-MREILLJ|(null)|True|4|1|NULL|(Default string)|False|-1|2|2|NULL|False|3|0|3|(null)|Windows User|1|-1|-1|(LM_Workstation,LM_Server,NT)|OK|NULL|Default string|Default string|0|NULL|0|x64-based PC|3|17103073280|DESKTOP-MREILLJ\Administrator|6|WORKGROUP
常用参数接口
四、实战演示:远程查询目标系统信息
方法一:使用 PowerShell + WMI
Get-WmiObject -Class Win32_OperatingSystem -ComputerName 192.168.1.10 -Credential (Get-Credential)
✔ 成功后可获取远程主机的操作系统版本、内存信息、启动时间等。
方法二:使用 WMIC 命令行
wmic /node:192.168.1.10 /user:admin /password:123456 os get Caption,Version
⚠️ 注意:WMIC 已被 Windows 11 标记为废弃,推荐使用 PowerShell 替代。
五、安全视角:WMI 的攻击与防御
黑客最爱怎么用 WMI?
防御建议:
开启 Windows Defender ATP / EDR,对
WMI-Activity
做行为分析限制 WinRM 和 DCOM 的访问白名单
监控注册的 WMI 持久化项(如 __EventConsumerToFilter)
六、端口与流量:WMI 抓包分析简述
WMI 通常使用以下通信方式:
使用 tcpdump
或 Wireshark
可定位到:
RPC Bind 请求(UUID 为
76f5c827-af21-11d0-bcdb-00c04fd912d0
)WMI Query 请求(通常带有
Win32_
前缀)
📊 对安全人员来说,理解流量特征是判断是否存在滥用 WMI 横向移动的关键线索。
七、结语:你现在应该掌握了什么?
✅ 什么是 WMI 协议
✅ 它如何用于远程管理 Windows 系统
✅ 攻击者如何滥用 WMI,实现隐蔽入侵
✅ 如何使用工具如 PowerShell、WMIC、WinRM 操作 WMI
✅ 抓包与防御建议
彩蛋:实用 WMI 查询命令合集
# 获取网卡信息
Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.IPEnabled -eq $true}
# 查询防火墙状态
Get-WmiObject -Namespace root\SecurityCenter2 -Class FirewallProduct
# 启动服务
(Get-WmiObject -Class Win32_Service -Filter "Name='wuauserv'").StartService()