WMI
- WMI allows admin to create their own objects: create a process, services, …
- WMI provider host process WmiPrvse.exe, this executable responsible for executing WMI activity
Components:
- WMI Providers: COM servers that monitor managed objects. A WMI provider normally consists of a MOF file, which defines the data and event classes for which the provider returns data, and a DLL file which contains the code that supplies data. These providers are typically DLLs and can be found in
C:\Windows\System32\wbem\*
.
- Managed objects: processes, services, operating system…
- WMI infrastructure: WMI service (winmgmt):
3.1. The CIM object manager (CIMON): this component handles the connect between management application and provider.
3.2. WMI/CIMON object repository is organized by WMI namespaces. Holding a collection of provider at C:\Windows\System32\wbem\Repository\
- Management Application (WMI consumer): The client application (exe excutable, vbscript, powershell script,…) interacts with WMI infrastructure.
-
WMI service (winmgmt) is stored within wmisvc.dll which is loaded and runs inside of svchost.exe. Look at WinMgmt config within registry:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
-
Another WMI binary on disk called WmiPrvSe (WMI provider Host) is used to load correct COM server (WMI providers), its parent is svchost.exe process with commandline: C:\Windows\system32\svchost.exe -k DcomLaunch -p
. This svchost is launched under services.exe.
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
WMI called in high level:
- WMI service (wmisvc.dll) is launched within the SVCHOST process via
C:\Windows\system32\svchost.exe -k netsvcs -p -s Winmgmt
- Management application (powershell.exe) executes WMI method.
- WmiPrvSe is launched via
C:\Windows\system32\wbem\wmiprvse.exe -Secured -Embedding
, under the DCOMLaunch svchost process.
- The WMI services loads the appropriate WMI provider into WmiPrvSe.
- WmiPrvSe executes the function expressed by the method
Practice:
- 2 different WMI cmdlet via powershell: WMI cmdlets and CIM cmdlets
Find WMI class that allows us to create a process
PS C:\Users\v13td0x> Get-CimClass -MethodName *Create*
NameSpace: ROOT/cimv2
CimClassName CimClassMethods CimClassProperties
------------ --------------- ------------------
Win32_ShadowStorage {Create} {AllocatedSpace, DiffVolume, MaxSpace, UsedSpace...}
StdRegProv {CreateKey, Delet... {}
Win32_ScheduledJob {Create, Delete} {Caption, Description, InstallDate, Name...}
Win32_DfsNode {Create} {Caption, Description, InstallDate, Name...}
Win32_BaseService {StartService, St... {Caption, Description, InstallDate, Name...}
Win32_SystemDriver {StartService, St... {Caption, Description, InstallDate, Name...}
Win32_Service {StartService, St... {Caption, Description, InstallDate, Name...}
Win32_Share {Create, SetShare... {Caption, Description, InstallDate, Name...}
Win32_ClusterShare {Create, SetShare... {Caption, Description, InstallDate, Name...}
Win32_ShadowCopy {Create, Revert} {Caption, Description, InstallDate, Name...}
Win32_Process {Create, Terminat... {Caption, Description, InstallDate, Name...}
PS C:\Users\v13td0x> (Get-CimClass -ClassName Win32_Process).CimClassMethods['Create'].Parameters
Name CimType Qualifiers ReferenceClassName
---- ------- ---------- ------------------
CommandLine String {ID, In, MappingStrings}
CurrentDirectory String {ID, In, MappingStrings}
ProcessStartupInformation Instance {EmbeddedInstance, ID, In, MappingStrings}
ProcessId UInt32 {ID, MappingStrings, Out}
- U can see WMI class called Win32_Process that holds a method called
Create
. Next, let's find WMI provider is. As mentioned before, are essentially just COM servers. Which means they are stored in registry behind a CLSID.
- And the params we need on Win32_Prcess.Create method
So, what we have?
WMI Class : Win32Process
Method: Create(CommandLine, CurrentDirectory, ProcessStartupInformation, ProcessId)
Provider: cimwin32.dll
Namespace: ROOT/cimv2
References:
https://jsecurity101.medium.com/wmi-internals-part-1-41bb97e7f5eb