Detectar Banners de Servicio con Nmap

NmapBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a detectar los banners de servicios utilizando Nmap. El objetivo principal es recopilar información sobre los servicios de red que se ejecutan en una máquina objetivo, como los nombres de servicio, las versiones y los sistemas operativos. Ejecutará el script de banner en una IP objetivo, escaneará puertos específicos, agregará detalle al escaneo, guardará los resultados y revisará y comparará los banners en la terminal Xfce.

Comenzará utilizando el comando nmap --script banner para escanear todos los puertos predeterminados en un objetivo. Luego, escaneará puertos específicos, aumentará el detalle para obtener una salida más detallada, guardará los resultados en un archivo y, finalmente, analizará los banners para comprender los servicios que se ejecutan en el objetivo.

En este paso, usaremos el script de captura de banners de Nmap para identificar los servicios que se ejecutan en una máquina objetivo. La captura de banners es una técnica utilizada para recopilar información sobre un servicio de red examinando el banner que transmite cuando se establece una conexión. Este banner a menudo contiene detalles como el nombre del servicio, la versión y el sistema operativo.

Primero, entendamos el comando que usaremos:

nmap --script banner 192.168.1.1

  • nmap: Este es el escáner de red de línea de comandos.
  • --script banner: Esta opción le dice a Nmap que use el script banner, que está diseñado para capturar banners de puertos abiertos.
  • 192.168.1.1: Esta es la dirección IP objetivo. Tendrá que reemplazar esta con la dirección IP real de una máquina en su red a la que tenga permiso para escanear. Para este entorno de laboratorio, usaremos 127.0.0.1 (localhost) como objetivo. Esto garantiza que está escanendiendo su propia máquina y evita cualquier posible problema ético o legal.

Ahora, ejecutemos el comando. Abra su terminal Xfce y escriba lo siguiente:

nmap --script banner 127.0.0.1

Este comando escaneará todos los puertos predeterminados en 127.0.0.1 y intentará capturar banners de cualquier servicio abierto.

Es posible que vea una salida similar a esta (la salida exacta dependerá de los servicios que se ejecuten en su máquina):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_

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

En este ejemplo, Nmap encontró un servicio SSH que se ejecuta en el puerto 22. El banner revela que es la versión OpenSSH 8.2p1 que se ejecuta en Ubuntu.

Si no tiene ningún servicio en ejecución en su máquina, es posible que no vea ninguna información de banner. No se preocupe, el comando todavía está funcionando. En pasos posteriores, configuraremos servicios para asegurarnos de tener banners que capturar.

En el paso anterior, escaniamos todos los puertos predeterminados usando el script de banner. Ahora, nos centraremos en escanear puertos específicos. Esto es útil cuando sabes qué servicios te interesan, o cuando quieres reducir el tiempo de escaneo.

El comando que usaremos es:

nmap --script banner -p 22,80 127.0.0.1

Analicemos el comando:

  • nmap: El escáner de red.
  • --script banner: Especifica el script de captura de banners.
  • -p 22,80: Esta opción le dice a Nmap que solo escanee los puertos 22 y 80. El puerto 22 se utiliza comúnmente para SSH (Secure Shell), y el puerto 80 se utiliza comúnmente para HTTP (servidor web).
  • 127.0.0.1: La dirección IP objetivo (localhost).

Antes de ejecutar el comando, asegúrate de tener servicios en ejecución en estos puertos. La máquina virtual LabEx debería tener SSH en ejecución en el puerto 22 por defecto. Instalaremos un servidor web simple en el puerto 80.

Abre tu terminal Xfce y ejecuta los siguientes comandos para instalar un servidor HTTP básico usando Python:

sudo apt update
sudo apt install -y python3-pip
sudo python3 -m pip install http.server

Ahora, inicia el servidor HTTP en el puerto 80. Navega primero a tu directorio ~/project.

cd ~/project
python3 -m http.server 80

Mantén esta ventana de terminal abierta y ejecutando el servidor HTTP. Abre una nueva ventana de terminal Xfce para continuar con el escaneo de Nmap.

Ahora, en la nueva ventana de terminal, ejecuta el comando de Nmap:

nmap --script banner -p 22,80 127.0.0.1

Deberías ver una salida similar a esta:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

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

