Ir al contenido

Herramientas y automatización para WMI

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

El workflow WMI separa el modelo WMI de sus transportes. Una consulta CIM por WS-Man y wmiexec por DCOM no recorren la misma ruta ni generan los mismos artefactos.

Pregunta Herramienta Diferencia
¿qué clase puede leer la cuenta? Get-CimInstance consulta nativa y filtrable
¿funciona WS-Man o DCOM? New-CimSession transporte explícito
¿qué endpoints RPC existen? Impacket rpcdump RPC, no autorización WMI
¿puede invocar métodos remotos? wmiexec modifica estado y usa SMB para output

PowerShell usa WS-Man por defecto:

Consulta CIM por WS-Man
$credential = Get-Credential -Credential 'DOMAIN\USERNAME'
$session = New-CimSession -ComputerName FQDN -Credential $credential
Get-CimInstance -CimSession $session -ClassName Win32_OperatingSystem
Remove-CimSession $session

-OperationTimeoutSec 60 limita cuánto espera una operación del servidor. Un valor inferior a la ventana de recuperación de conexión de tres minutos impide recuperar una interrupción de red que dure más que ese timeout. Por ello, el valor sirve para una consulta acotada y no como valor universal. La sesión debe retirarse aunque la consulta falle:

Consulta CIM acotada con cleanup
$credential = Get-Credential -Credential 'DOMAIN\USERNAME'
$session = $null
try {
$session = New-CimSession -ComputerName FQDN `
-Credential $credential -OperationTimeoutSec 60 `
-ErrorAction Stop
Get-CimInstance -CimSession $session `
-ClassName Win32_OperatingSystem -ErrorAction Stop
}
finally {
if ($null -ne $session) {
Remove-CimSession $session
}
}

Para DCOM, crea opciones explícitas:

Consulta CIM por DCOM
$option = New-CimSessionOption -Protocol Dcom
$session = New-CimSession -ComputerName FQDN `
-Credential $credential -SessionOption $option
Get-CimInstance -CimSession $session -ClassName Win32_Service `
-Filter "State='Running'"
Remove-CimSession $session

Los filtros reducen objetos transferidos y eventos. Registra namespace, clase, propiedades solicitadas y transporte.

rpcdump.py enumera interfaces RPC visibles:

Enumerar interfaces RPC
impacket-rpcdump 'DOMAIN/USERNAME@TARGET_IP'

wmiexec.py invoca Win32_Process.Create y recupera output mediante un recurso SMB. No es una herramienta de solo lectura:

Validar ejecución WMI como prueba separada
impacket-wmiexec 'DOMAIN/USERNAME@TARGET_IP'

La acción crea un proceso y puede crear un archivo temporal. Solo se usa después de confirmar permiso de método, canal SMB para retorno y cleanup. Una shell exitosa no demuestra acceso a todos los namespaces.

Nmap puede identificar Endpoint Mapper en 135/tcp, pero no dispone de un script general que sustituya una consulta WMI autenticada. Usa -sV -p 135 para el primer endpoint y comprueba los puertos dinámicos devueltos.

Si WS-Man funciona y DCOM no, revisa RPC dinámico y firewall. Si DCOM conecta pero la clase devuelve Access denied, el problema está en namespace, clase o token. Si wmiexec ejecuta sin output, separa WMI de SMB.