Skip to content

Additional CME Functionality

Funcionalidades extra de CME/NXC útiles en escenarios reales: modo auditoría para reportes, soporte IPv6 y seguimiento de progreso en escaneos masivos.

Links: CrackMapExec Wiki | NetExec Docs


Audit Mode

Reemplaza la contraseña o hash en el output con un carácter definido. Útil para capturas de pantalla en reportes de clientes sin exponer credenciales.

Configurar audit mode

Editar ~/.cme/cme.conf y establecer el carácter en audit_mode:

ini
[CME]
workspace = default
last_used_db = smb
pwn3d_label = Pwn3d!
audit_mode = #

Con esto activo, el output muestra ######## en lugar de la contraseña real.

Usar con contraseña en archivo

Para que el comando tampoco muestre la contraseña, guardarla en un archivo y pasarlo con -p:

bash
echo 'MiPassword123!' > password.txt

crackmapexec smb <IP> -u <user> -p password.txt --shares
netexec smb <IP> -u <user> -p password.txt --shares

Soporte IPv6

CME/NXC soporta IPv6 de forma nativa. Muchas organizaciones tienen IPv6 habilitado por defecto y con menor monitoreo que IPv4.

Obtener la IPv6 del target

bash
crackmapexec smb <IP> -u <user> -p '<password>' -M get_netconnections
netexec smb <IP> -u <user> -p '<password>' -M get_netconnections

Conectar usando IPv6

bash
crackmapexec smb <IPv6> -u <user> -p '<password>' -x whoami
netexec smb <IPv6> -u <user> -p '<password>' -x whoami

# Ejemplo
crackmapexec smb dead:beef::8c8a:5209:5876:537d -u robert -p password.txt -x "ipconfig"
netexec smb dead:beef::8c8a:5209:5876:537d -u robert -p password.txt -x "ipconfig"

Porcentaje de completado

Durante escaneos masivos, presionar Enter muestra el porcentaje de progreso y hosts restantes.

[*] completed: 45.00% (9/20)

No requiere configuración especial, funciona en cualquier comando contra múltiples targets.

Kerberos Authentication

CME/NXC soporta autenticación Kerberos para los protocolos SMB, LDAP y MSSQL. Requiere que el FQDN del DC y del target estén resolvibles desde el atacante.

Links: CrackMapExec Wiki | NetExec Docs | Impacket getTGT | Impacket secretsdump | Kerbrute | ccache docs


Prerequisito - Configurar /etc/hosts

El DC y los targets deben resolverse por FQDN:

bash
echo '10.129.203.121 dc01.domain.local dc01 domain domain.local' | sudo tee -a /etc/hosts

Autenticación con usuario y contraseña (Kerberos)

Por defecto CME usa NTLM. Para usar Kerberos agregar -k o --kerberos:

bash
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' --kerberos
crackmapexec smb <IP> -u <user> -p '<password>' -k --shares

# NetExec
netexec smb <IP> -u <user> -p '<password>' --kerberos
netexec smb <IP> -u <user> -p '<password>' -k --shares

Identificar usuarios via Kerberos (sin lockout)

CME actúa como Kerbrute enviando TGT requests sin pre-autenticación para identificar cuentas:

bash
crackmapexec smb <IP> -u users.txt -p 'cualquierpass' --kerberos
netexec smb <IP> -u users.txt -p 'cualquierpass' --kerberos

Interpretación del output

  • KDC_ERR_C_PRINCIPAL_UNKNOWN — El usuario no existe en el dominio
  • KDC_ERR_PREAUTH_FAILED — El usuario existe pero la contraseña es incorrecta
  • account vulnerable to asreproast attack — La cuenta no requiere pre-autenticación (ASREPRoastable)

Nota: No genera login failures ni bloquea cuentas, pero genera Event ID 4768 si el logging de Kerberos está habilitado.


Autenticación con AES Keys

Más sigiloso que NTLM ya que el tráfico parece Kerberos legítimo. Las AES keys se obtienen con secretsdump.

bash
# Obtener AES keys con secretsdump
secretsdump.py <DOMAIN>/<user>:<password>@<IP>

# Autenticar con AES-256
crackmapexec smb <IP> -u <user> --aesKey <AES256_KEY>
netexec smb <IP> -u <user> --aesKey <AES256_KEY>

# Autenticar con AES-128
crackmapexec smb <IP> -u <user> --aesKey <AES128_KEY>
netexec smb <IP> -u <user> --aesKey <AES128_KEY>

Autenticación con ccache (ticket Kerberos)

Un ccache es un archivo que contiene tickets Kerberos válidos. Se puede reutilizar mientras la sesión esté activa.

Generar ticket TGT con getTGT.py

