WMI
Windows Management Instrumentation(WMI)
簡介
WMI是Windows 2K/XP管理系統(tǒng)的核心,對于其他的Win32操作系統(tǒng)笼平,WMI是一個有用的插件。WMI以CIMOM
為基礎(chǔ),CIMOM即公共信息模型對象管理器(Common Information Model Object Manager)脖母,是一個描述操作系統(tǒng)構(gòu)成單元的對象數(shù)據(jù)庫,為MMC和腳本程序提供了一個訪問操作系統(tǒng)構(gòu)成單元的公共接口饮戳。WMI可以當(dāng)作一組API來與Windows系統(tǒng)進(jìn)行交互豪治,整個運(yùn)行過程都在內(nèi)存中進(jìn)行,不會留下任何痕跡扯罐。
使用方式
- cmd下直接使用
wmic
- powershell:調(diào)用
Get-WmiObject
模塊 - WMI Query Language - WQL:
通過powershell執(zhí)行WQL:
Get-WmiObject -Query 'Select ...'
WMIC 動作
- List -> 列出信息
- Get -> 取值
- Call -> 調(diào)用方法
- Set -> 設(shè)置某個屬性的值
- Create -> 創(chuàng)建一個實(shí)例
- Delete -> 刪除一個實(shí)例
- Assoc -> 顯示關(guān)聯(lián)
常用用法:
- 查看別名:
wmic alias list brief
- 查看系統(tǒng)一些內(nèi)容:
由于list列出的內(nèi)容較多负拟,此處可使用brief
輸出少部分,如果想要查看某一個值可以使用wmic some_class where 'name="xxx"' get xxx
歹河,如果不知道具體名稱掩浙,可以使用like,如wmic some_class where 'like name="ls%" get xxx'
# 列出系統(tǒng)安裝的軟件
wmic product list brief
# 列出系統(tǒng)運(yùn)行的服務(wù)
wmic service list brief
# 列出系統(tǒng)運(yùn)行的程序
wmic process list brief
# 查找域控
wmic ntdomain list brief
# 查找系統(tǒng)登錄的用戶
wmic logon list brief
# 查看已安裝的補(bǔ)丁
wmic qfe list brief
# 查看進(jìn)程啟動時執(zhí)行的命令
wmic process where 'name="xx.exe"' get commandline
wmic process where ProcessId=144 get commandline
- 查看某個類所有可調(diào)用的函數(shù):
以下以win32_process
舉例:
powershell2.0 以上:
Get-WmiObject -Query 'Select * From Meta_Class WHERE __Class = "win32_process"' | Where-Object { $_.PSBase.Methods } | Select-Object Name, Methods
powershell3.0 以上:
Get-CimClass -ClassName win32_product | where CimClassMethods -ne $null | select CimClassName,CimClassMethods
- 調(diào)用類的函數(shù)
舉例:
# 查看porcess可調(diào)用的函數(shù):
Get-WmiObject -Query 'Select * From Meta_Class WHERE __Class = "win32_process"' | Where-Object { $_.PSBase.Methods } | Select-Object Name, Methods
Name Methods
---- -------
Win32_Process {Create, Terminate, GetOwner, GetOwnerSid...}
通過查看可調(diào)用的方法可以知道我們可以使用call
來調(diào)用方法:
# 創(chuàng)建一個計(jì)算器進(jìn)程
wmic process call create calc
# 關(guān)閉計(jì)算器進(jìn)程(實(shí)際是掛起)
# 此處使用name關(guān)閉有時不太好用秸歧,可以使用like或者是processid來關(guān)閉
wmic process where processid=18084 call terminate
- powershell 使用wmi
Get-WmiObject
在powershell3.0之后已經(jīng)過時厨姚,使用Get-CIMInstance
代替,但是仍然可以使用键菱。
# 查詢進(jìn)程:
# 相對使用wmi命令輸出的結(jié)果能更直觀地查看(2列橫向表格輸出)
Get-WmiObject -class win32_process -filter "name='lsass.exe'"
- wmi連接遠(yuǎn)程主機(jī)
前提是遠(yuǎn)程主機(jī)開放了135端口且WMI服務(wù)開啟
# 在遠(yuǎn)程主機(jī)上創(chuàng)建進(jìn)程執(zhí)行命令
wmic /node:1.1.1.1/user:administrator /password:123456 process call create "cmd.exe /c xxx"
- 列舉本地主機(jī)中已安裝的殺軟:
wmic /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
目前wmi了解較淺谬墙,還需要后續(xù)深入了解
附:
- Powershell API 查詢:https://ss64.com/ps/