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 obsoletas de más de 1250 servidores y problemas específicos de versión en más de 270 servidores.
Un proxy, en este contexto, es un servidor intermediario que se sitúa entre su herramienta (Nikto) y el servidor de destino. Herramientas como Burp Suite, OWASP ZAP o mitmproxy se utilizan comúnmente para esto. Enrutar el tráfico de Nikto a través de un proxy es una técnica potente para los profesionales de la seguridad. Le permite ver exactamente qué peticiones está enviando el escáner y qué respuestas recibe. Esto es invaluable para depurar escaneos, comprender el comportamiento de un escáner e incluso modificar el tráfico sobre la marcha para eludir medidas de seguridad.
En este laboratorio, aprenderá a configurar un proxy local, configurar Nikto para usarlo, ejecutar un escaneo y analizar el tráfico interceptado. Utilizaremos mitmproxy como nuestro proxy y un servidor web local simple de Python como nuestro objetivo.
Configurar un proxy local como Burp Suite u OWASP ZAP
En este paso, iniciaremos un servidor web simple para que actúe como nuestro objetivo de escaneo y luego iniciaremos mitmproxy, un proxy ligero de línea de comandos, para interceptar nuestro tráfico. Todas las operaciones se realizarán en la terminal.
Primero, iniciemos un servidor web básico de Python. Este servidor alojará un archivo simple index.html de nuestro directorio actual, ~/project. Lo ejecutaremos en el puerto 8000 en segundo plano para que podamos seguir usando la misma terminal.
Ejecute el siguiente comando:
python3 -m http.server 8000 &
El & al final del comando ejecuta el proceso en segundo plano. Debería ver una salida que indique el ID del proceso.
A continuación, iniciemos nuestro proxy. Utilizaremos mitmweb, que es la interfaz web de mitmproxy. Esto proporciona una forma fácil de usar para ver el tráfico capturado. Escucha el tráfico del proxy en el puerto 8080 por defecto y sirve su interfaz web en el puerto 8081.
Ejecute el siguiente comando para iniciar mitmweb, también en segundo plano:
mitmweb --web-host 0.0.0.0 &
Verá alguna salida mientras mitmweb se inicia. Ahora tiene un servidor de destino ejecutándose en el puerto 8000 y un proxy ejecutándose en el puerto 8080. Puede ver el tráfico del proxy abriendo un navegador en el entorno del laboratorio y navegando a http://127.0.0.1:8081. Por ahora, estará vacío.
Configurar Nikto para usar el proxy con -useproxy
En este paso, aprenderá a indicar a Nikto que envíe su tráfico a través de la instancia de mitmproxy que acabamos de iniciar. Nikto tiene una opción de línea de comandos dedicada, -useproxy, para este propósito.
La sintaxis para esta opción es -useproxy http://<proxy_host>:<proxy_port>. Dado que nuestro mitmproxy se está ejecutando en la máquina local (127.0.0.1) en el puerto 8080, la URL correcta será http://127.0.0.1:8080.
Antes de ejecutar un escaneo completo, realicemos una prueba simple para asegurarnos de que Nikto pueda conectarse al servidor de destino a través del proxy. Utilizaremos la opción -Plugins '@@NONE', que indica a Nikto que se conecte e imprima el banner del servidor, pero que no ejecute ninguna prueba de vulnerabilidad. Esta es una forma rápida y efectiva de verificar nuestra configuración de proxy.
Ejecute el siguiente comando en su terminal:
nikto -h 127.0.0.1 -p 8000 -useproxy http://127.0.0.1:8080 -Plugins '@@NONE'
Debería ver una salida similar a esta, mostrando el banner de Nikto e información sobre el servidor de destino:
- Nikto v2.x.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.6
+ END TIME: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Ahora, si revisa la interfaz de mitmweb en su navegador en http://127.0.0.1:8081, verá la primera petición capturada de Nikto. Esto confirma que la configuración del proxy está funcionando correctamente.
Ejecutar un escaneo dirigido a través del proxy configurado
En este paso, con la configuración del proxy verificada, realizará ahora un escaneo de vulnerabilidades real con Nikto. Esto generará una cantidad significativa de tráfico, todo el cual se enrutará y registrará a través de mitmproxy.
Para mantener el tiempo de escaneo razonable para este laboratorio, utilizaremos la opción -Tuning 1. La opción de ajuste en Nikto controla los tipos de pruebas realizadas. -Tuning 1 se enfoca en las comprobaciones de "Archivo interesante / Visto en registro" (Interesting File / Seen in Log), que es un buen punto de partida.
Ejecute el siguiente comando para iniciar el escaneo:
nikto -h 127.0.0.1 -p 8000 -useproxy http://127.0.0.1:8080 -Tuning 1
Nikto comenzará ahora a escanear el servidor de destino. Verá su progreso y cualquier hallazgo directamente en su terminal. La salida podría parecerse a esto, dependiendo de los hallazgos:
- Nikto v2.x.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.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
...
+ /: The server returns the following message when a request for a non-existent page is made: b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"\n "http://www.w3.org/TR/html4/strict.dtd">\n<html>\n <head>\n <meta http-equiv="Content-Type" content="text/html;charset=utf-8">\n <title>Error response</title>\n </head>\n <body>\n <h1>Error response</h1>\n <p>Error code: 404.</p>\n <p>Message: File not found.</p>\n <p>Error code explanation: 404 - Nothing matches the given URI.</p>\n </body>\n</html>'
...
+ END TIME: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Mientras el escaneo se está ejecutando, puede cambiar a la pestaña del navegador mitmweb y observar cómo aparecen las peticiones en tiempo real.
Observar el tráfico de Nikto en el historial HTTP del proxy
En este paso, se centrará en analizar el tráfico capturado por mitmproxy. Aquí es donde el valor real de usar un proxy se vuelve evidente. No se necesitan nuevos comandos para este paso; utilizará la interfaz de mitmweb en su navegador.
Navegue a la pestaña del navegador que ejecuta mitmweb en http://127.0.0.1:8081. Debería ver una larga lista de peticiones web. Cada entrada en esta lista es una prueba específica que Nikto realizó contra el servidor de destino.
Haga clic en cualquiera de las peticiones en la lista de la izquierda. El panel derecho se actualizará para mostrar los detalles de esa petición específica y su respuesta correspondiente.
Explore la interfaz:
- Pestaña Request (Petición): Aquí puede ver la petición HTTP exacta enviada por Nikto. Preste atención a:
- La línea de petición (por ejemplo,
GET /some/test/file.html HTTP/1.1). - La cabecera
Host, que apunta a nuestro servidor de destino. - La cabecera
User-Agent, que identificará al cliente comoNikto.
- La línea de petición (por ejemplo,
- Pestaña Response (Respuesta): Esta pestaña muestra la respuesta completa del servidor. Puede ver el código de estado HTTP (por ejemplo,
200 OKo404 Not Found), las cabeceras de respuesta y el cuerpo de la respuesta.
Tómese unos minutos para hacer clic en diferentes peticiones. Verá a Nikto intentando acceder a directorios administrativos comunes (como /admin/), buscando archivos de copia de seguridad (como /index.html.bak) y realizando otras comprobaciones estándar. Al observar este tráfico, obtendrá una comprensión profunda de cómo opera un escáner de vulnerabilidades.
Analizar cómo el proxy afecta los resultados del escaneo
En este paso, analizará cómo el uso de un proxy puede afectar potencialmente un escaneo. Para hacer esto, necesita una línea base para comparar. Ejecutará el mismo escaneo de Nikto nuevamente, pero esta vez sin el proxy.
Ejecute el mismo comando de escaneo que en el Paso 3, pero omita la opción -useproxy:
nikto -h 127.0.0.1 -p 8000 -Tuning 1
Observe la salida en su terminal. Ahora, compare los resultados de este escaneo con los resultados del escaneo proxificado en el Paso 3. En nuestro simple entorno de laboratorio, sin firewalls u otros sistemas de seguridad implementados, los resultados deberían ser idénticos.
Entonces, ¿cuál es el propósito del proxy?
- Visibilidad (Depuración): Como vio en el paso anterior, el beneficio principal es la visibilidad. Si un escaneo estaba fallando o produciendo resultados inesperados, el proxy sería el primer lugar al que acudir para comprender qué está saliendo mal. Puede ver las peticiones y respuestas sin procesar, lo cual es crucial para la resolución de problemas.
- Rendimiento: Un proxy agrega un "salto" adicional para el tráfico de red, lo que puede introducir una pequeña cantidad de latencia. Para escaneos muy grandes, esto podría aumentar ligeramente el tiempo total del escaneo.
- Modificación (Avanzado): Los proxies avanzados se pueden configurar para modificar el tráfico. Por ejemplo, podría configurar una regla para cambiar automáticamente el
User-Agentde "Nikto" a una cadena de navegador común. Esto podría usarse para evadir un Web Application Firewall (WAF) simple que bloquea las peticiones basándose en el agente de usuario de Nikto. Si bien no estamos realizando modificaciones en este laboratorio, comprender esta capacidad es clave.
En resumen, para este laboratorio, el principal efecto del proxy fue brindarle una vista de "man-in-the-middle" (hombre en el medio) del proceso de escaneo, que es una habilidad fundamental para las pruebas de seguridad.
Resumen
En este laboratorio, ha aprendido con éxito cómo utilizar un proxy mientras realiza un escaneo de vulnerabilidades web con Nikto.
Comenzó configurando el entorno necesario, incluido un servidor web simple de Python como objetivo y mitmproxy como su proxy de intercepción. Luego aprendió a usar la opción de línea de comandos -useproxy de Nikto para enrutar todo su tráfico de escaneo a través del proxy.
Al ejecutar un escaneo y observar el tráfico en la interfaz de mitmweb, obtuvo una visión directa de los tipos de peticiones que envía Nikto y las respuestas que recibe. Finalmente, al ejecutar un escaneo comparativo sin el proxy, analizó cómo un proxy puede afectar un escaneo, concluyendo que su función principal en este contexto es proporcionar visibilidad crítica para el análisis y la depuración. Esta es una técnica fundamental utilizada por los profesionales de seguridad para comprender y controlar mejor sus herramientas de prueba.


