Enumerar Servicios HTTP en Nmap

NmapBeginner
Practicar Ahora

Introducción

En este laboratorio, el objetivo es aprender a enumerar servicios HTTP utilizando Nmap. Comenzará ejecutando una enumeración HTTP en el localhost 127.0.0.1 con el script http-enum. Luego, escaneará el puerto 80, agregará un agente de usuario y guardará los resultados de la enumeración. Finalmente, revisará los hallazgos HTTP y los comparará con un escaneo de banner en la terminal Xfce.

Recuerde, en escenarios del mundo real, solo debe escanear redes y sistemas con permiso explícito.

Ejecutar enumeración HTTP con nmap --script http-enum 127.0.0.1

En este paso, utilizaremos Nmap con el script http-enum para enumerar servicios HTTP en el localhost. Este script ayuda a identificar posibles vulnerabilidades y configuraciones erróneas al descubrir archivos y directorios comunes del servidor web.

Antes de comenzar, discutiremos brevemente qué son Nmap y los scripts NSE. Nmap ("Network Mapper") es una utilidad gratuita y de código abierto para el descubrimiento de redes y la auditoría de seguridad. NSE (Nmap Scripting Engine) permite a los usuarios escribir scripts para automatizar una amplia variedad de tareas de red. El script http-enum es uno de esos scripts NSE diseñado para enumerar recursos HTTP comunes.

Para este laboratorio, nos dirigiremos a la dirección IP del localhost 127.0.0.1. Este es un enfoque seguro para aprender, ya que estamos escaneando nuestra propia máquina local.

Ahora, ejecutemos el comando Nmap:

sudo nmap --script http-enum 127.0.0.1

Este comando le indica a Nmap que:

  • sudo: Ejecute el comando con privilegios de superusuario, que pueden ser necesarios para ciertas operaciones de Nmap.
  • nmap: Invoque la herramienta Nmap.
  • --script http-enum: Especifique que queremos usar el script http-enum.
  • 127.0.0.1: La dirección IP de destino a escanear (localhost).

Después de ejecutar el comando, verá una salida similar a la siguiente (la salida exacta dependerá del sistema de destino):

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.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

La salida muestra que el script http-enum encontró algunos recursos interesantes en el puerto 8080:

  • /robots.txt: Un archivo que especifica qué partes del sitio web no deben ser rastreadas por los robots web.
  • /session/: Un directorio potencialmente interesante que podría contener archivos o funcionalidades relacionadas con la sesión.

Estos hallazgos pueden ser investigados más a fondo para identificar posibles vulnerabilidades o configuraciones erróneas.

Escanear el puerto 8080 con nmap --script http-enum -p 8080 127.0.0.1

En este paso, centraremos nuestro escaneo de Nmap en un puerto específico, el puerto 8080, utilizando el script http-enum. Especificar un puerto puede ayudar a acotar el escaneo y proporcionar resultados más específicos. Escanearemos 127.0.0.1, que es la dirección de loopback, representando la máquina local. Esto es útil para probar servicios que se ejecutan en su propio sistema.

Analicemos el comando que utilizaremos:

sudo nmap --script http-enum -p 8080 127.0.0.1

Aquí se explica qué significa cada parte del comando:

  • sudo: Ejecuta el comando con privilegios de superusuario. Esto podría ser necesario para obtener resultados precisos, especialmente en números de puerto más bajos.
  • nmap: Invoca la herramienta Nmap.
  • --script http-enum: Especifica que queremos usar el script http-enum para enumerar recursos HTTP.
  • -p 8080: Esta opción le dice a Nmap que escanee solo el puerto 8080. El puerto 8080 se usa comúnmente como un puerto HTTP alternativo, a menudo para servidores de desarrollo o servicios proxy.
  • 127.0.0.1: La dirección IP de destino, en este caso, la dirección de loopback, que se refiere a la máquina local.

Ahora, ejecute el comando en su terminal:

sudo nmap --script http-enum -p 8080 127.0.0.1

La salida será similar a esta (la salida exacta depende de los servicios que se ejecuten en su máquina local):

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.0000020s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

