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. Sin embargo, a veces un escaneo completo puede ser demasiado "ruidoso" o producir falsos positivos. En este laboratorio, aprenderá a refinar sus escaneos de Nikto excluyendo plugins específicos, haciendo que sus resultados sean más enfocados y accionables.
Identificar un plugin ruidoso o no deseado de un escaneo completo
En este paso, realizaremos un escaneo básico de Nikto contra un servidor web de prueba. Este escaneo inicial servirá como línea de base, permitiéndonos ver todos los hallazgos generados por el conjunto predeterminado de plugins. A partir de este informe completo, podemos identificar plugins que podríamos querer excluir en escaneos futuros.
Primero, asegúrese de estar en el directorio ~/project. Nuestro script de configuración ya ha iniciado un servidor web simple en segundo plano. Ejecutemos un escaneo estándar de Nikto contra él. La opción -h se utiliza para especificar el host de destino.
Ejecute el siguiente comando en su terminal:
nikto -h http://127.0.0.1:8000
Después de que el escaneo se complete, verá un informe. Su salida se parecerá a esta, aunque la versión del servidor y otros detalles pueden variar.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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)
+ OSVDB-3233: /cgi-bin/: This might be interesting...
+ 7558 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
En la salida anterior, observe la línea: + OSVDB-3233: /cgi-bin/: This might be interesting.... Este hallazgo es generado por el plugin cgi. Para este laboratorio, fingiremos que este es un directorio esperado y que el hallazgo es solo "ruido" que queremos suprimir.
Usar la opción -plugins con un guion inicial
En este paso, aprenderemos sobre la sintaxis utilizada para controlar qué plugins ejecuta Nikto. Nikto proporciona la opción -plugins para este propósito. Para excluir un plugin, proporciona su nombre con un guion inicial (-).
Para saber qué plugins están disponibles para ser incluidos o excluidos, puede usar la opción -list-plugins. Esto imprimirá una lista de todos los plugins disponibles con una breve descripción de cada uno.
Listemos todos los plugins:
nikto -list-plugins
La salida será una lista larga. Aquí hay una pequeña muestra de lo que verá:
- Nikto v2.5.0
---------------------------------------------------------------------------
Loaded Main Plugins:
- apache_expect_header
Apache Expect header XSS (CVE-2006-3918)
- apache_users
Checks for sensitive files in ~user directories
- auth
Checks for authentication problems
- cgi
Checks for CGI directories
- clientaccesspolicy
Checks for permissive Client Access Policy (Silverlight)
... (la lista continúa) ...
A partir de esta lista, puede encontrar los nombres exactos de los plugins que desea excluir, como cgi, que identificamos en el paso anterior.
Construir el comando para excluir un solo plugin
En este paso, combinaremos lo que hemos aprendido para construir el comando para un nuevo escaneo que excluya un solo plugin. Nos dirigiremos al plugin cgi que identificamos en el Paso 1.
La sintaxis es sencilla: adjunta la opción -plugins a su comando de escaneo normal, seguido del nombre del plugin precedido por un guion.
La estructura del comando es: nikto -h [objetivo] -plugins -[plugin_a_excluir]
Basado en esta estructura, el comando para escanear nuestro servidor local mientras se excluye el plugin cgi es:
nikto -h http://127.0.0.1:8000 -plugins -cgi
Este comando le dice a Nikto que realice su escaneo estándar en http://127.0.0.1:8000 pero que omita cualquier verificación asociada con el plugin cgi. En el siguiente paso, ejecutaremos este comando y observaremos la diferencia en la salida.
Ejecutar el escaneo y verificar que el plugin fue omitido
En este paso, ejecutará el comando que construimos en el paso anterior. Al ejecutar el escaneo con el plugin cgi excluido, esperamos que el informe ya no contenga el hallazgo relacionado con el directorio /cgi-bin/.
Ahora, ejecute el comando en su terminal:
nikto -h http://127.0.0.1:8000 -plugins -cgi
El escaneo se ejecutará de nuevo, pero esta vez será un poco más rápido ya que está realizando menos comprobaciones. La salida debería verse así:
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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.
+ 7557 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Compare esta salida con la del Paso 1. Notará que la línea + OSVDB-3233: /cgi-bin/: This might be interesting... ahora falta. Esto confirma que hemos excluido con éxito el plugin cgi de nuestro escaneo.
Excluir múltiples plugins en un solo comando
En este paso, aprenderá cómo excluir múltiples plugins en un solo escaneo. Esto es útil cuando desea suprimir varios plugins ruidosos o irrelevantes a la vez.
Para excluir múltiples plugins, proporcione una lista de nombres de plugins separados por comas después de la opción -plugins. Cada nombre de plugin en la lista debe ir precedido de un guion.
La sintaxis es: nikto -h [objetivo] -plugins -[plugin1],-[plugin2],-[plugin3]
Ampliemos nuestro comando anterior para excluir también el plugin apache_expect_header, que es otro hallazgo común que podría considerarse de baja prioridad en algunos contextos.
Construya y ejecute el siguiente comando:
nikto -h http://127.0.0.1:8000 -plugins -cgi,-apache_expect_header
La salida ahora será aún más concisa, ya que se han omitido las comprobaciones de los plugins cgi y apache_expect_header.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: 127.0.0.1
+ Target Port: 8000
+ Start Time: ...
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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.
+ ... requests: 0 error(s) and 2 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
Como puede ver, al excluir selectivamente plugins, puede adaptar el comportamiento de escaneo de Nikto para que se ajuste a sus necesidades específicas, lo que resulta en informes más limpios y relevantes.
Resumen
En este laboratorio, aprendió a personalizar los escaneos de Nikto excluyendo plugins específicos. Comenzó ejecutando un escaneo base completo para identificar un plugin a excluir. Luego, aprendió sobre la opción -plugins y el comando -list-plugins. Finalmente, practicó la construcción y ejecución de comandos para excluir un solo plugin y múltiples plugins, verificando los resultados observando los cambios en la salida del escaneo. Esta técnica es esencial para ejecutar escaneos de vulnerabilidades más eficientes, dirigidos y menos ruidosos con Nikto.



