Episodio 6: Nmap Scripting Engine (NSE)
Duración: 1.5 horas (Estimada)
Introducción
¡Bienvenido/a al sexto episodio de nuestro curso completo de Nmap! En este módulo, exploraremos el Nmap Scripting Engine (NSE), un potente framework que extiende las capacidades de Nmap mucho más allá del escaneo básico. Aprenderás a usar scripts preconstruidos para reconocimiento avanzado, detección de vulnerabilidades y enumeración de servicios.
El NSE transforma Nmap de un simple escáner de puertos a una plataforma comprensiva de evaluación de seguridad. Es como pasar de una lupa a un laboratorio forense completo.
Con más de 600 scripts incorporados, NSE puede automatizar tareas complejas, detectar vulnerabilidades y extraer información detallada de los servicios de red.
Al final de este módulo, podrás aprovechar los scripts NSE para realizar reconocimientos avanzados, detectar vulnerabilidades y extraer información valiosa de los servicios de red, todo dentro del familiar framework de Nmap.
Fundamentos de NSE
¿Qué es el Nmap Scripting Engine?
El Nmap Scripting Engine (NSE) es un potente framework de extensión que permite a los usuarios escribir y compartir scripts para automatizar una amplia variedad de tareas de red. Estos scripts están escritos en el lenguaje de programación Lua y se ejecutan durante los escaneos de Nmap.
NSE permite a Nmap:
- Realizar detección avanzada de servicios
- Detectar vulnerabilidades
- Descubrir información de la red
- Realizar ataques de fuerza bruta
- Explotar vulnerabilidades
- Generar reportes comprensivos
El NSE se introdujo en Nmap 4.21 en 2007 y desde entonces se ha convertido en una de las características más potentes de Nmap, con cientos de scripts disponibles en la distribución estándar y más disponibles en la comunidad.
Categorías de Scripts NSE
Los scripts NSE se organizan en categorías según su funcionalidad:
- auth: Scripts relacionados con autenticación
- broadcast: Scripts que transmiten en la red local
- brute: Scripts que realizan auditoría de contraseñas por fuerza bruta
- default: Scripts que se ejecutan por defecto con
-sCo-A - discovery: Scripts que descubren más sobre la red
- dos: Scripts que pueden causar denegación de servicio
- exploit: Scripts que explotan vulnerabilidades
- external: Scripts que pueden enviar datos a bases de datos de terceros
- fuzzer: Scripts que realizan pruebas de fuzzing a objetivos
- intrusive: Scripts que podrían bloquear sistemas o ser considerados intrusivos
- malware: Scripts que verifican infecciones de malware
- safe: Scripts que no se consideran intrusivos
- version: Scripts que asisten en la detección de servicio/versión
- vuln: Scripts que verifican vulnerabilidades específicas
Entender estas categorías nos ayuda a seleccionar los scripts apropiados para diferentes escenarios y requisitos de seguridad.
Uso Básico de NSE
Comencemos con los comandos básicos de NSE:
Ejecutando Scripts Predeterminados
nmap -sC 192.168.1.1Esto ejecuta el conjunto predeterminado de scripts, que generalmente son seguros y proporcionan información útil sin ser intrusivos.
Mostrar Salida de Ejemplo
Starting Nmap 7.94 ( https://nmap.org ) at 2025-04-14 20:00 EDT Nmap scan report for 192.168.1.1 Host is up (0.0023s latency). Not shown: 995 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 3072 da:db:85:cc:5e:2d:d9:a2:52:f5:87:f2:8f:1e:c2:82 (RSA) | 256 c1:8a:f5:82:96:e2:93:68:95:b7:a1:ce:a1:4b:77:19 (ECDSA) |_ 256 cf:c1:34:c2:2d:e1:32:b2:e5:e0:3d:f4:f8:64:59:c9 (ED25519) 53/tcp open domain | dns-nsid: |_ bind.version: 9.16.1-Ubuntu 80/tcp open http |_http-title: Apache2 Ubuntu Default Page: It works |_http-server-header: Apache/2.4.41 (Ubuntu) 443/tcp open https |_ssl-date: TLS randomness does not represent time | ssl-cert: Subject: commonName=philocyber.com | Subject Alternative Name: DNS:philocyber.com, DNS:www.philocyber.com | Not valid before: 2025-01-14T00:00:00 |_Not valid after: 2026-01-14T23:59:59 8443/tcp open https-alt Nmap done: 1 IP address (1 host up) scanned in 2.35 seconds
Notá cómo los scripts proporcionan información adicional sobre cada servicio, como las claves de host SSH, la versión del servidor DNS, detalles del servidor HTTP e información del certificado SSL.
Ejecutando Scripts por Categoría
nmap --script=discovery 192.168.1.1Esto ejecuta todos los scripts de la categoría "discovery", que se centran en descubrir más información sobre el objetivo.
Mostrar Salida de Ejemplo
Starting Nmap 7.94 ( https://nmap.org ) at 2025-04-14 20:05 EDT Pre-scan script results: | broadcast-dhcp-discover: | Response 1 of 1: | IP Offered: 192.168.1.100 | DHCP Message Type: DHCPOFFER | Server Identifier: 192.168.1.1 | IP Address Lease Time: 1 day, 0:00:00 | Subnet Mask: 255.255.255.0 | Router: 192.168.1.1 | Domain Name Server: 192.168.1.1 |_ Domain Name: home Nmap scan report for 192.168.1.1 Host is up (0.0023s latency). Not shown: 995 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 3072 da:db:85:cc:5e:2d:d9:a2:52:f5:87:f2:8f:1e:c2:82 (RSA) | 256 c1:8a:f5:82:96:e2:93:68:95:b7:a1:ce:a1:4b:77:19 (ECDSA) |_ 256 cf:c1:34:c2:2d:e1:32:b2:e5:e0:3d:f4:f8:64:59:c9 (ED25519) 53/tcp open domain | dns-nsid: |_ bind.version: 9.16.1-Ubuntu 80/tcp open http |_http-title: Apache2 Ubuntu Default Page: It works |_http-server-header: Apache/2.4.41 (Ubuntu) 443/tcp open https |_ssl-date: TLS randomness does not represent time | ssl-cert: Subject: commonName=philocyber.com | Subject Alternative Name: DNS:philocyber.com, DNS:www.philocyber.com | Not valid before: 2025-01-14T00:00:00 |_Not valid after: 2026-01-14T23:59:59 8443/tcp open https-alt Host script results: | dns-brute: | DNS Brute-force hostnames: | mail.philocyber.com - 203.0.113.10 | www.philocyber.com - 203.0.113.10 | ftp.philocyber.com - 203.0.113.10 |_ admin.philocyber.com - 203.0.113.10 Nmap done: 1 IP address (1 host up) scanned in 8.35 seconds
Ejecutando Scripts Específicos
nmap --script=http-title,http-headers 192.168.1.1 -p 80Esto ejecuta solo los scripts especificados contra el puerto HTTP del objetivo.
Mostrar Salida de Ejemplo
Starting Nmap 7.94 ( https://nmap.org ) at 2025-04-14 20:10 EDT Nmap scan report for 192.168.1.1 Host is up (0.0023s latency). PORT STATE SERVICE 80/tcp open http |_http-title: Apache2 Ubuntu Default Page: It works | http-headers: | Date: Wed, 14 Apr 2025 00:10:15 GMT | Server: Apache/2.4.41 (Ubuntu) | Last-Modified: Mon, 10 Apr 2025 10:30:22 GMT | ETag: "2c39-61b63e5c46240" | Accept-Ranges: bytes | Content-Length: 11321 | Vary: Accept-Encoding | Connection: close | Content-Type: text/html | |_ (Request type: GET) Nmap done: 1 IP address (1 host up) scanned in 0.35 seconds
Ejecutando Scripts con Comodines (Wildcards)
nmap --script="http-*" 192.168.1.1 -p 80Esto ejecuta todos los scripts cuyos nombres comienzan con "http-" contra el puerto HTTP del objetivo.
Combinando Categorías de Scripts
nmap --script="default,safe" 192.168.1.1Esto ejecuta scripts de las categorías "default" y "safe".
Uso Avanzado de NSE
Argumentos de Script
Muchos scripts NSE aceptan argumentos para personalizar su comportamiento:
nmap --script=http-brute --script-args userdb=usuarios.txt,passdb=contraseñas.txt 192.168.1.1Esto ejecuta el script http-brute con listas personalizadas de nombres de usuario y contraseñas.
Ayuda de Script
Para obtener información sobre un script específico:
nmap --script-help=http-enumMostrar Salida de Ejemplo
Starting Nmap 7.94 ( https://nmap.org ) http-enum Categorías: discovery intrusive https://nmap.org/nsedoc/scripts/http-enum.html Enumera directorios usados por aplicaciones y servidores web populares. Esto analiza un archivo de huellas digitales (fingerprints) similar en formato al del escáner de aplicaciones web Nikto. Este script, sin embargo, va un paso más allá al incorporar coincidencias de patrones avanzadas y tener la capacidad de identificar versiones específicas de aplicaciones web. Podés pasar tu propio archivo de huellas digitales con el argumento de script 'fingerprints'. Argumentos del Script http-enum.basepath Ruta base para anteponer a todas las solicitudes. Predeterminado: / http-enum.displayall Establecer en true para mostrar todas las rutas, incluso si devuelven 404. Predeterminado: false http-enum.fingerprintfile Especificar un archivo diferente para leer las huellas digitales. http-enum.category Establecer en una categoría (como 'wordpress') para ejecutar solo las huellas digitales que coincidan con esa categoría. slaxml.debug Ver la documentación de la biblioteca slaxml. http.max-cache-size, http.max-pipeline, http.pipeline, http.useragent Ver la documentación de la biblioteca http. Ejemplo de Uso nmap --script=http-enum <objetivo> nmap --script=http-enum --script-args http-enum.basepath='pub/' <objetivo>
Timing y Rendimiento
Al ejecutar scripts complejos, puede ser necesario ajustar los parámetros de timing:
nmap --script=vuln -T4 --max-hostgroup 1 --min-rate 100 192.168.1.1Esto ejecuta scripts de detección de vulnerabilidades con configuraciones de timing agresivas.
Guardando la Salida de Scripts
nmap --script=default -oA resultados_scripts 192.168.1.1Esto guarda los resultados de los scripts en todos los formatos (normal, XML y grepable).
Categorías de Scripts en Profundidad
Exploremos algunas de las categorías de scripts más útiles:
Scripts de Descubrimiento (discovery)
Recopilan información sobre la red y los servicios.
nmap --script=discovery 192.168.1.0/24Scripts útiles incluyen:
- dns-brute: Intenta enumerar nombres de host DNS por fuerza bruta
- http-enum: Enumera directorios y archivos web comunes
- smb-enum-shares: Lista recursos compartidos SMB accesibles
- ssh-hostkey: Recupera claves de host SSH
- ssl-cert: Recupera información del certificado SSL
Scripts de Detección de Versión (version)
Mejoran las capacidades de detección de servicios de Nmap. Estos scripts se usan automáticamente con -sV.
nmap --script=version 192.168.1.1Scripts de Detección de Vulnerabilidades (vuln)
Verifican problemas de seguridad conocidos.
nmap --script=vuln 192.168.1.1Mostrar Salida de Ejemplo
Starting Nmap 7.94 ( https://nmap.org ) at 2025-04-14 20:20 EDT Nmap scan report for 192.168.1.1 Host is up (0.0023s latency). Not shown: 995 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh 53/tcp open domain 80/tcp open http |_http-csrf: No se encontraron vulnerabilidades CSRF. |_http-dombased-xss: No se encontraron XSS basados en DOM. | http-slowloris-check: | VULNERABLE: | Ataque DoS Slowloris | Estado: PROBABLEMENTE VULNERABLE | IDs: CVE:CVE-2007-6750 | Slowloris intenta mantener muchas conexiones abiertas al servidor web objetivo y | mantenerlas abiertas el mayor tiempo posible. Logra esto abriendo conexiones al | servidor web objetivo y enviando una solicitud parcial. Al hacerlo, agota | los recursos del servidor http causando Denegación de Servicio. | | Fecha de divulgación: 2009-09-17 | Referencias: | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750 |_ http://ha.ckers.org/slowloris/ |_http-stored-xss: No se encontraron vulnerabilidades XSS almacenadas. 443/tcp open https 8443/tcp open https-alt Nmap done: 1 IP address (1 host up) scanned in 30.42 seconds
Scripts populares incluyen:
- ssl-heartbleed: Verifica la vulnerabilidad Heartbleed
- smb-vuln-ms17-010: Verifica la vulnerabilidad EternalBlue
- http-shellshock: Verifica la vulnerabilidad Shellshock
- ssl-poodle: Verifica la vulnerabilidad POODLE
- http-vuln-cve2021-41773: Verifica vulnerabilidad path traversal en Apache
Scripts de Fuerza Bruta (brute)
Intentan adivinar contraseñas.
nmap --script=brute 192.168.1.1Scripts comunes incluyen:
- ftp-brute: Fuerza bruta credenciales FTP
- http-form-brute: Fuerza bruta autenticación basada en formularios HTTP
- mysql-brute: Fuerza bruta credenciales MySQL
- ssh-brute: Fuerza bruta credenciales SSH
- snmp-brute: Fuerza bruta community strings SNMP
Nota: Siempre asegurate de tener la autorización adecuada antes de usar scripts de fuerza bruta, ya que pueden activar bloqueos de cuenta y generar tráfico significativo.
Ejemplos de Scripts por Servicio
Exploremos scripts para servicios comunes:
Scripts de Servidor Web
nmap --script="http-*" -p 80,443 192.168.1.1Scripts útiles:
- http-enum: Enumera directorios y aplicaciones web
- http-headers: Muestra encabezados HTTP
- http-methods: Lista métodos HTTP soportados
- http-title: Muestra el título de la página web
- http-robots.txt: Verifica robots.txt
Scripts de Servidor de Base de Datos
nmap --script="mysql-*,ms-sql-*,mongodb-*" -p 1433,3306,27017 192.168.1.1Scripts útiles:
- mysql-info, ms-sql-info, mongodb-info
- mysql-databases
- ms-sql-empty-password
Scripts de Servidor de Correo
nmap --script="smtp-*,pop3-*,imap-*" -p 25,110,143,465,587,993,995 192.168.1.1Scripts útiles:
- smtp-commands, pop3-capabilities, imap-capabilities
- smtp-open-relay
- smtp-ntlm-info
Scripts de Windows/SMB
nmap --script="smb-*" -p 139,445 192.168.1.1Scripts útiles:
- smb-os-discovery
- smb-enum-shares, smb-enum-users
- smb-protocols, smb-security-mode
Creando Flujos de Trabajo con Scripts
Para evaluaciones comprensivas, combinamos scripts en flujos de trabajo:
Evaluación de Aplicación Web
nmap -p 80,443 --script="http-enum,http-headers,http-methods,http-title,http-robots.txt,http-vuln-*" 192.168.1.1Este flujo de trabajo:
- Identifica directorios y aplicaciones web
- Examina encabezados y métodos HTTP
- Verifica vulnerabilidades web comunes
Auditoría de Servicios de Red
nmap -p- --script="default,discovery,version" --script-timeout 2m 192.168.1.1Este flujo de trabajo:
- Escanea todos los puertos
- Ejecuta scripts predeterminados para información básica
- Ejecuta scripts de descubrimiento para encontrar más detalles de la red
- Mejora la detección de versión
Verificación de Cumplimiento de Seguridad
nmap -p 22,23,25,80,443,445,3389 --script="ssl-cert,ssh-auth-methods,telnet-encryption,smb-security-mode" 192.168.1.1Este flujo de trabajo verifica:
- Validez del certificado SSL
- Métodos de autenticación SSH
- Encriptación Telnet
- Configuraciones de seguridad SMB
Ejercicios Prácticos
Ejercicio 1: Exploración Básica de Scripts
Ejecutá los scripts predeterminados contra un objetivo y analizá los resultados:
nmap -sC 192.168.1.1 -oN scripts_default.txtPreguntas a responder:
- ¿Qué información adicional proporcionaron los scripts?
- ¿Qué servicios tuvieron la mayor cantidad de salida de script?
- ¿Algún script identificó posibles problemas de seguridad?
Ejercicio 2: Enumeración Específica por Servicio
Realizá enumeración detallada de servicios específicos:
# Enumeración de servidor web
nmap --script="http-enum,http-headers,http-methods" -p 80,443 192.168.1.1 -oN enum_web.txt
# Enumeración SSH
nmap --script="ssh-hostkey,ssh-auth-methods" -p 22 192.168.1.1 -oN enum_ssh.txt
# Compará la información recopiladaCreá una tabla mostrando qué información proporcionó cada script y cómo podría ser útil para una evaluación de seguridad.
Ejercicio 3: Escaneo de Vulnerabilidades
Realizá un escaneo de vulnerabilidades en tu objetivo:
nmap --script=vuln 192.168.1.1 -oN escaneo_vuln.txtAnalizá los resultados:
- ¿Qué vulnerabilidades se detectaron?
- ¿Cuál es la severidad de cada vulnerabilidad?
- ¿Cómo verificarías estas vulnerabilidades?
- ¿Qué pasos de remediación recomendarías?
Ejercicio 4: Flujo de Trabajo de Script Personalizado
Creá un flujo de trabajo de script personalizado para un escenario específico:
# Ejemplo: Evaluación de red interna nmap -p 21-25,80,139,445 --script="default,discovery,safe" 192.168.1.0/24 -oA evaluacion_internaDocumentá tu flujo de trabajo:
- ¿Qué scripts incluiste y por qué?
- ¿A qué puertos apuntaste y por qué?
- ¿Cómo interpretarías y reportarías los resultados?
Errores Comunes y Soluciones
Timeouts de Script
Problema: Los scripts tardan demasiado o agotan el tiempo de espera.
Solución:
# Ajustar timeout del script
nmap --script=vuln --script-timeout 5m 192.168.1.1Falsos Positivos
Problema: Los scripts reportan vulnerabilidades que no existen.
Solución:
# Verificar con otras herramientas/pruebas manuales
nmap --script=ssl-heartbleed ...
# Luego verificar con tester dedicadoErrores de Script
Problema: Los scripts fallan con errores.
Solución:
# Actualizar base de datos NSE
nmap --script-updatedb
# Ejecutar con debugging
nmap --script=... -d ...Tráfico Excesivo
Problema: Los scripts son demasiado intrusivos/ruidosos.
Solución:
# Usar scripts dirigidos/seguros
nmap --script="safe" ...
# Controlar timing
--min-rate 100 --max-retries 1Aplicaciones en el Mundo Real
Caso de Estudio: Evaluación de Aplicación Web
Un equipo de seguridad usó scripts NSE para evaluar una aplicación web:
- Descubrimiento inicial de servicios:
nmap -sV -p 80,443 ejemplo.com - Enumeración de app web:
nmap --script="http-enum,http-headers,http-methods" ... - Escaneo de vulnerabilidades:
nmap --script="http-vuln-*" ...
Esto identificó software desactualizado, interfaces expuestas, métodos inseguros y fuga de información, llevando a recomendaciones específicas de remediación.
Caso de Estudio: Auditoría de Seguridad de Red
Un administrador de red usó NSE para una auditoría de seguridad:
- Enumeración de servicios:
nmap -sV 10.0.0.0/24 - Verificaciones de configuración de seguridad:
nmap --script="ssl-cert,ssh-auth-methods,smb-security-mode" ... - Escaneo de vulnerabilidades:
nmap --script="vuln" ...
Esto reveló certificados expirados, autenticación débil, SMB inseguro y exploits conocidos, permitiendo priorizar actualizaciones y cambios de configuración.
Puntos Clave
- El Nmap Scripting Engine extiende las capacidades de Nmap mucho más allá del escaneo básico de puertos.
- Las categorías de scripts ayudan a organizar y seleccionar los scripts apropiados.
- Los scripts específicos por servicio proporcionan información detallada sobre los servicios de red.
- Los scripts de detección de vulnerabilidades pueden identificar problemas de seguridad automáticamente.
- Se pueden crear flujos de trabajo de scripts personalizados para escenarios de evaluación específicos.
- Los argumentos de script permiten la personalización del comportamiento del script.
- La selección adecuada de scripts equilibra la recopilación de información con el impacto en la red.
- NSE convierte a Nmap en una plataforma comprensiva de evaluación de seguridad.
Próximos Pasos
En el próximo episodio, exploraremos:
- Técnicas avanzadas de escaneo
- Evasión de Firewall e IDS
- Optimizando escaneos para diferentes entornos
- Ajuste de timing y rendimiento del escaneo
- Manejando condiciones de red desafiantes
Recursos Adicionales
Documentación Oficial de NSE
Base de Datos de Scripts NSE
Escribiendo Scripts NSE (Tutorial)
Referencia de Librerías NSE
Scripts NSE de la Comunidad (GitHub)
Demostración en Video
Nota: Usá este video como guía visual para complementar el material escrito.
Quiz
Knowledge Check
1. ¿Cuál es el propósito principal del Nmap Scripting Engine (NSE)?
2. ¿Qué opción de Nmap se utiliza para ejecutar el conjunto predeterminado de scripts NSE?
3. Si querés ejecutar todos los scripts NSE que se categorizan como potencialmente peligrosos o que podrían interrumpir servicios, ¿qué categoría seleccionarías?
4. ¿Cómo podés proporcionar parámetros o configuraciones específicas a un script NSE al ejecutarlo con Nmap?
5. ¿Cuál es una estrategia común para realizar una evaluación comprensiva de una aplicación web usando Nmap Scripting Engine?