En este ejemplo, el script http-enum encontró /robots.txt y /session/. Estos son recursos comunes en los servidores web, y una investigación adicional podría revelar más información sobre la configuración del servidor y posibles vulnerabilidades. Al especificar el puerto 8080, enfocamos el escaneo y recibimos resultados específicos del servicio HTTP que se ejecuta en la máquina local.

Añadir user agent con nmap --script http-enum --script-args http.useragent=Test 127.0.0.1

En este paso, personalizaremos la cabecera User-Agent utilizada por el script http-enum. La cabecera User-Agent es enviada por el cliente (en este caso, Nmap) al servidor e identifica el software cliente. Modificar el User-Agent puede ser útil por varias razones, como:

  • Evadir medidas de seguridad básicas: Algunos servidores pueden bloquear solicitudes de herramientas de escaneo conocidas. Cambiar el User-Agent puede ayudar a eludir estos bloqueos.
  • Probar el comportamiento del servidor: Puede observar cómo responde el servidor a diferentes cadenas de User-Agent.
  • Sigilo: Usar un User-Agent menos común puede hacer que sus escaneos sean menos conspicuos.

Utilizaremos la opción --script-args para modificar el valor de http.useragent.

Aquí está el comando que utilizaremos:

sudo nmap --script http-enum --script-args http.useragent=Test 127.0.0.1

Analicemos este comando:

  • sudo: Ejecuta el comando con privilegios de superusuario.
  • nmap: Invoca la herramienta Nmap.
  • --script http-enum: Especifica que queremos usar el script http-enum.
  • --script-args http.useragent=Test: Esta es la parte clave. Pasa un argumento al script http-enum. Específicamente, establece la variable http.useragent al valor "Test". Esto significa que cuando el script envíe solicitudes HTTP, utilizará "Test" como la cabecera User-Agent.
  • 127.0.0.1: La dirección IP de destino a escanear (localhost).

Ejecute el comando en su terminal:

sudo nmap --script http-enum --script-args http.useragent=Test 127.0.0.1

La salida será similar a la salida del primer paso, pero las solicitudes HTTP enviadas al servidor ahora incluirán la cabecera User-Agent: Test. No verá el User-Agent directamente en la salida de Nmap, pero se utilizará en segundo plano durante el escaneo.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

Este paso demuestra cómo personalizar los scripts de Nmap utilizando la opción --script-args. Esto le permite ajustar el comportamiento de los scripts y adaptarlos a situaciones específicas.

Guardar resultados de enum con nmap --script http-enum -oN http_enum.txt 127.0.0.1

En este paso, guardaremos los resultados del script http-enum en un archivo. Esto es crucial para análisis e informes posteriores. Nmap proporciona varias opciones para guardar los resultados del escaneo en diferentes formatos. Utilizaremos la opción -oN, que guarda los resultados en un formato "normal" legible por humanos.

Aquí está el comando que utilizaremos:

sudo nmap --script http-enum -oN http_enum.txt 127.0.0.1

Analicemos este comando:

  • sudo: Ejecuta el comando con privilegios de superusuario.
  • nmap: Invoca la herramienta Nmap.
  • --script http-enum: Especifica que queremos usar el script http-enum.
  • -oN http_enum.txt: Esta opción le dice a Nmap que guarde los resultados en formato normal en el archivo llamado http_enum.txt. El archivo se creará en su directorio actual (~/project).
  • 127.0.0.1: La dirección IP de destino a escanear (la dirección de loopback).

Ejecute el comando en su terminal:

sudo nmap --script http-enum -oN http_enum.txt 127.0.0.1

La salida en la terminal será similar a la salida de los pasos anteriores, pero además de mostrar los resultados en la pantalla, Nmap también los guardará en el archivo http_enum.txt.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

Para verificar que el archivo se ha creado y contiene los resultados del escaneo, puede usar el comando cat para mostrar el contenido del archivo:

cat http_enum.txt

Debería ver los resultados del escaneo de Nmap en la salida. Este archivo ahora se puede utilizar para análisis posteriores, informes o como entrada para otras herramientas.

Revisar hallazgos HTTP en la terminal Xfce