Esta salida muestra que Nmap escaneó los puertos 22 y 80, capturó los banners y mostró la información del servicio. Puedes ver el banner de SSH y el banner del servidor SimpleHTTP.

Recuerda detener el servidor http de Python después de terminar este paso presionando Ctrl+C en la terminal donde está en ejecución.

En este paso, agregaremos detalle a nuestro escaneo de Nmap. La detallación proporciona información más detallada sobre el proceso de escaneo, lo que puede ser útil para la depuración o para entender lo que Nmap está haciendo en segundo plano.

El comando que usaremos es:

nmap -v --script banner 127.0.0.1

Analicemos el comando:

  • nmap: El escáner de red.
  • -v: Esta opción aumenta el nivel de detallación. Puedes usar -vv para un detalle aún mayor.
  • --script banner: Especifica el script de captura de banners.
  • 127.0.0.1: La dirección IP objetivo (localhost).

Antes de ejecutar el comando, asegúrate de que el servidor http de Python todavía esté en ejecución desde el paso anterior. Si no es así, inícialo nuevamente en una ventana de terminal separada:

cd ~/project
python3 -m http.server 80

Ahora, en una nueva ventana de terminal, ejecuta el comando de Nmap con detalle:

nmap -v --script banner 127.0.0.1

Deberías ver una salida similar a esta (la salida exacta dependerá de los servicios que se ejecuten en tu máquina):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Initiating Ping Scan at 10:10
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:10
Completed Parallel DNS resolution of 1 host. at 10:10, 0.00s elapsed
Initiating Connect Scan at 10:10
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Completed Connect Scan at 10:10, 0.00s elapsed (1000 total ports)
Initiating Service scan at 10:10
Scanning 2 services on localhost (127.0.0.1)
Completed Service scan at 10:10, 0.01s elapsed (2 services total)
Initiating NSE script scan at 10:10
Scanning localhost (127.0.0.1)
Completed NSE script scan at 10:10, 0.09s elapsed
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Observa la información adicional proporcionada por la opción -v. Puedes ver las diferentes etapas del escaneo, como el Ping Scan, la resolución DNS y el Connect Scan. Esto puede ser muy útil para entender cómo funciona Nmap y para diagnosticar cualquier problema.

Recuerda detener el servidor http de Python después de terminar este paso presionando Ctrl+C en la terminal donde está en ejecución.

En este paso, guardaremos los resultados de nuestro escaneo de Nmap en un archivo. Esto es útil para un análisis posterior o con fines de informe.

El comando que usaremos es:

nmap --script banner -oN banners.txt 127.0.0.1

Analicemos el comando:

  • nmap: El escáner de red.
  • --script banner: Especifica el script de captura de banners.
  • -oN banners.txt: Esta opción le dice a Nmap que guarde los resultados en formato "normal" en un archivo llamado banners.txt. Hay otros formatos de salida disponibles (por ejemplo, -oG para salida compatible con Grep, -oX para salida XML), pero -oN es un formato legible por humanos.
  • 127.0.0.1: La dirección IP objetivo (localhost).

Antes de ejecutar el comando, asegúrate de que el servidor http de Python todavía esté en ejecución desde el paso anterior. Si no es así, inícialo nuevamente en una ventana de terminal separada:

cd ~/project
python3 -m http.server 80

Ahora, en una nueva ventana de terminal, ejecuta el comando de Nmap para guardar los resultados en un archivo:

nmap --script banner -oN banners.txt 127.0.0.1

Esta vez no verás los resultados del escaneo impresos en la terminal. En cambio, Nmap guardará la salida en el archivo banners.txt en tu directorio actual (~/project).

Para verificar que el archivo se creó y contiene los resultados del escaneo, puedes usar el comando cat:

cat banners.txt

Deberías ver una salida similar a esta en la terminal:

## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

## Nmap done at Fri Oct 27 10:15:00 2023 -- 1 IP address (1 host up) scanned in 0.10 seconds

Esto confirma que los resultados del escaneo se guardaron en el archivo banners.txt.

Recuerda detener el servidor http de Python después de terminar este paso presionando Ctrl+C en la terminal donde está en ejecución.

