Descubre Servicios de Red con Nmap y su Motor de Scripting

NmapNmapBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá sobre el Motor de Scripting de Nmap (Nmap Scripting Engine, NSE), una parte poderosa de la herramienta de escaneo de redes Nmap. El NSE mejora las funciones de Nmap, lo que le permite realizar descubrimientos de redes avanzados, detección de vulnerabilidades y enumeración de servicios.

Este motor es crucial para los administradores de redes modernos, expertos en seguridad y hackers éticos. Necesitan entender las topologías de red, detectar posibles problemas de seguridad y recopilar información detallada sobre los servicios de red. En este laboratorio, configurará un servicio de red local y utilizará Nmap para descubrirlo y analizarlo. Al final, comprenderá los conceptos básicos de cómo usar Nmap y su motor de scripting para explorar y recopilar datos sobre los servicios de red.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/installation -.-> lab-415931{{"Descubre Servicios de Red con Nmap y su Motor de Scripting"}} nmap/save_output -.-> lab-415931{{"Descubre Servicios de Red con Nmap y su Motor de Scripting"}} nmap/port_scanning -.-> lab-415931{{"Descubre Servicios de Red con Nmap y su Motor de Scripting"}} nmap/target_specification -.-> lab-415931{{"Descubre Servicios de Red con Nmap y su Motor de Scripting"}} nmap/service_detection -.-> lab-415931{{"Descubre Servicios de Red con Nmap y su Motor de Scripting"}} end

Configuración de un servicio de red local para el escaneo

En este paso, vamos a crear un servicio de red simple. ¿Por qué hacemos esto? Bueno, en el mundo real de la ciberseguridad, a menudo es necesario encontrar y analizar los servicios que se ejecutan en una red. Al crear este servicio simple, podemos practicar el uso de Nmap para escanearlo más adelante, tal como lo haría en una situación real.

Primero, necesitamos abrir una terminal. Una terminal es una interfaz basada en texto donde se pueden ingresar comandos para interactuar con la computadora. Una vez que haya abierto la terminal, debe asegurarse de estar en el directorio del proyecto. El directorio del proyecto es como una carpeta donde se almacenan todos los archivos relacionados con este proyecto. Para navegar al directorio del proyecto, ingrese el siguiente comando en la terminal:

cd /home/labex/project

A continuación, vamos a crear un archivo HTML simple. HTML significa Lenguaje de Marcado de Hipertexto (HyperText Markup Language), y se utiliza para crear páginas web. Este archivo será alojado por nuestro servidor, al igual que las páginas web que se ven en Internet. El contenido de este archivo es lo que un servidor web en el mundo real podría servir a los usuarios. Para crear el archivo, utilice el siguiente comando:

echo "<h1>Welcome to the hidden treasure chamber</h1>" > treasure.html

Este comando hace dos cosas. Primero, crea una cadena con un encabezado HTML. Luego, redirige esa cadena a un archivo llamado treasure.html. Para verificar si el archivo se creó correctamente, puede usar el comando cat. El comando cat se utiliza para mostrar el contenido de un archivo. Ingrese el siguiente comando en la terminal:

cat treasure.html

Si todo salió bien, debería ver el contenido HTML que acabamos de agregar:

<h1>Welcome to the hidden treasure chamber</h1>

Ahora, vamos a iniciar un servidor HTTP simple. HTTP significa Protocolo de Transferencia de Hipertexto (HyperText Transfer Protocol), y es el protocolo utilizado para transferir páginas web a través de Internet. Usaremos el módulo incorporado de Python para iniciar este servidor. Este servidor escuchará en el puerto 8000. Un puerto es como una puerta en su computadora donde el tráfico de red puede entrar o salir. El servidor servirá archivos desde el directorio actual, que es el directorio del proyecto al que navegamos anteriormente. Para iniciar el servidor, ingrese el siguiente comando en la terminal:

python3 -m http.server 8000

Después de ejecutar este comando, debería ver una salida similar a:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Esta salida indica que el servidor HTTP ahora está en funcionamiento y esperando conexiones en el puerto 8000. Asegúrese de dejar esta ventana de terminal abierta. Si la cierra, el servidor dejará de funcionar y no podremos escanearlo con Nmap más adelante.