En este paso, revisaremos los hallazgos HTTP del archivo http_enum.txt que creamos en el paso anterior. Usaremos la terminal Xfce y el comando cat para mostrar el contenido del archivo y analizar los resultados.

Primero, asegúrese de estar en el directorio ~/project. Aquí es donde debería ubicarse el archivo http_enum.txt.

Para ver el contenido del archivo http_enum.txt, use el siguiente comando:

cat http_enum.txt

Este comando imprimirá el contenido del archivo en su terminal.

Ejemplo de salida (la salida real puede variar según el objetivo):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

Ahora, analicemos la salida. El script http-enum intenta identificar archivos y directorios potencialmente interesantes en el servidor web. En este ejemplo, encontró:

  • /robots.txt: Este archivo proporciona instrucciones a los robots web (rastreadores) sobre qué partes del sitio web no deben ser indexadas. A veces puede revelar áreas ocultas o sensibles del sitio.
  • /session/: Este es un directorio potencialmente interesante que podría contener archivos relacionados con sesiones, archivos de configuración u otra información sensible.

Al revisar estos hallazgos, puede obtener una mejor comprensión de la estructura del servidor web e identificar áreas potenciales para una mayor investigación. Por ejemplo, podría usar un navegador web para visitar http://127.0.0.1:8080/robots.txt y http://127.0.0.1:8080/session/ para ver qué contienen.

Este paso demuestra cómo revisar la salida de los scripts de Nmap e identificar información potencialmente interesante. Esta es una parte crucial del proceso de reconocimiento.

En este paso, realizaremos un escaneo de banners utilizando Nmap y compararemos sus resultados con los hallazgos del script http-enum. La captura de banners es una técnica utilizada para recopilar información sobre un servicio examinando el banner que presenta al establecerse una conexión. Esto puede revelar la versión del software y otros detalles.

Primero, realicemos un escaneo de banners en el puerto 8080 del objetivo (127.0.0.1) usando Nmap. Utilizaremos la opción -sV, que habilita la detección de versiones:

sudo nmap -sV -p 8080 127.0.0.1

Este comando intentará determinar el servicio y la versión que se ejecutan en el puerto 8080.

Ejemplo de salida:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:20 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).

PORT     STATE SERVICE VERSION
8080/tcp open  http    SimpleHTTPServer 0.6 (Python 3.7.5)

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

En este ejemplo, el escaneo de banners revela que el servidor web es SimpleHTTPServer 0.6 ejecutándose en Python 3.7.5.

Ahora, comparemos esta información con los hallazgos del script http-enum, que revisamos en el paso anterior. El script http-enum identificó archivos y directorios potenciales, como /robots.txt y /session/.

Al comparar los resultados del escaneo de banners y el script http-enum, podemos construir una imagen más completa del sistema objetivo. El escaneo de banners proporciona información sobre las versiones del software, mientras que el script http-enum revela archivos y directorios potenciales. Esta información combinada puede ser valiosa para identificar vulnerabilidades y planificar ataques posteriores.

Por ejemplo, conocer la versión del software del servidor web le permite buscar vulnerabilidades conocidas específicas de esa versión. Los archivos y directorios identificados pueden ser entonces el objetivo de explotación.

Este paso demuestra la importancia de combinar diferentes técnicas de escaneo para recopilar información completa sobre un sistema objetivo.

Resumen

En este laboratorio, los participantes aprendieron a enumerar servicios HTTP utilizando el script http-enum de Nmap. Ejecutaron comandos para escanear localhost (127.0.0.1), apuntando al puerto 8080, agregando un agente de usuario personalizado y guardando los resultados en un archivo de texto. El laboratorio enfatizó el uso de privilegios de superusuario para ciertas operaciones y demostró prácticas de escaneo seguras al usar localhost.

Después de ejecutar los escaneos, los participantes revisaron los hallazgos HTTP y compararon los resultados con un escaneo de banners en la terminal Xfce, lo que les ayudó a identificar posibles vulnerabilidades y configuraciones erróneas en el servidor web local. Este enfoque práctico proporcionó experiencia práctica con técnicas de reconocimiento de redes.