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
Was this helpful?