Descubrimiento de servicios de red con Nmap

Ahora que hemos configurado con éxito un servicio de red, es hora de usar Nmap para descubrirlo y analizarlo. Nmap, abreviatura de Network Mapper, es una herramienta de código abierto conocida y poderosa. Se utiliza ampliamente para el descubrimiento de redes, es decir, para averiguar qué dispositivos y servicios están disponibles en una red, y para la auditoría de seguridad, que ayuda a identificar posibles riesgos de seguridad.

Primero, abre una nueva ventana de terminal. Asegúrate de dejar abierta la ventana de terminal anterior, ya que está ejecutando el servidor HTTP. Una vez que hayas abierto la nueva terminal, debes navegar al directorio del proyecto. Esto es importante porque todos los comandos relacionados con este proyecto se ejecutarán desde este directorio. Utiliza el siguiente comando para cambiar de directorio:

cd /home/labex/project

Comencemos con un escaneo de puertos básico. Un escaneo de puertos es una técnica utilizada para verificar qué puertos de un dispositivo están abiertos y ejecutando servicios. Los puertos son como puertas a través de las cuales el tráfico de red entra y sale de un dispositivo. En este caso, escaneararemos el puerto 8000 en el localhost, que se refiere a la máquina en la que estamos trabajando actualmente. Ejecuta el siguiente comando:

nmap -p 8000 localhost

Este comando instruye a Nmap a escanear específicamente el puerto 8000 en la máquina local. Después de ejecutar el comando, deberías ver una salida similar a esta:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

La salida nos dice que el puerto 8000 está abierto, lo que significa que hay un servicio en ejecución en él. "http - alt" es la forma predeterminada de Nmap de identificar servicios HTTP alternativos.

A continuación, queremos recopilar información más detallada sobre este servicio. Usaremos la bandera -sV con Nmap. Esta bandera le dice a Nmap que intente determinar la versión del servicio en ejecución. Saber la versión del servicio puede ser crucial para fines de seguridad, ya que ayuda a identificar si hay alguna vulnerabilidad conocida asociada con esa versión específica. Ejecuta el siguiente comando:

sudo nmap -sV -p 8000 localhost > /home/labex/project/nmap_output_service_version.txt

Este comando realiza un escaneo de detección de versión en el puerto 8000. El sudo se utiliza para ejecutar el comando con privilegios de administrador, que pueden ser necesarios para algunas operaciones de Nmap. El símbolo > redirige la salida del comando a un archivo llamado nmap_output_service_version.txt. De esta manera, podemos guardar los resultados para un análisis posterior.

Para ver los resultados, utiliza el siguiente comando:

cat /home/labex/project/nmap_output_service_version.txt

Deberías ver información más detallada sobre el servicio HTTP, incluyendo la posible versión del software. La salida podría ser similar a esta:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).

PORT     STATE SERVICE VERSION
8000/tcp open  http    Python http.server 3.10.X (Python 3.10.X)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

Esta salida confirma que el servicio es un servidor HTTP impulsado por Python, lo que coincide con lo que configuramos en el paso anterior.

Uso del Motor de Scripting de Nmap (Nmap Scripting Engine - NSE)

El Motor de Scripting de Nmap (Nmap Scripting Engine - NSE) es una herramienta poderosa que te permite expandir las capacidades de Nmap utilizando scripts de Lua. Lua es un lenguaje de programación ligero, y estos scripts pueden realizar una amplia variedad de tareas. Por ejemplo, pueden ayudar con la detección avanzada de servicios, lo que significa identificar con mayor precisión qué servicios se están ejecutando en un dispositivo de red. También se pueden utilizar para el escaneo de vulnerabilidades, lo cual es crucial para encontrar debilidades de seguridad en un sistema.

Vamos a utilizar NSE para recopilar más información sobre nuestro servidor HTTP. Los scripts de NSE se agrupan en diferentes categorías. Estas categorías incluyen "default" (predeterminada), que contiene scripts comunes y seguros; "discovery" (descubrimiento), que se utiliza para encontrar servicios de red; "safe" (segura), que no causará ningún daño al sistema objetivo; y "vuln" (vulnerabilidad), que se utiliza para el escaneo de vulnerabilidades.

