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.
Una de sus características clave es el escaneo de directorios Common Gateway Interface (CGI). Los scripts CGI pueden ser una fuente de vulnerabilidades significativas si no se aseguran adecuadamente. Por defecto, Nikto escanea una lista predefinida de directorios CGI comunes. Sin embargo, para un escaneo más eficiente y dirigido, es crucial saber cómo controlar este comportamiento.
En este laboratorio, aprenderá a utilizar la opción -Cgidirs de Nikto para gestionar el escaneo de directorios CGI, incluyendo su deshabilitación, el escaneo de todos los directorios posibles y la especificación de directorios personalizados para probar.
Comprender el comportamiento predeterminado de escaneo de directorios CGI de Nikto
En este paso, iniciará un servidor web simple y ejecutará un escaneo predeterminado de Nikto para observar su comportamiento estándar al encontrar directorios CGI.
Primero, configuremos un servidor web simple para escanear. Utilizaremos el módulo incorporado http.server de Python para esto.
Navegue al directorio webroot que hemos preparado para usted.
cd ~/project/webroot
Ahora, inicie el servidor web en el puerto 8000. El & al final del comando ejecutará el servidor en segundo plano, permitiéndole continuar usando la terminal.
python3 -m http.server 8000 &
Debería ver un mensaje que indica que el servidor se está ejecutando.
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Con el servidor en ejecución, realicemos un escaneo básico de Nikto. La opción -h se utiliza para especificar el host de destino.
nikto -h http://localhost:8000
Después de que el escaneo se complete, revise la salida. Nikto verifica muchas cosas, pero debería encontrar una línea que indique que encontró el directorio /cgi-bin/. Esto se debe a que /cgi-bin/ es uno de los directorios comunes que Nikto verifica por defecto.
- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ 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
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 7 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Nota: En algunas versiones o configuraciones más recientes de Nikto, el escaneo predeterminado podría no reportar
/cgi-bin/a menos que una prueba específica lo active. La conclusión clave es comprender que se está verificando un conjunto predeterminado de rutas. Forzaremos estas verificaciones en los siguientes pasos para ver resultados más claros.
Usar -Cgidirs none para deshabilitar todo el escaneo de directorios CGI
En este paso, aprenderá a deshabilitar completamente el escaneo de directorios CGI. Esto es útil cuando desea realizar un escaneo rápido enfocado en otras vulnerabilidades o cuando está seguro de que el servidor de destino no utiliza scripts CGI.
La opción -Cgidirs controla el escaneo de CGI. Al establecer su valor en none, usted instruye a Nikto para que omita esta parte de la prueba por completo.
Ejecute el siguiente comando para escanear el servidor nuevamente, pero esta vez con el escaneo de CGI deshabilitado:
nikto -h http://localhost:8000 -Cgidirs none
Examine la salida. Notará que es muy similar al escaneo anterior, pero confirma explícitamente que los directorios CGI no fueron escaneados. La línea No CGI directories found seguirá presente, pero esta vez es porque le dijimos a Nikto que no los buscara. Esto hace que el escaneo sea ligeramente más rápido.
- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ 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
+ CGI directory scanning has been disabled.
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 7 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Observe la línea + CGI directory scanning has been disabled. que confirma que nuestro comando funcionó como se esperaba.
Usar -Cgidirs all para escanear todos los directorios CGI configurados
En este paso, utilizará el valor all para la opción -Cgidirs. Esto obliga a Nikto a realizar el escaneo CGI más completo, comprobando cada directorio listado en su configuración interna. Esto es más exhaustivo que el escaneo predeterminado.
Ejecute el escaneo de Nikto con la opción -Cgidirs all:
nikto -h http://localhost:8000 -Cgidirs all
Ahora, inspeccione la salida cuidadosamente. Esta vez, Nikto informará explícitamente el directorio /cgi-bin/ porque nuestro servidor de prueba lo tiene y el indicador all asegura que se compruebe.
- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ 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
+ OSVDB-3233: /cgi-bin/: Directory indexing found.
+ OSVDB-3092: /cgi-bin/: This might be interesting...
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 8 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Puede ver dos nuevos hallazgos relacionados con /cgi-bin/, lo que confirma que el escaneo forzado fue exitoso.
Especificar una ruta de directorio CGI personalizada para escanear
En este paso, aprenderá a escanear directorios CGI específicos y no estándar. Esto es extremadamente útil cuando está evaluando una aplicación web personalizada que ubica sus scripts en lugares únicos.
Nuestra configuración incluye un directorio llamado /cgi-custom/. Un escaneo predeterminado de Nikto no lo encontraría. Podemos indicarle a Nikto que lo busque específicamente pasando la ruta a la opción -Cgidirs.
Ejecute el siguiente comando para escanear solo el directorio /cgi-custom/:
nikto -h http://localhost:8000 -Cgidirs /cgi-custom/
Revise la salida. Nikto ahora informará que ha encontrado /cgi-custom/. No informará sobre /cgi-bin/ porque limitamos el escaneo solo a la ruta que especificamos.
- Nikto v2.x
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ 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
+ OSVDB-3233: /cgi-custom/: Directory indexing found.
+ OSVDB-3092: /cgi-custom/: This might be interesting...
+ "robots.txt" not found.
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3092: /: This might be interesting...
+ /index.html: This might be interesting...
+ 8 items found on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Como puede ver, el escaneo identificó con éxito el directorio personalizado, lo que demuestra cómo puede adaptar el escaneo CGI de Nikto a sus necesidades específicas.
Comparar resultados de diferentes estrategias de escaneo CGI
En este paso final, revisemos y comparemos los resultados de las diferentes estrategias de escaneo que ha utilizado. Esto le ayudará a afianzar su comprensión sobre cómo controlar el escaneo CGI de Nikto.
Ha realizado cuatro tipos de escaneos distintos:
- Escaneo Predeterminado (
nikto -h ...): Escaneó una lista predeterminada de directorios comunes. En nuestro caso, inicialmente no marcó/cgi-bin/, pero el directorio estaba presente. Este escaneo proporciona una buena línea de base. - Sin Escaneo CGI (
-Cgidirs none): Omitió por completo todas las comprobaciones de directorios CGI. La salida confirmó queCGI directory scanning has been disabled(el escaneo de directorios CGI ha sido deshabilitado). Esta es la opción más rápida si no necesita verificar CGI. - Escaneo CGI Completo (
-Cgidirs all): Forzó una comprobación de todos los directorios CGI conocidos por Nikto. Este escaneo encontró e informó con éxito nuestro directorio/cgi-bin/. Esta es la opción más exhaustiva pero también la más lenta. - Escaneo CGI Personalizado (
-Cgidirs /cgi-custom/): Escaneó solo el directorio específico/cgi-custom/y lo encontró con éxito, ignorando todos los demás como/cgi-bin/. Este es el enfoque más específico.
La elección de la estrategia correcta depende de su objetivo:
- Para una visión general rápida, el escaneo predeterminado suele ser suficiente.
- Para ser absolutamente exhaustivo, use
all. - Para ahorrar tiempo en un servidor conocido sin CGI, use
none. - Para aplicaciones personalizadas, especificar rutas personalizadas es el método más eficiente.
Finalmente, limpiemos deteniendo el servidor web de Python. Dado que fue el primer y único trabajo en segundo plano que inició, puede detenerlo con el comando kill %1.
kill %1
Verá un mensaje de "Terminated" (Terminado), que confirma que el servidor se ha apagado.
Resumen
En este laboratorio, ha adquirido experiencia práctica en el control del escaneo de directorios CGI en Nikto. Aprendió a iniciar un servidor web simple para fines de prueba y luego aplicó diferentes estrategias de escaneo utilizando la opción -Cgidirs.
Ha logrado con éxito:
- Realizar un escaneo predeterminado de Nikto.
- Deshabilitar completamente el escaneo CGI usando
-Cgidirs none. - Llevar a cabo un escaneo exhaustivo de todos los directorios CGI conocidos con
-Cgidirs all. - Dirigirse a un directorio específico y no estándar proporcionando una ruta personalizada.
Al dominar estas opciones, ahora puede ejecutar escaneos de vulnerabilidades de servidores web más eficientes, dirigidos y efectivos con Nikto, adaptando sus pruebas a las características específicas de su objetivo.


