Establecer un tiempo de espera de solicitud en Nikto

Kali LinuxBeginner
Practicar Ahora

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.

Al escanear servidores web, especialmente en redes lentas o poco fiables, o contra servidores que están bajo una carga pesada, las solicitudes pueden tardar mucho tiempo en completarse. Por defecto, Nikto espera 10 segundos una respuesta. Si un servidor es más lento que esto, Nikto puede reportar errores de tiempo de espera (timeout errors) y no completar el escaneo correctamente.

En este laboratorio, aprenderá a utilizar la opción -timeout de Nikto para controlar el período de tiempo de espera de las solicitudes. Esto le permitirá ajustar el comportamiento de Nikto para escanear con éxito servidores web lentos o que no responden.

Identificar un servidor web lento o que no responde

En este paso, aprenderá a identificar si un servidor web es lento. Antes de ajustar los tiempos de espera en una herramienta de escaneo, es crucial medir primero el tiempo de respuesta típico del servidor. Una forma sencilla de hacerlo es con el comando curl.

Hemos iniciado un servidor web en segundo plano que es intencionalmente lento; espera 5 segundos antes de enviar una respuesta. Usemos curl para medir cuánto tiempo se tarda en obtener una respuesta de él. La bandera -w nos permite formatear la salida, y %{time_total} es una variable que contiene el tiempo total de la transacción.

Ejecute el siguiente comando en su terminal para medir el tiempo de respuesta del servidor local que se ejecuta en el puerto 8000:

curl -o /dev/null -s -w 'Total time: %{time_total}\n' http://localhost:8000

Verá una salida similar a la siguiente. El tiempo será ligeramente superior a 5 segundos debido al retraso artificial que añadimos en el servidor.

Total time: 5.00...

Esto confirma que el servidor es lento y tarda más de unos pocos segundos en responder. Esta información es vital para establecer un tiempo de espera apropiado en Nikto.

Usar la opción -timeout para establecer un tiempo de espera corto en segundos

En este paso, aprenderá sobre la opción -timeout de Nikto. Esta opción le permite especificar el número de segundos que Nikto esperará a que se complete cualquier solicitud individual antes de darse por vencido y marcarla como un tiempo de espera agotado (timeout). El valor predeterminado es 10 segundos.

Para comprender cómo se comporta Nikto con un tiempo de espera mal configurado, estableceremos intencionalmente un valor demasiado corto para nuestro servidor lento. Dado que sabemos que el servidor tarda aproximadamente 5 segundos en responder, estableceremos un tiempo de espera de 2 segundos. Esto hará que el escaneo falle con errores de tiempo de espera, que observaremos en el siguiente paso.

Primero, confirmemos la existencia y descripción de la opción -timeout utilizando el menú de ayuda de Nikto. Puede canalizar la salida de nikto -Help a grep para encontrar la opción específica.

nikto -Help | grep timeout

La salida le mostrará la opción -timeout y su descripción:

-timeout <secs>     Timeout for requests (default 10 seconds)

Esto confirma cómo usar la opción. En el siguiente paso, la aplicaremos en un escaneo real.

Ejecutar el escaneo y observar posibles errores de tiempo de espera

En este paso, ejecutará el escaneo de Nikto con el valor de tiempo de espera corto que hemos decidido. Esto demostrará lo que sucede cuando el tiempo de espera no es suficiente para el servidor de destino.

Ejecute el siguiente comando para escanear el servidor local con un tiempo de espera de 2 segundos. La bandera -h especifica el host y -p especifica el puerto.

nikto -h localhost -p 8000 -timeout 2

A medida que se ejecuta el escaneo, verá múltiples mensajes de error impresos en la consola. Nikto intentará realizar solicitudes, pero dado que el servidor tarda 5 segundos en responder, el tiempo de espera de 2 segundos se excederá cada vez.

La salida se llenará de errores similares a estos:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ 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
+ ERROR: Connection timed out
+ ERROR: Connection timed out
... (muchos más errores) ...

Los mensajes repetidos de ERROR: Connection timed out son una clara señal de que el valor del tiempo de espera es demasiado bajo. Los resultados del escaneo no son fiables y es probable que se omitan muchas pruebas.