Primero, queremos ver qué scripts relacionados con HTTP están disponibles. Para hacer esto, utilizaremos el siguiente comando:

ls /usr/share/nmap/scripts/http*

Este comando lista todos los scripts de NSE en el directorio /usr/share/nmap/scripts/ que comienzan con http. Cuando ejecutes este comando, verás una lista de scripts diseñados para interactuar con servicios HTTP. Estos scripts pueden realizar diferentes funciones, desde la recopilación simple de información, como obtener el título de una página web, hasta tareas más complejas, como escanear buscando vulnerabilidades en un servicio HTTP.

Ahora, vamos a utilizar el script http-title para extraer el título de nuestra página web. El script http-title está diseñado para analizar un servicio HTTP y encontrar el título de la página web que sirve. Aquí está el comando para ejecutar este script:

sudo nmap --script=http-title -p 8000 localhost > /home/labex/project/nmap_script_output.txt

En este comando, sudo se utiliza para ejecutar el comando con privilegios de administrador porque algunas operaciones de Nmap pueden requerirlos. nmap es el comando principal, y --script=http-title le dice a Nmap que utilice el script http-title. -p 8000 especifica que estamos apuntando al puerto 8000, donde se está ejecutando nuestro servidor HTTP. localhost es el objetivo, lo que significa que estamos ejecutando el escaneo en nuestra propia máquina. El símbolo > redirige la salida del comando al archivo /home/labex/project/nmap_script_output.txt.

Vamos a comprobar la salida del comando. Podemos hacer esto utilizando el siguiente comando:

cat /home/labex/project/nmap_script_output.txt

El comando cat se utiliza para mostrar el contenido de un archivo. Cuando ejecutes este comando, deberías ver una salida que incluya información sobre el título de nuestra página web. La salida podría ser similar a esta:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000040s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt
|_http-title: Directory listing for /

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

Ahora, vamos a probar un escaneo más completo utilizando múltiples scripts. La categoría "default" incluye scripts seguros que proporcionan información útil sobre el objetivo. Para ejecutar todos los scripts de la categoría "default" contra nuestro servidor HTTP en el puerto 8000, utilizamos el siguiente comando:

sudo nmap --script=default -p 8000 localhost > /home/labex/project/nmap_default_scripts.txt

Este comando es similar al anterior, pero en lugar de especificar un solo script, le estamos diciendo a Nmap que ejecute todos los scripts de la categoría "default".

Vamos a examinar los resultados de este escaneo. Podemos hacer esto utilizando nuevamente el comando cat:

cat /home/labex/project/nmap_default_scripts.txt

La salida contendrá información más detallada sobre nuestro servidor HTTP, recopilada por varios scripts de NSE que se ejecutan por defecto.

Finalmente, vamos a explorar la función de ayuda de scripts para aprender más sobre un script específico. Si quieres saber más sobre el script http-title, puedes utilizar el siguiente comando:

nmap --script-help=http-title

Este comando muestra la documentación del script http-title. La documentación incluye el propósito del script, cómo utilizarlo y el formato de su salida. Comprender la documentación de los scripts es esencial cuando se utiliza NSE para tareas específicas porque te ayuda a saber qué hace el script y cómo usarlo correctamente.

Resumen

En este laboratorio, has aprendido cómo utilizar el Motor de Scripting de Nmap (Nmap Scripting Engine - NSE) para el descubrimiento y análisis de servicios de red. Primero configuraste un servidor HTTP local y luego empleaste varios comandos de Nmap para escanear y recopilar información sobre este servicio.

Adquiriste habilidades como configurar un servicio de red básico para pruebas, utilizar Nmap para encontrar puertos abiertos y servicios en ejecución, realizar la detección de versiones con la bandera -sV, aprovechar los scripts de NSE para obtener información detallada del servicio y interpretar los resultados de los escaneos de Nmap para comprender las características del servicio. Estas habilidades son esenciales para administradores de red, profesionales de seguridad y hackers éticos. A medida que avances en ciberseguridad, Nmap y su Motor de Scripting serán valiosos para el descubrimiento de redes y la evaluación de seguridad.