Virtual Hosts
Una vez que el DNS dirige el tráfico al servidor correcto, la configuración del servidor web se vuelve crucial para determinar cómo se manejan las solicitudes entrantes. Servidores web como Apache, Nginx o IIS están diseñados para alojar múltiples sitios web o aplicaciones en un solo servidor. Logran esto a través del virtual hosting
, que les permite diferenciar entre dominios, subdominios o incluso sitios web separados con contenido distinto.
Cómo funcionan los Virtual Hosts: Comprender VHosts y Subdomains
En el núcleo del virtual hosting
está la capacidad de los servidores web para distinguir entre múltiples sitios web o aplicaciones que comparten la misma dirección IP. Esto se logra aprovechando el HTTP Host header
, una pieza de información incluida en cada solicitud HTTP enviada por un navegador web.
La diferencia clave entre VHosts
y subdomains
es su relación con el Domain Name System (DNS)
y la configuración del servidor web.
Subdomains
: Son extensiones de un nombre de dominio principal (por ejemplo,blog.example.com
es un subdominio deexample.com
). Lossubdomains
suelen tener sus propios registrosDNS
, apuntando a la misma dirección IP que el dominio principal o a una diferente. Se pueden usar para organizar diferentes secciones o servicios de un sitio web.Virtual Hosts
(VHosts
): Son configuraciones dentro de un servidor web que permiten alojar múltiples sitios web o aplicaciones en un solo servidor. Pueden estar asociados con dominios de nivel superior (por ejemplo,example.com
) o subdominios (por ejemplo,dev.example.com
). Cadavirtual host
puede tener su propia configuración separada, permitiendo un control preciso sobre cómo se manejan las solicitudes.
Si un virtual host
no tiene un registro DNS, aún puedes acceder a él modificando el archivo hosts
en tu máquina local. El archivo hosts
te permite mapear un nombre de dominio a una dirección IP manualmente, evitando la resolución DNS.
Los sitios web a menudo tienen subdominios que no son públicos y no aparecerán en los registros DNS. Estos subdomains
son accesibles solo internamente o a través de configuraciones específicas. El VHost fuzzing
es una técnica para descubrir subdomains
y VHosts
públicos y no públicos probando varios nombres de host contra una dirección IP conocida.
Los virtual hosts
también se pueden configurar para usar diferentes dominios, no solo subdominios. Por ejemplo:
# Ejemplo de configuración de virtual host basada en nombre en Apache
<VirtualHost *:80>
ServerName www.example1.com
DocumentRoot /var/www/example1
</VirtualHost>
<VirtualHost *:80>
ServerName www.example2.org
DocumentRoot /var/www/example2
</VirtualHost>
<VirtualHost *:80>
ServerName www.another-example.net
DocumentRoot /var/www/another-example
</VirtualHost>
Aquí, example1.com
, example2.org
y another-example.net
son dominios distintos alojados en el mismo servidor. El servidor web usa el Host
header para servir el contenido adecuado según el nombre de dominio solicitado.
Server VHost Lookup
El siguiente diagrama ilustra el proceso de cómo un servidor web determina el contenido correcto a servir basado en el Host
header:
Browser Requests a Website
: Cuando ingresas un nombre de dominio (por ejemplo,www.inlanefreight.com
) en tu navegador, se inicia una solicitud HTTP al servidor web asociado con la dirección IP de ese dominio.Host Header Reveals the Domain
: El navegador incluye el nombre de dominio en elHost
header de la solicitud, que actúa como una etiqueta para informar al servidor web qué sitio web se está solicitando.Web Server Determines the Virtual Host
: El servidor web recibe la solicitud, examina elHost
header y consulta su configuración de virtual host para encontrar una entrada que coincida con el nombre de dominio solicitado.Serving the Right Content
: Al identificar la configuración de virtual host correcta, el servidor web recupera los archivos y recursos correspondientes asociados con ese sitio web desde su raíz de documentos y los envía de vuelta al navegador como respuesta HTTP.
En esencia, el Host
header funciona como un interruptor, permitiendo que el servidor web determine dinámicamente qué sitio web servir según el nombre de dominio solicitado por el navegador.
Tipos de Virtual Hosting
Hay tres tipos principales de virtual hosting
, cada uno con sus ventajas y desventajas:
Name-Based Virtual Hosting
: Este método se basa únicamente en elHTTP Host header
para distinguir entre sitios web. Es el método más común y flexible, ya que no requiere múltiples direcciones IP. Es rentable, fácil de configurar y es compatible con la mayoría de los servidores web modernos. Sin embargo, requiere que el servidor web soportename-based virtual hosting
y puede tener limitaciones con ciertos protocolos comoSSL/TLS
.IP-Based Virtual Hosting
: Este tipo de hosting asigna una dirección IP única a cada sitio web alojado en el servidor. El servidor determina qué sitio web servir en función de la dirección IP a la que se envió la solicitud. No depende delHost header
, se puede usar con cualquier protocolo y ofrece un mejor aislamiento entre sitios web. Aún así, requiere múltiples direcciones IP, lo que puede ser costoso y menos escalable.Port-Based Virtual Hosting
: Diferentes sitios web están asociados con diferentes puertos en la misma dirección IP. Por ejemplo, un sitio web podría estar accesible en el puerto 80, mientras que otro en el puerto 8080. Elport-based virtual hosting
se puede usar cuando las direcciones IP son limitadas, pero no es tan común ni fácil de usar como elname-based virtual hosting
y puede requerir que los usuarios especifiquen el número de puerto en la URL.
Virtual Host Discovery Tools
Aunque el análisis manual de los HTTP headers
y las búsquedas DNS inversas
pueden ser efectivas, las herramientas especializadas de virtual host discovery
automatizan y agilizan el proceso, haciéndolo más eficiente y completo. Estas herramientas emplean varias técnicas para sondear el servidor objetivo y descubrir posibles virtual hosts
.
Varias herramientas están disponibles para ayudar en el descubrimiento de virtual hosts:
Herramienta | Descripción | Características |
---|---|---|
gobuster | Herramienta multipropósito a menudo utilizada para fuerza bruta de directorios/archivos, pero también efectiva para el descubrimiento de virtual hosts. | Rápida, soporta múltiples métodos HTTP, puede usar listas de palabras personalizadas. |
Feroxbuster | Similar a Gobuster, pero con una implementación en Rust, conocida por su velocidad y flexibilidad. | Soporta recursión, descubrimiento de comodines y varios filtros. |
ffuf | Otro fuzzer web rápido que puede usarse para el descubrimiento de virtual hosts mediante fuzzing del Host header. |
Entrada de lista de palabras personalizable y opciones de filtrado. |
Gobuster
Gobuster es una herramienta versátil comúnmente utilizada para fuerza bruta de directorios y archivos, pero también sobresale en el descubrimiento de virtual hosts. Envía sistemáticamente solicitudes HTTP con diferentes Host
headers a una dirección IP objetivo y luego analiza las respuestas para identificar virtual hosts válidos.
Hay un par de cosas que necesitas preparar para realizar fuerza bruta en los Host
headers:
- Identificación del Objetivo: Primero, identifica la dirección IP del servidor web objetivo. Esto se puede hacer a través de búsquedas DNS u otras técnicas de reconocimiento.
- Preparación de la Lista de Palabras: Prepara una lista de palabras que contenga nombres potenciales de virtual hosts. Puedes usar una lista de palabras precompilada, como SecLists, o crear una personalizada basada en la industria del objetivo, convenciones de nombres u otra información relevante.
El comando gobuster
para realizar fuerza bruta en los vhosts generalmente se ve así:
gobuster vhost -u http://<target_IP_address> -w <wordlist_file> --append-domain
- La flag
-u
especifica la URL objetivo (reemplaza<target_IP_address>
con la IP real). - La flag
-w
especifica el archivo de lista de palabras (reemplaza<wordlist_file>
con la ruta a tu lista de palabras). - La flag
--append-domain
agrega el dominio base a cada palabra en la lista de palabras.
En las versiones más recientes de Gobuster, la flag --append-domain
es necesaria para agregar el dominio base a cada palabra en la lista de palabras al realizar el descubrimiento de virtual hosts. Esta flag asegura que Gobuster construya correctamente los nombres completos de los virtual hosts, lo cual es esencial para la enumeración precisa de posibles subdominios. En versiones anteriores de Gobuster, esta funcionalidad se manejaba de manera diferente, y la flag --append-domain
no era necesaria. Los usuarios de versiones anteriores podrían no encontrar esta flag disponible o necesaria, ya que la herramienta agregaba el dominio base por defecto o empleaba un mecanismo diferente para la generación de virtual hosts.
Gobuster
producirá virtual hosts potenciales a medida que los descubra. Analiza los resultados cuidadosamente, observando cualquier hallazgo inusual o interesante. Puede ser necesario realizar una investigación adicional para confirmar la existencia y funcionalidad de los virtual hosts descubiertos.
Hay un par de otros argumentos que vale la pena conocer:
- Considera usar la flag
-t
para aumentar el número de hilos para un escaneo más rápido. - La flag
-k
puede ignorar errores de certificado SSL/TLS. - Puedes usar la flag
-o
para guardar la salida en un archivo para análisis posterior.
gobuster vhost -u http://inlanefreight.htb:81 -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt --append-domain
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://inlanefreight.htb:81
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
[+] Append Domain: true
===============================================================
Starting gobuster in VHOST enumeration mode
===============================================================
Found: forum.inlanefreight.htb:81 Status: 200 [Size: 100]
[...]
Progress: 114441 / 114442 (100.00%)
===============================================================
Finished
===============================================================
gobuster vhost -u http://83.136.249.227:50037 -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-110000.txt --append-domain
wfuzz -c -w /usr/share/seclists/Discovery/DNS/namelist.txt --hc 400,404,403 -H "Host: FUZZ.inlanefreight.htb" -u http://inlanefreight.htb -t 100
El descubrimiento de virtual hosts puede generar tráfico significativo y podría ser detectado por sistemas de detección de intrusos (IDS) o firewalls de aplicaciones web (WAF). Actúa con precaución y obtén la autorización adecuada antes de escanear cualquier objetivo.