
Porte em C# do WMImplant que usa CIM ou WMI para consultar sistemas remotos
Port em C# do WMImplant que utiliza CIM ou WMI para consultar sistemas remotos. Pode usar credenciais fornecidas ou a sessão do usuário atual.
Nota: Alguns comandos usarão PowerShell em combinação com WMI, indicados com ** no comando --show-commands.
CIMplant é uma reescrita em C# e expansão do WMImplant de @christruncer. Permite coletar dados sobre um sistema remoto, executar comandos, exfiltrar dados e muito mais. A ferramenta permite conexões usando Windows Management Instrumentation, WMI, ou Common Interface Model, CIM; ou mais precisamente Windows Management Infrastructure, MI. O CIMplant requer permissões de administrador local no sistema alvo.
Provavelmente é mais fácil usar a versão compilada disponível em Releases, apenas note que está compilada em modo Debug. Se quiser compilar a solução você mesmo, siga os passos abaixo.
CIMplant.exe --help
CIMplant.exe --show-commands
CIMplant.exe --show-examples
CIMplant.exe -s [remote IP address] -c cat -f c:\users\user\desktop\file.txt
CIMplant.exe -s [remote IP address] -u [username] -d [domain] -p [password] -c cat -f c:\users\test\desktop\file.txt
CIMplant.exe -s [remote IP address] -u [username] -d [domain] -p [password] -c command_exec --execute "dir c:\\"
cat - Lê o conteúdo de um arquivo
copy - Copia um arquivo de um local para outro
download** - Baixa um arquivo da máquina alvo
ls - Lista arquivos/diretórios de um diretório específico
search - Procura um arquivo em um usuário
upload** - Envia um arquivo para a máquina alvo
command_exec** - Executa um comando de linha de comando e recebe a saída. Execute com a flag nops para desabilitar o PowerShell
disable_wdigest - Define o valor do registro UseLogonCredential para zero
enable_wdigest - Adiciona o valor do registro UseLogonCredential
disable_winrm** - Desabilita o WinRM no sistema alvo
enable_winrm** - Habilita o WinRM no sistema alvo
reg_mod - Modifica o registro na máquina alvo
reg_create - Cria o valor do registro na máquina alvo
reg_delete - Exclui o registro na máquina alvo
remote_posh** - Executa um script PowerShell em uma máquina remota e recebe a saída
sched_job - Não implementado devido ao Win32_ScheduledJobs acessar uma API desatualizada
service_mod - Cria, exclui ou modifica serviços do sistema
process_kill - Mata um processo pelo nome ou ID na máquina alvo
process_start - Inicia um processo na máquina alvo
ps - Lista de processos
active_users - Lista usuários do domínio com processos ativos no sistema alvo
basic_info - Usado para enumerar metadados básicos do sistema alvo
drive_list - Lista unidades locais e de rede
ifconfig - Obtém informações de IP das placas de rede com conexões ativas
installed_programs - Obtém uma lista dos programas instalados na máquina alvo
logoff - Desconecta usuários da máquina alvo
reboot (ou restart) - Reinicia a máquina alvo
power_off (ou shutdown) - Desliga a máquina alvo
vacant_system - Determina se um usuário está ausente do sistema
edr_query - Consulta o sistema local ou remoto por fornecedores de EDR
logon_events - Identifica usuários que fizeram login em um sistema
* Todo o PowerShell pode ser desabilitado usando a flag --nops, embora alguns comandos não sejam executados (upload/download, enable/disable WinRM)
** Indica uso de PowerShell (seja usando um PowerShell Runspace ou através do método Win32_Process::Create)

Eu quis codificar o CIMplant de uma forma que permitisse o uso através do execute-assembly, então tudo está empacotado em um único executável e carregado reflexivamente. Você deve conseguir executar todos os comandos através do beacon sem problemas. Aproveite!

Este é o cérebro da operação, o driver do programa.
É aqui que as conexões iniciais CIM/WMI são feitas e passadas para o restante da aplicação
Todo o código das funções para os comandos WMI
Todo o código das funções para os comandos CIM (MI)
Claro, a primeira coisa que queremos observar é a conexão inicial WMI ou CIM. Em geral, o WMI usa DCOM como protocolo de comunicação, enquanto o CIM usa WSMan (ou WinRM). Isso pode ser modificado para CIM, e é no CIMplant, mas vamos abordar apenas os valores padrão por enquanto. Para DCOM, a primeira coisa que podemos fazer é procurar por conexões TCP iniciais na porta 135. Os sistemas conector e receptor decidirão uma nova porta muito alta para usar, então isso variará drasticamente. Para WSMan, a conexão TCP inicial é na porta 5985.
Em seguida, você deve procurar no log de eventos Microsoft-Windows-WMI-Activity/Trace no Visualizador de Eventos. Procure pelo Event ID 11 e filtre pela propriedade IsLocal se possível. Você também pode procurar pelo Event ID 1295 dentro do log Microsoft-Windows-WinRM/Analytic.
Finalmente, você deve procurar por quaisquer modificações na propriedade DebugFilePath com a classe Win32_OSRecoveryConfiguration. Informações mais detalhadas sobre detecção podem ser encontradas na Parte 1 da nossa série de blogs aqui: CIMplant Parte 1: Detecção de uma Implementação em C# do WMImplant