Introducción
Nikto es un popular escáner de servidores web de código abierto que realiza pruebas exhaustivas contra servidores web para múltiples elementos, incluyendo más de 6700 archivos/programas potencialmente peligrosos, comprobaciones de versiones desactualizadas de más de 1250 servidores y problemas específicos de versión en más de 270 servidores.
Una configuración común de servidor web es el alojamiento virtual (virtual hosting), donde un único servidor con una dirección IP aloja múltiples sitios web (por ejemplo, site1.example.com y site2.example.com). Cuando escanea la dirección IP del servidor directamente, un escáner como Nikto podría probar solo el sitio web predeterminado configurado en el servidor, omitiendo por completo los otros sitios.
En este laboratorio, aprenderá a utilizar la opción -vhost de Nikto para apuntar específicamente a uno de los hosts virtuales en el servidor, asegurando que su escaneo sea preciso y enfocado.
Identificar un servidor que aloja múltiples sitios web en una IP
En este paso, verificará que el servidor web en nuestro entorno está alojando dos sitios web diferentes en la misma dirección IP (127.0.0.1). Podemos hacer esto enviando solicitudes HTTP con diferentes encabezados Host utilizando el comando curl. El encabezado Host le dice al servidor web a qué sitio web el cliente desea acceder.
Primero, enviemos una solicitud a site1.labex.io. La opción --header "Host: site1.labex.io" le indica a curl que envíe el encabezado de host especificado.
curl --header "Host: site1.labex.io" http://127.0.0.1
Debería ver el contenido HTML del primer sitio:
<html><body><h1>Welcome to Site 1</h1></body></html>
A continuación, enviemos una solicitud a site2.labex.io cambiando el encabezado Host.
curl --header "Host: site2.labex.io" http://127.0.0.1
Esta vez, verá el contenido del segundo sitio:
<html><body><h1>This is Site 2</h1><p>This site has a test.txt file.</p></body></html>
Esto confirma que nuestro servidor en 127.0.0.1 está sirviendo contenido diferente según el nombre de host, que es la definición de alojamiento virtual (virtual hosting).
Encontrar el nombre de host del host virtual específico de destino
En este paso, confirmaremos los nombres de host que están configurados para nuestro servidor local. En un escenario del mundo real, utilizaría técnicas de reconocimiento como la enumeración de DNS o el análisis de certificados SSL para encontrar hosts virtuales. Para este laboratorio, los nombres de host se han preconfigurado en el archivo /etc/hosts. Este archivo es utilizado por el sistema operativo para mapear nombres de host a direcciones IP.
Examinemos el contenido del archivo /etc/hosts utilizando el comando cat para ver los mapeos.
cat /etc/hosts
La salida mostrará los mapeos estándar de localhost, además de las dos entradas personalizadas que agregamos para nuestros hosts virtuales:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 site1.labex.io
127.0.0.1 site2.labex.io
A partir de esta salida, podemos confirmar que site1.labex.io y site2.labex.io son los nombres de host que podemos usar para nuestro escaneo dirigido. Nos enfocaremos en site2.labex.io en los siguientes pasos.
Usar la opción -vhost para especificar el nombre de host de destino
En este paso, aprenderá sobre la opción de Nikto utilizada para escanear un host virtual específico. Por defecto, nikto -h 127.0.0.1 escanearía el primer host virtual configurado (site1.labex.io). Para indicarle a Nikto que escanee un host virtual diferente, debemos usar la opción -vhost (o -host+).
Esta opción instruye a Nikto a usar el nombre de host proporcionado en el encabezado Host de todas sus solicitudes HTTP, asegurando que el servidor web dirija las solicitudes al sitio web correcto.
La sintaxis es: nikto -h <DIRECCION_IP> -vhost <NOMBRE_DE_HOST>
Hagamos una prueba rápida sin ejecutar un escaneo completo. Podemos usar la opción -Display V para imprimir la salida detallada (verbose), que nos mostrará la configuración efectiva para el escaneo. Nos dirigiremos a site2.labex.io.
nikto -h 127.0.0.1 -vhost site2.labex.io -Display V
La salida mostrará detalles sobre la configuración del escaneo. Busque el valor del encabezado Host para confirmar que está configurado correctamente.
...
---------------------------------------------------------------------------
- Nikto 2.x
---------------------------------------------------------------------------
...
- Scan Options:
...
Host -> 127.0.0.1
...
VHost -> site2.labex.io
...
- Headers:
...
Host: site2.labex.io
...
---------------------------------------------------------------------------
+ 1 host(s) a probar
La salida muestra claramente que Nikto usará Host: site2.labex.io en sus solicitudes, que es exactamente lo que queremos.
Ejecutar el escaneo contra la IP del servidor con la bandera vhost
Ahora que entiende cómo funciona la opción -vhost, es hora de ejecutar el escaneo completo contra nuestro host virtual de destino, site2.labex.io.
Ejecute el siguiente comando en su terminal. El escaneo tardará unos momentos en completarse mientras Nikto realiza sus diversas pruebas.
nikto -h 127.0.0.1 -vhost site2.labex.io
Después de que comience el escaneo, verá una salida similar a la siguiente. Tenga en cuenta que la salida muestra que el Target Host es site2.labex.io, lo que confirma que estamos escaneando el host virtual correcto.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: site2.labex.io
+ Target Port: 80
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ /test.txt: A text file was found.
+ 7 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time: ...
+ 1 host(s) tested
Observe la línea + /test.txt: A text file was found.. Este archivo solo existe en site2.labex.io, lo que confirma aún más que nuestro escaneo se dirigió correctamente.
Confirmar que los resultados son específicos del vhost de destino
En este paso final, ejecutaremos otro escaneo, pero esta vez sin la bandera -vhost, para demostrar la diferencia en los resultados. Esto probará que la opción -vhost es esencial para escanear con precisión un sitio específico en un entorno de alojamiento virtual.
Ejecute un escaneo estándar de Nikto contra la dirección IP del servidor:
nikto -h 127.0.0.1
Observe la salida de este nuevo escaneo.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
...
(other findings)
...
+ End Time: ...
+ 1 host(s) tested
Compare esta salida con el escaneo del paso anterior. Notará dos diferencias clave:
- El
Target Hostnamees ahoralocalhost(o127.0.0.1), que es el valor predeterminado del servidor. - Falta el hallazgo
+ /test.txt: A text file was found.. Esto se debe a quetest.txtno existe en el sitio predeterminado (site1.labex.io), y este escaneo no se dirigió asite2.labex.io.
Esta comparación muestra claramente que sin -vhost, se habrían pasado por alto vulnerabilidades e información específicas de site2.labex.io.
Resumen
En este laboratorio, ha aprendido una técnica fundamental para el escaneo de vulnerabilidades de servidores web. Ahora comprende qué es el alojamiento virtual (virtual hosting) y por qué requiere un manejo especial durante una evaluación de seguridad.
Ha practicado:
- El uso de
curlcon una cabeceraHostpersonalizada para inspeccionar manualmente diferentes sitios web en la misma IP. - La identificación del propósito de la opción
-vhostde Nikto. - La ejecución de un escaneo dirigido contra un host virtual específico utilizando
nikto -h <IP> -vhost <HOSTNAME>. - La comparación de los resultados de un escaneo dirigido y un escaneo predeterminado para comprender la importancia de esta técnica.
Esta habilidad es esencial para cualquier profesional de pruebas de penetración o analista de seguridad para garantizar que todas las aplicaciones web en un servidor se prueben a fondo, no solo la predeterminada.