Aumentar el valor del tiempo de espera para un escaneo más fiable

En este paso, corregirá el problema del paso anterior estableciendo un valor de tiempo de espera apropiado. Para garantizar un escaneo fiable, el tiempo de espera debe ser mayor que el tiempo de respuesta esperado más largo del servidor.

De nuestra prueba con curl en el Paso 1, sabemos que el servidor tarda aproximadamente 5 segundos en responder. Para estar seguros, deberíamos añadir un pequeño margen. Establezcamos el tiempo de espera en 7 segundos. Esto le da al servidor tiempo suficiente para procesar la solicitud y enviar una respuesta.

Ejecute el escaneo de Nikto nuevamente, pero esta vez con un tiempo de espera de 7 segundos:

nikto -h localhost -p 8000 -timeout 7

Esta vez, debería ver un resultado diferente. El escaneo procederá sin los errores de "Connection timed out". Nikto ahora podrá comunicarse correctamente con el servidor y realizar sus pruebas.

La salida se parecerá más a un escaneo normal y exitoso:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Python/3.10.6 http.server/0.6
+ 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)
+ "robots.txt" not found.
...

Observe la ausencia de errores de tiempo de espera y la presencia de un banner del servidor. Esto indica que el escaneo se está ejecutando de manera fiable.

Encontrar un valor de tiempo de espera óptimo para la red de destino

En este paso, discutiremos la estrategia para encontrar un valor de tiempo de espera óptimo. Si bien utilizamos un retraso conocido en nuestro entorno controlado, en un escenario del mundo real, no conocerá el tiempo de respuesta exacto.

Encontrar el tiempo de espera óptimo es un equilibrio:

  • Demasiado corto: Conduce a errores de tiempo de espera y a un escaneo poco fiable (como se vio en el Paso 3).
  • Demasiado largo: Puede hacer que el escaneo sea innecesariamente lento si el servidor es realmente rápido. Por ejemplo, establecer un tiempo de espera de 30 segundos para un servidor que normalmente responde en 1 segundo significa que esperará 30 segundos por cada solicitud fallida real, ralentizando el escaneo general.

Una buena estrategia es:

  1. Realizar una medición de referencia utilizando ping o curl para comprender la latencia general.
  2. Comenzar con un tiempo de espera que sea unos segundos más largo que su medición de referencia.
  3. Si aún ve errores de tiempo de espera, aumente el valor gradualmente hasta que el escaneo se ejecute sin problemas.

Para nuestro servidor, un tiempo de espera de 7 segundos funcionó bien. Probemos un último escaneo con un tiempo de espera ligeramente más generoso de 10 segundos (el valor predeterminado de Nikto) y también introduzcamos la opción -maxtime, que limita la duración total del escaneo. Esto es útil para garantizar que un escaneo no se ejecute durante horas en un sitio web muy grande.

nikto -h localhost -p 8000 -timeout 10 -maxtime 60s

Este comando le indica a Nikto que espere hasta 10 segundos por cada solicitud y que aborte todo el escaneo si tarda más de 60 segundos. Esta combinación le brinda control tanto sobre los tiempos de las solicitudes individuales como sobre la duración total del escaneo.

Resumen

En este laboratorio, ha aprendido a gestionar eficazmente los tiempos de espera de las solicitudes en Nikto, una habilidad fundamental para realizar escaneos de vulnerabilidades web fiables.

Comenzó identificando un servidor web lento utilizando el comando curl para medir su tiempo de respuesta. Luego exploró la opción -timeout de Nikto, primero estableciéndola a un valor demasiado bajo, lo que resultó en errores de conexión. Posteriormente, aumentó el tiempo de espera a un valor apropiado, permitiendo que el escaneo se completara con éxito.

Finalmente, aprendió la estrategia para encontrar un valor de tiempo de espera óptimo equilibrando la fiabilidad y la eficiencia del escaneo, y se le introdujo a la opción relacionada -maxtime para controlar la duración total del escaneo. La configuración adecuada de estos ajustes garantiza que sus escaneos de Nikto sean exhaustivos y oportunos.