bash
getTGT.py <DOMAIN>/<user>:'<password>' -dc-ip <IP_DC>
# Genera <user>.ccache

Configurar variable de entorno

bash
export KRB5CCNAME=$(pwd)/<user>.ccache

Usar el ccache con --use-kcache

No requiere especificar usuario ni contraseña.

bash
# SMB
crackmapexec smb <IP> --use-kcache
netexec smb <IP> --use-kcache

# LDAP
crackmapexec ldap <IP> --use-kcache
netexec ldap <IP> --use-kcache

# MSSQL (requiere FQDN, no IP)
crackmapexec mssql dc01.domain.local --use-kcache
netexec mssql dc01.domain.local --use-kcache

Nota para MSSQL: El protocolo MSSQL no convierte la IP a FQDN automáticamente. Usar el nombre de host o FQDN como target.

Combinar ccache con cualquier opción de CME

bash
crackmapexec smb <IP> --use-kcache --shares
crackmapexec smb <IP> --use-kcache -x whoami
crackmapexec smb <IP> --use-kcache --ntds
netexec smb <IP> --use-kcache --shares

Resumen de opciones Kerberos

  • --kerberos / -k — Usar Kerberos con usuario y contraseña/hash
  • --aesKey <KEY> — Autenticar con AES-128 o AES-256
  • --use-kcache — Usar ticket ccache del archivo en KRB5CCNAME
  • --kdcHost <HOST> — Especificar el KDC manualmente si la resolución DNS falla

Mastering the CMEDB

CME almacena automáticamente credenciales, hosts, shares y grupos en una base de datos SQLite local. Se interactúa con ella a través de cmedb. NetExec usa una estructura similar en ~/.nxc/.

Links: CrackMapExec Wiki | NetExec Docs


Ubicación de la base de datos

bash
# CME
~/.cme/workspaces/default/

# NXC
~/.nxc/workspaces/default/

# Archivos por protocolo
ls ~/.cme/workspaces/default/
# ftp.db  ldap.db  mssql.db  rdp.db  smb.db  ssh.db  winrm.db

Abrir cmedb

bash
cmedb
# Prompt: cmedb (default) >

Workspaces

Los workspaces permiten separar datos de diferentes engagements.

bash
# Crear workspace
workspace create <nombre>

# Listar workspaces
workspace list

# Cambiar de workspace
workspace <nombre>

# Volver al root desde un protocolo
back

Acceder a la base de datos de un protocolo

Solo SMB y MSSQL tienen opciones completas. El resto solo soportan import/export.

bash
# Entrar al protocolo SMB
proto smb

# Ver opciones disponibles
help

# Salir al root
back

Credenciales

Ver todas las credenciales

bash
cmedb (default)(smb) > creds

Filtrar por usuario

bash
cmedb (default)(smb) > creds <username>

Ver solo hashes

bash
cmedb (default)(smb) > creds hash

Ver solo credenciales en texto claro

bash
cmedb (default)(smb) > creds plaintext

Agregar credencial manualmente

bash
# Formato: add domain username password
cmedb (default)(smb) > creds add DOMAIN username Password123

Eliminar credencial por ID

bash
cmedb (default)(smb) > creds remove <CredID>

Usar credencial por ID en CME/NXC

bash
# CrackMapExec
crackmapexec smb <IP> -id <CredID> -x whoami

# NetExec
netexec smb <IP> -id <CredID> -x whoami

Hosts

Muestra todos los hosts identificados con su IP, hostname, dominio, OS, SMBv1 y estado de signing.

bash
# Todos los hosts
cmedb (default)(smb) > hosts

# Filtrar por hostname
cmedb (default)(smb) > hosts <hostname>

Shares

Muestra todos los shares identificados con sus permisos de lectura y escritura por usuario.

bash
cmedb (default)(smb) > shares

Exportar datos

bash
# Exportar credenciales
cmedb (default)(smb) > export creds simple creds_simple.csv
cmedb (default)(smb) > export creds detailed creds_detailed.csv

# Exportar shares
cmedb (default)(smb) > export shares detailed shares.csv

# Exportar local admins
cmedb (default)(smb) > export local_admins detailed local_admins.csv

# Exportar hosts
cmedb (default)(smb) > export hosts detailed hosts.csv

Los archivos exportados son CSV y pueden abrirse con LibreOffice o Excel.


Importar desde Empire

bash
cmedb (default)(smb) > import empire

Requiere Empire configurado y corriendo con su API activa.


Grupos (SMB)

bash
cmedb (default)(smb) > groups

Protocolo MSSQL

Las credenciales MSSQL se almacenan separadas. Si el campo Domain muestra el nombre de una máquina en lugar del dominio, se trata de una cuenta SQL local.

bash
cmedb (default) > proto mssql
cmedb (default)(mssql) > creds