Fundamentos del Nmap Scripting Engine (NSE)

NmapBeginner
Practicar Ahora

Introducción

En este laboratorio, transformarás Nmap de un simple escáner de puertos a una herramienta de auditoría versátil. Explorarás el Nmap Scripting Engine (NSE), una de las características más potentes y flexibles de Nmap.

El NSE permite a los usuarios escribir y compartir scripts sencillos para automatizar una amplia variedad de tareas de red. Estos scripts se ejecutan en paralelo con la velocidad y eficiencia que esperas de Nmap. Al finalizar este laboratorio, sabrás cómo localizar estos scripts en tu sistema Linux, ejecutar scripts predeterminados no intrusivos y utilizar scripts específicos para extraer información automáticamente, como los títulos de páginas web HTTP.

El NSE es fundamental porque convierte a Nmap de un simple mapeador en una pequeña plataforma de auditoría. Una vez que se encuentra un puerto, los scripts pueden realizar consultas más detalladas sobre la aplicación sin necesidad de recurrir inmediatamente a una herramienta externa.

Localizar scripts del NSE

En este paso, explorarás dónde almacena Nmap sus scripts y cómo buscar algunos específicos.

El Nmap Scripting Engine (NSE) utiliza scripts escritos en el lenguaje de programación Lua. Cuando instalas Nmap en un sistema Linux, este viene preempaquetado con cientos de estos scripts, que cubren desde el descubrimiento básico de red hasta la explotación compleja de vulnerabilidades.

Aprender dónde residen los scripts es útil porque tanto los defensores como los evaluadores necesitan comprender qué lógica están ejecutando realmente contra un objetivo.

De forma predeterminada, Nmap almacena todos sus scripts NSE en el directorio /usr/share/nmap/scripts/. Puedes listar el contenido de este directorio para ver qué hay disponible.

Ejecuta el siguiente comando para listar los primeros scripts del directorio:

ls /usr/share/nmap/scripts/ | head -n 10

Verás una salida similar a esta:

acarsd-info.nse
address-info.nse
afp-brute.nse
afp-ls.nse
afp-path-vuln.nse
afp-serverinfo.nse
afp-showmount.nse
ajp-auth.nse
ajp-brute.nse
ajp-headers.nse

Observa que todos los archivos terminan con la extensión .nse, que significa Nmap Scripting Engine.

Dado que hay más de 600 scripts, suele ser útil buscar scripts relacionados con un servicio específico. Por ejemplo, si deseas encontrar scripts relacionados con HTTP (servidores web), puedes usar el comando grep para filtrar los resultados.

Ejecuta el siguiente comando para encontrar scripts relacionados con HTTP:

ls /usr/share/nmap/scripts/ | grep http | head -n 10

Esto mostrará una lista de scripts diseñados para interactuar con servidores web, como http-title.nse, que obtiene el título de una página web, o http-auth.nse, que verifica los mecanismos de autenticación.

Ejecutar scripts predeterminados (-sC)

En este paso, aprenderás a ejecutar el conjunto de scripts predeterminados de Nmap.

Nmap clasifica sus scripts en diferentes grupos según su propósito y su nivel de intrusión. La categoría default contiene scripts que se consideran seguros, rápidos y fiables. Recopilan información útil sin atacar agresivamente al objetivo ni causar interrupciones en el servicio.

Las categorías son, en realidad, una clasificación de riesgo e intención. Te ayudan a elegir scripts que se ajusten al contexto en lugar de ejecutar ciegamente todo lo disponible.

Para ejecutar el conjunto de scripts predeterminados, puedes usar el flag -sC. Esto equivale a escribir --script=default.

Para este laboratorio, se ha iniciado un servidor web ligero en segundo plano en el puerto 8080, y el servicio SSH estándar se está ejecutando en el puerto 22. Escaneemos la máquina local (localhost) en estos puertos específicos usando los scripts predeterminados.

Ejecuta el siguiente comando:

nmap -sC -p 22,8080 localhost

Verás una salida similar a esta:

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
22/tcp   open  ssh
8080/tcp open  http-proxy
|_http-title: LabEx Nmap NSE Target

Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds

Observa detenidamente la salida. En el puerto 8080, Nmap ejecutó automáticamente el script http-title y extrajo con éxito el título de la página web: "LabEx Nmap NSE Target". Nmap utiliza estos scripts predeterminados para recopilar más información sobre los puertos abiertos de forma fluida.

