> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/ataques/windows/services/wmi.md).

# 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`.

```bash
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.

```bash
# 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
```
