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:
[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:
echo 'MiPassword123!' > password.txt
crackmapexec smb <IP> -u <user> -p password.txt --shares
netexec smb <IP> -u <user> -p password.txt --sharesSoporte 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
crackmapexec smb <IP> -u <user> -p '<password>' -M get_netconnections
netexec smb <IP> -u <user> -p '<password>' -M get_netconnectionsConectar usando IPv6
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:
echo '10.129.203.121 dc01.domain.local dc01 domain domain.local' | sudo tee -a /etc/hostsAutenticación con usuario y contraseña (Kerberos)
Por defecto CME usa NTLM. Para usar Kerberos agregar -k o --kerberos:
# 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 --sharesIdentificar usuarios via Kerberos (sin lockout)
CME actúa como Kerbrute enviando TGT requests sin pre-autenticación para identificar cuentas:
crackmapexec smb <IP> -u users.txt -p 'cualquierpass' --kerberos
netexec smb <IP> -u users.txt -p 'cualquierpass' --kerberosInterpretación del output
KDC_ERR_C_PRINCIPAL_UNKNOWN— El usuario no existe en el dominioKDC_ERR_PREAUTH_FAILED— El usuario existe pero la contraseña es incorrectaaccount 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.
# 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
getTGT.py <DOMAIN>/<user>:'<password>' -dc-ip <IP_DC>
# Genera <user>.ccacheConfigurar variable de entorno
export KRB5CCNAME=$(pwd)/<user>.ccacheUsar el ccache con --use-kcache
No requiere especificar usuario ni contraseña.
# 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-kcacheNota 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
crackmapexec smb <IP> --use-kcache --shares
crackmapexec smb <IP> --use-kcache -x whoami
crackmapexec smb <IP> --use-kcache --ntds
netexec smb <IP> --use-kcache --sharesResumen 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 enKRB5CCNAME--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
# 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.dbAbrir cmedb
cmedb
# Prompt: cmedb (default) >Workspaces
Los workspaces permiten separar datos de diferentes engagements.
# Crear workspace
workspace create <nombre>
# Listar workspaces
workspace list
# Cambiar de workspace
workspace <nombre>
# Volver al root desde un protocolo
backAcceder a la base de datos de un protocolo
Solo SMB y MSSQL tienen opciones completas. El resto solo soportan import/export.
# Entrar al protocolo SMB
proto smb
# Ver opciones disponibles
help
# Salir al root
backCredenciales
Ver todas las credenciales
cmedb (default)(smb) > credsFiltrar por usuario
cmedb (default)(smb) > creds <username>Ver solo hashes
cmedb (default)(smb) > creds hashVer solo credenciales en texto claro
cmedb (default)(smb) > creds plaintextAgregar credencial manualmente
# Formato: add domain username password
cmedb (default)(smb) > creds add DOMAIN username Password123Eliminar credencial por ID
cmedb (default)(smb) > creds remove <CredID>Usar credencial por ID en CME/NXC
# CrackMapExec
crackmapexec smb <IP> -id <CredID> -x whoami
# NetExec
netexec smb <IP> -id <CredID> -x whoamiHosts
Muestra todos los hosts identificados con su IP, hostname, dominio, OS, SMBv1 y estado de signing.
# 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.
cmedb (default)(smb) > sharesExportar datos
# 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.csvLos archivos exportados son CSV y pueden abrirse con LibreOffice o Excel.
Importar desde Empire
cmedb (default)(smb) > import empireRequiere Empire configurado y corriendo con su API activa.
Grupos (SMB)
cmedb (default)(smb) > groupsProtocolo 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.
cmedb (default) > proto mssql
cmedb (default)(mssql) > creds