Skip to content
PhiloCyber logo

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 -sC o -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.1

Esto 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.1

Esto 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 80

Esto 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 80

Esto 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.1

Esto 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.1

Esto 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-enum
Mostrar 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.1

Esto 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.1

Esto 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/24

Scripts ú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.1

Scripts de Detección de Vulnerabilidades (vuln)

Verifican problemas de seguridad conocidos.

nmap --script=vuln 192.168.1.1
Mostrar 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.1

Scripts 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.1

Scripts ú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.1

Scripts ú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.1

Scripts ú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.1

Scripts ú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.1

Este flujo de trabajo:

  1. Identifica directorios y aplicaciones web
  2. Examina encabezados y métodos HTTP
  3. Verifica vulnerabilidades web comunes

Auditoría de Servicios de Red

nmap -p- --script="default,discovery,version" --script-timeout 2m 192.168.1.1

Este flujo de trabajo:

  1. Escanea todos los puertos
  2. Ejecuta scripts predeterminados para información básica
  3. Ejecuta scripts de descubrimiento para encontrar más detalles de la red
  4. 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.1

Este flujo de trabajo verifica:

  1. Validez del certificado SSL
  2. Métodos de autenticación SSH
  3. Encriptación Telnet
  4. 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.txt

Preguntas a responder:

  1. ¿Qué información adicional proporcionaron los scripts?
  2. ¿Qué servicios tuvieron la mayor cantidad de salida de script?
  3. ¿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 recopilada

Creá 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.txt

Analizá los resultados:

  1. ¿Qué vulnerabilidades se detectaron?
  2. ¿Cuál es la severidad de cada vulnerabilidad?
  3. ¿Cómo verificarías estas vulnerabilidades?
  4. ¿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_interna

Documentá tu flujo de trabajo:

  1. ¿Qué scripts incluiste y por qué?
  2. ¿A qué puertos apuntaste y por qué?
  3. ¿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.1

Falsos 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 dedicado

Errores 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 1

Aplicaciones 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:

  1. Descubrimiento inicial de servicios: nmap -sV -p 80,443 ejemplo.com
  2. Enumeración de app web: nmap --script="http-enum,http-headers,http-methods" ...
  3. 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:

  1. Enumeración de servicios: nmap -sV 10.0.0.0/24
  2. Verificaciones de configuración de seguridad: nmap --script="ssl-cert,ssh-auth-methods,smb-security-mode" ...
  3. 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

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?