Esto demuestra cómo el flag -sC actualiza instantáneamente a Nmap de un simple escáner de puertos a una herramienta de recopilación de información.

Ejecutar scripts de categorías específicas

En este paso, aprenderás a ejecutar scripts específicos o categorías completas de scripts utilizando el argumento --script.

Aunque los scripts predeterminados (-sC) son excelentes para el reconocimiento general, a veces necesitas ejecutar un script específico para una tarea dirigida. Puedes hacerlo pasando el nombre del script al argumento --script.

Por ejemplo, si solo deseas obtener el título HTTP del servidor web que se ejecuta en el puerto 8080 sin ejecutar ningún otro script predeterminado, puedes especificar el script http-title directamente.

Ejecuta el siguiente comando:

nmap --script=http-title -p 8080 localhost

La salida estará muy enfocada, mostrando solo el estado del puerto y el resultado del script http-title:

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000057s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
8080/tcp open  http-proxy
|_http-title: LabEx Nmap NSE Target

Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds

Además de los nombres de scripts individuales, también puedes especificar categorías de scripts. Nmap agrupa los scripts en categorías como safe, intrusive, vuln (detección de vulnerabilidades), discovery y exploit.

Ejecuta el siguiente comando para ejecutar todos los scripts safe contra el puerto 8080:

nmap --script=safe -p 8080 localhost

Nota: Ejecutar una categoría completa de scripts puede llevar una cantidad de tiempo considerable (¡a veces más de 9 minutos!), dependiendo del entorno de red y la cantidad de scripts en esa categoría. Algunos scripts también pueden esperar tiempos de espera (timeouts). Si no deseas esperar, puedes presionar Ctrl+C para cancelar el escaneo y omitir este paso.

La salida incluirá el título HTTP, pero también puede incluir otras comprobaciones seguras dependiendo de la versión exacta de Nmap y del entorno:

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Pre-scan script results:
| targets-asn: 
|_  targets-asn.asn is a mandatory parameter
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000057s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
8080/tcp open  http-proxy
|_http-date: Mon, 09 Mar 2026 06:57:04 GMT; 0s from local time.
|_http-fetch: Please enter the complete path of the directory to save data in.
| http-headers: 
|   Server: SimpleHTTP/0.6 Python/3.10.12
|   Date: Mon, 09 Mar 2026 06:57:03 GMT
|   Content-type: text/html
|   Content-Length: 103
|   Last-Modified: Mon, 09 Mar 2026 06:55:32 GMT
|   
|_  (Request type: HEAD)
|_http-title: LabEx Nmap NSE Target

Host script results:
| dns-blacklist: 
|   SPAM
|     list.quorum.to - SPAM
|     l2.apews.org - FAIL
|_    bl.nszones.com - SPAM
|_fcrdns: FAIL (No PTR record)
| resolveall: 
|   Host 'localhost' also resolves to:
|   Use the 'newtargets' script-arg to add the results as targets
|_  Use the --resolve-all option to scan all resolved addresses without using this script.
| unusual-port: 
|_  WARNING: this script depends on Nmap's service/version detection (-sV)

Post-scan script results:
| reverse-index: 
|_  8080/tcp: 127.0.0.1
Nmap done: 1 IP address (1 host up) scanned in 551.51 seconds

El uso del argumento --script te brinda un control granular sobre tu proceso de auditoría, permitiéndote adaptar tus escaneos a tus necesidades específicas de pruebas de seguridad.

Resumen

¡Felicidades! Has completado con éxito el laboratorio de Fundamentos del Nmap Scripting Engine (NSE).

En este laboratorio, aprendiste a:

  • Localizar el directorio predeterminado para los scripts del NSE (/usr/share/nmap/scripts/) y buscar scripts específicos usando comandos estándar de Linux.
  • Usar el flag -sC para ejecutar una colección de scripts predeterminados y seguros para recopilar información automáticamente, como claves de host SSH y títulos de páginas web HTTP.
  • Usar el argumento --script para ejecutar scripts individuales por nombre o ejecutar categorías completas de scripts, lo que te otorga un control preciso sobre tus tareas de auditoría de red.

Estas habilidades fundamentales te permitirán aprovechar Nmap como una potente herramienta automatizada de auditoría de seguridad en tus futuras exploraciones de red y pruebas de penetración.