En este paso, revisaremos los detalles del banner que guardamos en el archivo banners.txt en el paso anterior. Usaremos la terminal Xfce para ver el contenido del archivo y entender la información que contiene.

Primero, asegúrate de tener el archivo banners.txt en tu directorio ~/project. Si no has completado el paso anterior, hazlo antes de continuar.

Para ver el contenido del archivo banners.txt, abre una ventana de terminal y usa el comando cat:

cat banners.txt

La salida mostrará el contenido del archivo, que debería verse similar a esto:

## Nmap 7.80 scan initiated Fri Oct 27 10:20:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

## Nmap done at Fri Oct 27 10:20:00 2023 -- 1 IP address (1 host up) scanned in 0.10 seconds

Analicemos la salida:

  • Nmap scan report for localhost (127.0.0.1): Esto indica que el escaneo se realizó en el localhost (127.0.0.1).
  • Host is up: Esto confirma que el host objetivo es alcanzable.
  • PORT STATE SERVICE: Esta sección proporciona información sobre los puertos abiertos en el host objetivo.
  • 22/tcp open ssh: Esto indica que el puerto 22 está abierto y ejecutando el servicio SSH.
  • | banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5: Esta es la información del banner para el servicio SSH. Revela la versión de SSH y el sistema operativo.
  • 80/tcp open http: Esto indica que el puerto 80 está abierto y ejecutando el servicio HTTP.
  • | banner: Server: SimpleHTTP/3.10 Python/3.10: Esta es la información del banner para el servicio HTTP. Revela el software del servidor y la versión.

Al revisar los detalles del banner, puedes obtener información valiosa sobre los servicios que se ejecutan en el host objetivo. Esta información se puede usar para el análisis de vulnerabilidades o para identificar posibles riesgos de seguridad.

Recuerda detener el servidor http de Python después de terminar este paso presionando Ctrl+C en la terminal donde está en ejecución.

Comparar banners en diferentes puertos en la terminal Xfce

En este paso, compararemos la información de los banners obtenidos de diferentes puertos. Esto puede ayudarnos a identificar los servicios que se ejecutan en esos puertos y entender sus versiones. Usaremos la terminal Xfce y el comando grep para extraer y comparar la información de los banners del archivo banners.txt.

Primero, asegúrate de tener el archivo banners.txt en tu directorio ~/project, que contiene los resultados del escaneo de Nmap de los pasos anteriores.

Para extraer la información del banner del puerto 22 (SSH), usa el siguiente comando:

grep "22/tcp" banners.txt

Esto imprimirá la línea que contiene información sobre el puerto 22, incluyendo el banner:

22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_

Del mismo modo, para extraer la información del banner del puerto 80 (HTTP), usa el siguiente comando:

grep "80/tcp" banners.txt

Esto imprimirá la línea que contiene información sobre el puerto 80, incluyendo el banner:

80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

Ahora, comparemos la información de los banners. Podemos ver que:

  • El puerto 22 está ejecutando SSH, y el banner revela que es la versión 8.2p1 de OpenSSH en Ubuntu.
  • El puerto 80 está ejecutando HTTP, y el banner revela que es un servidor SimpleHTTP implementado en Python 3.10.

Al comparar la información de los banners, podemos identificar rápidamente los servicios que se ejecutan en estos puertos y sus versiones. Esta información es valiosa para las evaluaciones de seguridad y el análisis de vulnerabilidades. Por ejemplo, saber la versión específica de SSH o del servidor HTTP nos permite verificar las vulnerabilidades conocidas asociadas a esas versiones.

En este ejemplo simple, solo comparamos dos puertos. Sin embargo, puedes extender esta técnica para comparar banners entre muchos puertos y hosts diferentes para obtener una comprensión integral de los servicios de red que se ejecutan en tu entorno.

Recuerda detener el servidor http de Python después de terminar este paso presionando Ctrl+C en la terminal donde está en ejecución.

Resumen

En este laboratorio, los participantes aprenden a usar Nmap para detectar los banners de servicios. Comienzan ejecutando el script de banner con nmap --script banner en una IP objetivo, usando 127.0.0.1 para evitar problemas éticos y legales. También aprenden a escanear puertos específicos, agregar detalle al escaneo y guardar los resultados en un archivo. Finalmente, revisan y comparan los detalles de los banners en la terminal Xfce.