Administrator
Published on 2025-07-29 / 4 Visits
0
0

【网络协议学习】WMI协议学习

一、背景:为什么要学习 WMI 协议?

Windows Management Instrumentation(WMI)是微软推出的系统管理协议,是众多远程管理、信息查询、自动化脚本背后的“隐形主角”。

无论你是想远程启动服务,获取硬件信息,还是实现无文件攻击,WMI 都能胜任:

  • 运维工程师:通过 WMI 批量收集系统信息(CPU、磁盘、内存)

  • 安全研究员:WMI 是渗透测试中远程代码执行的“常客”

  • 红队/蓝队人员:WMI 被广泛用于后门通信、横向移动

一句话理解:WMI 就是 Windows 的“网络远控接口”,可以实现对目标主机的无感操作。


二、WMI 是什么?用人话解释!

WMI 是一种基于 COM(Component Object Model)和 DCOM(Distributed COM)协议实现的 Windows 系统管理框架,它允许本地或远程机器:

  • 查询系统硬件信息(WMI 查询语言 WQL)

  • 执行进程、启动服务、注册脚本

  • 配置系统设置

常见场景举例:

功能

示例命令

查询进程

Get-WmiObject Win32_Process

查询主板信息

Get-WmiObject Win32_BaseBoard

远程执行命令

Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "cmd.exe /c whoami"

查询远程磁盘

wmic /node:192.168.1.10 logicaldisk get caption,freespace


三、WMI 协议原理简析

WMI 本质上运行在以下三层:

  1. 客户端调用层(如 PowerShell、VBScript、C++)

  2. WMI 服务(Winmgmt 进程)

  3. 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

常用参数接口

参数

含义

Win32_Processor

CPU 处理器

Win32_PhysicalMemory

物理内存条

Win32_Keyboard

键盘

Win32_PointingDevice

点输入设备,包括鼠标。

Win32_FloppyDrive

软盘驱动器

Win32_DiskDrive

硬盘驱动器

Win32_CDROMDrive

光盘驱动器

Win32_BaseBoard

主板

Win32_BIOS

BIOS 芯片

Win32_ParallelPort

并口

Win32_SerialPort

串口

Win32_SerialPortConfiguration

串口配置

Win32_SoundDevice

多媒体设置,一般指声卡。

Win32_SystemSlot

主板插槽 (ISA & PCI & AGP)

Win32_USBController

USB 控制器

Win32_NetworkAdapter

网络适配器

Win32_NetworkAdapterConfiguration

网络适配器设置

Win32_Printer

打印机

Win32_PrinterConfiguration

打印机设置

Win32_PrintJob

打印机任务

Win32_TCPIPPrinterPort

打印机端口

Win32_POTSModem

MODEM

Win32_POTSModemToSerialPort

MODEM 端口

Win32_DesktopMonitor

显示器

Win32_DisplayConfiguration

显卡

Win32_DisplayControllerConfiguration

显卡设置

Win32_VideoController

显卡细节。

Win32_VideoSettings

显卡支持的显示模式。

Win32_TimeZone

时区

Win32_SystemDriver

驱动程序

Win32_DiskPartition

磁盘分区

Win32_LogicalDisk

逻辑磁盘

Win32_LogicalDiskToPartition

逻辑磁盘所在分区及始末位置。

Win32_LogicalMemoryConfiguration

逻辑内存配置

Win32_PageFile

系统页文件信息

Win32_PageFileSetting

页文件设置

Win32_BootConfiguration

系统启动配置

Win32_ComputerSystem

计算机信息简要

Win32_OperatingSystem

操作系统信息

Win32_StartupCommand

系统自动启动程序

Win32_Service

系统安装的服务

Win32_Group

系统管理组

Win32_GroupUser

系统组帐号

Win32_UserAccount

用户帐号

Win32_Process

系统进程

Win32_Thread

系统线程

Win32_Share

共享

Win32_NetworkClient

已安装的网络客户端

Win32_NetworkProtocol

已安装的网络协议

四、实战演示:远程查询目标系统信息

方法一:使用 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?

攻击目的

技术细节

横向移动

使用 DCOM + WMI 远程执行命令

无文件持久化

注册 Event Filter + Event Consumer

静默后门

PowerShell + WMI 轮询器

安全绕过

利用 WMI 避免触发传统的杀毒行为模式

防御建议:

  • 开启 Windows Defender ATP / EDR,对 WMI-Activity 做行为分析

  • 限制 WinRM 和 DCOM 的访问白名单

  • 监控注册的 WMI 持久化项(如 __EventConsumerToFilter)


六、端口与流量:WMI 抓包分析简述

WMI 通常使用以下通信方式:

类型

协议

端口

DCOM(默认)

RPC

135 + 高位动态端口

WinRM

HTTP/HTTPS

5985/5986

使用 tcpdumpWireshark 可定位到:

  • 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()


Comment