Nmap Avanzado: Scripts NSE para Recon Interno en Lab Corporativo Simulado
Como aprovechar el NSE para enumeracion autorizada en redes internas simuladas, con ejemplos de scripts, parseo de salida e integracion en pipelines de pentest.

Nmap no esta muerto, y quien lo crea nunca abrio /usr/share/nmap/scripts. El Nmap Scripting Engine (NSE) incluye mas de 600 scripts en Lua, desde fingerprint de servicios legados hasta enumeracion de Active Directory via LDAP sin autenticar. En un laboratorio corporativo simulado, armado por ejemplo con GOAD o Ludus, el NSE reemplaza decenas de herramientas puntuales y devuelve XML estructurado, lo que hace el tooling reproducible. Este articulo plantea un flujo de recon fiable en tres etapas: barrido amplio de puertos, enumeracion por servicio y validacion dirigida. Antes de cualquier flag exotica, el punto innegociable es alcance por escrito: sin autorizacion formal, escanear esta tan mal como abrir el buzon ajeno y, en muchas jurisdicciones, es delito. Aqui asumimos siempre un lab propio, aislado y documentado.
Por que NSE en lugar de diez herramientas sueltas
El valor real del NSE es la consolidacion. En vez de correr enum4linux, smbmap, ldapsearch y una docena de snippets Python uno tras otro, un solo motor orquesta las sondas y normaliza la salida. Los scripts llevan categorias como safe, discovery, intrusive, vuln y brute, asi que gobiernas el riesgo con granularidad. --script safe corre solo chequeos no invasivos, --script vuln agrega verificaciones de vulnerabilidades conocidas. Esa distincion no es cosmetica: en un entorno parecido a produccion, la categoria decide si tu escaneo tumba un servicio. Antes de usar cualquier cosa, lee nmap --script-help <nombre>, porque la documentacion detalla categoria, argumentos y efectos secundarios de cada script.
El lab: GOAD, Ludus y aislamiento de red
Un lab de recon serio necesita una topologia realista. GOAD (Game of Active Directory) entrega un entorno AD multidominio vulnerable, mientras que Ludus automatiza el despliegue de rangos de ataque completos sobre Proxmox. Ambos viven en un VLAN segregado sin ruta hacia produccion. Lo que importa es una interfaz de gestion separada para tu VM Kali o Parrot y una subred objetivo dedicada como 10.10.0.0/24. Si aun no tienes lab armado, Pentest Web desde Cero: Montando un Lab Seguro con DVWA, Juice Shop y Burp Suite es una referencia enxuta y reproducible que sirve como punto de partida y evita que tus practicas de recon se fuguen a la red abierta.
Etapa uno: un barrido de puertos limpio
Empieza por lo basico bien hecho. Un sweep inicial con nmap -sS -p- --min-rate 5000 -oA full_tcp 10.10.0.0/24 te entrega inventario TCP completo en pocos minutos sobre un /24 con latencia baja. El escaneo SYN (-sS) es mas rapido y silencioso que un connect completo, -p- cubre los 65535 puertos y --min-rate fija un piso para la tasa de paquetes. Un segundo paso enfocado, nmap -sV -sC -p$(cat ports.txt) -oA versioned -iL hosts.txt, corre los scripts default (categorias safe y discovery) sobre los puertos reales. Este flujo en dos etapas evita el pecado clasico del -A en un /16 entero, que satura sondas, genera ruido en el SIEM y te deja sin datos confiables. No olvides UDP: nmap -sU --top-ports 50 encuentra SNMP, NetBIOS e IKE que quedan invisibles en un escaneo TCP.
Etapa dos: enumeracion SMB
Donde el NSE realmente brilla es en enumeracion de servicios especificos. Para SMB, scripts como smb-os-discovery, smb2-security-mode, smb-enum-shares, smb-enum-users y smb-vuln-ms17-010 reconstruyen topologia Windows sin credenciales validas en muchos casos. Una invocacion tipica es nmap -p445 --script 'smb-os-discovery,smb2-security-mode,smb-enum-shares' 10.10.0.0/24. smb2-security-mode revela si el signing esta forzado, indicador directo de la viabilidad de SMB relay. smb-enum-shares lista recursos con sus permisos, y suele exponer directorios legibles de forma anonima llenos de scripts y backups. Vigila el acceso guest y recursos como SYSVOL, que en un dominio pueden contener Group Policy Preferences con contrasenas reversiblemente cifradas.
Etapa dos: LDAP y Active Directory
Para LDAP, ldap-search con el filtro (objectClass=user) revela cuentas de servicio, descripciones con contrasenas pegadas (mas comun de lo que admiten) y politicas de password debiles. La llamada nmap -p389 --script ldap-search --script-args 'ldap.base="dc=corp,dc=lab"' 10.10.0.10 extrae bastante sin hacer bind. Scripts como ldap-rootdse devuelven contextos de nombres y niveles funcionales. En entornos AD tipo GOAD, este reconocimiento alimenta directamente el ataque descrito en Pentest de Active Directory: Kerberoasting Paso a Paso en Lab GOAD, donde Kerberoasting depende de SPNs identificados aun en la fase de recon. Suma krb5-enum-users para confirmar nombres de cuenta validos via respuestas de preauth Kerberos sin generar un fallo de login.
Enumeracion web y scripts HTTP
Para granjas web, combina http-title, http-enum, http-headers y http-methods para mapear paisajes de aplicaciones enteros en segundos. http-enum sondea rutas conocidas (paneles admin, .git, archivos de backup), mientras que http-methods --script-args http-methods.test-all expone verbos peligrosos como PUT. Una llamada como nmap -p80,443,8080,8443 --script 'http-title,http-headers,http-enum' -iL web_hosts.txt basta para una primera pasada. Para stacks Java expuestos, los endpoints abiertos de Spring Boot Actuator y las configuraciones inseguras de Jenkins son los hallazgos mas rentables, porque a menudo llevan directo a ejecucion remota de codigo.
Scripts vuln y escaneos credentialed
Cuando ya tienes credenciales validas de un foothold, el NSE se vuelve mucho mas potente. --script-args smbusername=svc_backup,smbpassword=... desbloquea smb-enum-shares y smb-enum-sessions para la vista autenticada que queda oculta de forma anonima. La categoria vuln agrupa chequeos como smb-vuln-ms17-010, http-vuln-cve2017-5638 (Struts) y ssl-heartbleed; combinado con --script-args vulns.showall ves tambien las verificaciones que no dispararon. Importante: los scripts vuln confirman presencia, no explotabilidad. Un positivo de ms17-010 en el lab es el punto de partida para una explotacion controlada, nunca para disparar a ciegas contra hosts desconocidos. Documenta cada positivo con nombre de script, argumentos y timestamp para que el informe siga siendo reproducible despues.
Salida parseable y pipeline
Salida util es salida parseable. Usa siempre -oA basename, que genera .nmap, .gnmap y .xml simultaneamente. El XML alimenta nmap-parse-output, dnmap, o un script Python propio con python-libnmap. En equipos grandes, ingerir XML en Elasticsearch y cruzarlo con reglas Sigma convierte el recon ofensivo en insumo del blue team, cerrando el ciclo descrito en Purple Team en la Practica: Construyendo Ciclo de Feedback Red vs Blue. Evita pegar salida cruda en un prompt de LLM para resumir: ademas del riesgo de fuga, pierdes campos como reason_ttl que son oro para detectar un IPS en el camino.
Escribir NSE propio en Lua
Los scripts personalizados son el truco maestro. Escribir NSE en Lua es mas simple de lo que parece: un archivo en ~/.nmap/scripts/ con las tres partes obligatorias, description, categories y portrule, mas una funcion action, ya corre. Un script minimo define portrule = shortport.port_or_service(8080, "http-proxy") y llama a la libreria http dentro de action para armar un chequeo de CVE interno. Tras dejar el archivo, refresca la base con nmap --script-updatedb. En red team autorizado vale crear chequeos para CVEs internos no publicos. Para el ciclo posterior, cuando ya tienes foothold y quieres pivotar, el material de Pivoting con Chisel y Ligolo-ng: Redes Segmentadas en Lab de Pentest encaja porque asume reconocimiento ya consolidado.
Timing, firewalls y deteccion
Cuidado con timing y firewalls stateful. -T4 rompe muchos IDS viejos, pero hoy genera alerta facil en XDR moderno. Para lab realista, ajusta --max-retries 2, --host-timeout 30m y --scan-delay 100ms en redes con NIDS Suricata. Usa --source-port 53 o --data-length 24 para probar reglas laxas que confian en puerto origen, patron lamentablemente aun comun. Del lado del blue team, un escaneo SYN sobre todos los puertos produce una firma marcada de muchas conexiones semiabiertas; Zeek y Suricata lo detectan con fiabilidad. Si trabajas en defensa, construye reglas de deteccion sobre exactamente eso y mide tu propia tasa de deteccion contra los escaneos mostrados aqui.
Errores comunes y checklist
Los errores mas comunes: lanzar -A contra rangos demasiado grandes, ignorar UDP por completo, no guardar el XML y tratar las suposiciones de version como hechos. Checklist antes de cada corrida: (1) autorizacion escrita y scope en mano; (2) la subred objetivo esta aislada; (3) etapa uno solo -sS -p- con -oA; (4) etapa dos -sV --script "safe,discovery" solo contra puertos abiertos; (5) etapa tres NSE especifico por servicio, documentado por script; (6) top ports UDP revisados; (7) toda la salida archivada, incluso los escaneos fallidos, porque suelen senalar ACLs interesantes que merecen revision manual posterior.
FAQ
Es -sV seguro contra produccion? Casi siempre, pero stacks SCADA e impresoras viejas son fragiles ante sondas de version. Reduce con --version-intensity 2 y excluye hosts fragiles. Puede el NSE tumbar un objetivo? Si, sobre todo scripts de las categorias intrusive y dos. Quedate en safe y discovery salvo que un encargo explicito cubra mas, y prueba cada script nuevo primero en el lab.
Al final, NSE no reemplaza el pensamiento. Nmap encuentra puertos y adivina versiones; correlacionar hallazgos, priorizar exploit path y respetar limites del scope sigue siendo trabajo humano. Takeaway practico: arma un pipeline de tres capas, sweep amplio con -sS -p-, enumeracion con -sV --script "safe,discovery" y validacion con NSE especifico por servicio, siempre exportando XML para parseo posterior. En dos horas mapeas mejor un /24 corporativo que muchos escaneos automatizados de pago. Y recuerda, sin autorizacion escrita, nada de esto es pentest, es delito.


