Depurar un escaneo de Nikto para solución de problemas

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, verifica versiones desactualizadas de más de 1250 servidores y problemas específicos de versión en más de 270 servidores.

Si bien Nikto es potente, los escaneos a veces pueden fallar, producir resultados inesperados o requerir una investigación más profunda. En estas situaciones, las funciones de depuración de Nikto son invaluables. Le permiten ver las solicitudes HTTP exactas que se envían y las respuestas recibidas, lo que le ayuda a identificar problemas de red, configuraciones erróneas del servidor o problemas con el propio escaneo.

En este laboratorio, aprenderá a utilizar las opciones de depuración de Nikto para solucionar problemas y comprender eficazmente sus escaneos de vulnerabilidades web.

Ejecutar un escaneo con la opción -debug

En este paso, realizará un escaneo básico de Nikto utilizando la opción -debug. Esta opción proporciona una salida muy detallada, mostrando todos los detalles de cada solicitud enviada por Nikto y la respuesta correspondiente del servidor. Este es el primer y más crucial paso para solucionar cualquier escaneo.

Primero, asegúrese de estar en el directorio ~/project. Ya hemos configurado un servidor web simple ejecutándose en 127.0.0.1 en el puerto 8000 para que lo escanee.

Ejecute el siguiente comando para ejecutar Nikto con la opción -debug contra el servidor web local:

nikto -h http://127.0.0.1:8000 -debug

Verá una gran cantidad de salida desplazándose. Esta es la información de depuración. Incluye los resultados estándar del escaneo de Nikto mezclados con datos detallados de solicitud y respuesta.

Una pequeña parte de la salida se verá similar a esto, mostrando la comunicación HTTP en bruto:

- 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)
DEBUG: User-Agent is 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
DEBUG: Request -> 127.0.0.1:8000
GET / HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept-Encoding: gzip,deflate
Accept: */*


DEBUG: Response -> 127.0.0.1:8000
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.12
Date: ...
Content-type: text/html; charset=utf-8
Content-Length: 36
Last-Modified: ...

DEBUG: Received: <h1>Welcome to the Test Site</h1>

... (many more lines) ...

Esta vista detallada es esencial para comprender exactamente qué está probando Nikto.

Observar la información detallada de solicitud y respuesta

En este paso, observará más de cerca la salida generada en el paso anterior. El gran volumen de información de depuración puede ser abrumador, por lo que es útil utilizar una herramienta de paginación como less para revisarla.

Ejecutemos el comando nuevamente, pero esta vez canalizaremos la salida a less. Esto le permite desplazarse por la salida página por página.

nikto -h http://127.0.0.1:8000 -debug | less

Una vez que la salida aparezca en less, puede usar las siguientes teclas para navegar:

  • Teclas de flecha o j/k para desplazarse hacia arriba y hacia abajo.
  • Page Up/Page Down o barra espaciadora para moverse por páginas.
  • q para salir y volver al prompt del comando.

Mientras se desplaza, preste atención a estas partes clave de la salida de depuración para cada prueba:

  • DEBUG: Request ->: Esta sección muestra la solicitud HTTP exacta que se está enviando, incluido el método (GET, POST, etc.), la URI y todas las cabeceras.
  • DEBUG: Response ->: Esto muestra las cabeceras de respuesta del servidor, incluido el código de estado HTTP (por ejemplo, 200 OK, 404 Not Found).
  • DEBUG: Received:: Esto muestra el cuerpo de la respuesta HTTP del servidor.

Al examinar esta información, puede verificar si el servidor está respondiendo como se esperaba, si un firewall está bloqueando las solicitudes o si Nikto está interpretando una respuesta correctamente.

Presione q para salir de less cuando haya terminado de observar.

Redirigir la salida de depuración a un archivo para análisis posterior

En este paso, aprenderá a guardar la salida detallada de depuración en un archivo. Para escaneos largos o complejos, analizar la salida en tiempo real no es práctico. Guardarla en un archivo permite el análisis fuera de línea, la búsqueda y el intercambio con miembros del equipo.

La información de depuración de Nikto se envía al flujo de Error Estándar (STDERR), mientras que los resultados normales van a la Salida Estándar (STDOUT). Para capturar todo, debe redirigir ambos flujos a un archivo.

Utilice el siguiente comando para ejecutar el escaneo y guardar toda la salida en un archivo llamado debug_output.txt:

nikto -h http://127.0.0.1:8000 -debug > debug_output.txt 2>&1

Analicemos la parte de redirección:

  • >: Este es el operador de redirección de salida estándar. Envía STDOUT a debug_output.txt.
  • 2>&1: Esto redirige STDERR (descriptor de archivo 2) al mismo lugar que STDOUT (descriptor de archivo 1), que es nuestro archivo.

Después de que el comando finalice, verifique que el archivo se haya creado:

ls -l debug_output.txt

Debería ver el archivo listado en la salida:

-rw-r--r-- 1 labex labex ... ... debug_output.txt

Ahora puede examinar el contenido del archivo usando cat o less:

less debug_output.txt

Ahora tiene un registro permanente del escaneo y su información de depuración para una revisión detallada. Presione q para salir de less.

Usar -dbcheck para verificar la sintaxis de las bases de datos de escaneo

En este paso, utilizará la opción -dbcheck. Esta es una herramienta de diagnóstico que no realiza un escaneo, sino que verifica la sintaxis de las bases de datos y plugins internos de Nikto. Si Nikto se está bloqueando, fallando al iniciarse o comportándose de manera errática, ejecutar una verificación de la base de datos es un buen primer paso para asegurarse de que sus propios archivos no estén corruptos.

Las bases de datos contienen las definiciones de todas las verificaciones de vulnerabilidad que realiza Nikto. Un error de sintaxis en uno de estos archivos podría hacer que las pruebas fallen silenciosamente o que el programa completo se bloquee.

Para realizar la verificación, ejecute el siguiente comando:

nikto -dbcheck

Nikto analizará sus archivos de plugins y bases de datos. Si todo es correcto, la salida confirmará que no se encontraron errores.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ DBCheck: Parsing database '/var/lib/nikto/plugins/db_variables'
+ DBCheck: Parsing database '/var/lib/nikto/plugins/db_tests'
... (muchas más líneas) ...
+ DBCheck: 0 error(s) found in database.

Si se encontraron errores, la salida señalaría el archivo y el número de línea específicos, lo que le ayudaría a solucionar el problema (o a reinstalar Nikto si fuera necesario). Este simple comando puede ahorrar mucho tiempo al solucionar problemas de la propia herramienta.

Solucionar problemas de un escaneo fallido utilizando la salida de depuración

En este paso, aplicará lo que ha aprendido a un escenario práctico de solución de problemas. Simularemos un problema común: un escaneo que falla porque el host de destino no es accesible. Sin la salida de depuración, la causa podría no ser inmediatamente obvia.

Intentaremos escanear una dirección IP inexistente en la red local, 10.255.255.1. También utilizaremos -maxtime 10s para asegurar que el escaneo termine rápidamente.

Ejecute el siguiente comando:

nikto -h 10.255.255.1 -maxtime 10s -debug

Observe la salida cuidadosamente. Debido a que el host no existe, Nikto no podrá establecer una conexión. La salida de depuración mostrará claramente estos intentos y fallos de conexión.

Verá mensajes de error como este distribuidos a lo largo del registro de depuración:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          10.255.255.1
+ Target Hostname:    10.255.255.1
+ Target Port:        80
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: No banner retrieved
DEBUG: Request -> 10.255.255.1:80
GET / HTTP/1.1
Host: 10.255.255.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept-Encoding: gzip,deflate
Accept: */*


+ ERROR: Cannot connect to 10.255.255.1:80 (No route to host)
...

El mensaje clave aquí es ERROR: Cannot connect... (No route to host). Esto le indica inmediatamente que el problema no es con la configuración del servidor web ni un error en Nikto, sino un problema fundamental de conectividad de red. El escaneo está "fallando" porque el destino no es accesible. Esto demuestra cómo la opción -debug proporciona el contexto necesario para diagnosticar rápidamente la causa raíz de un problema.

Resumen

En este laboratorio, ha aprendido las técnicas esenciales para depurar y solucionar problemas de escaneos del servidor web Nikto.

Comenzó utilizando la opción -debug para ver datos detallados de solicitudes y respuestas, lo que le brindó una imagen clara de las acciones del escáner. Luego aprendió a gestionar esta salida redirigiéndola a un archivo para su análisis sin conexión. También utilizó la utilidad -dbcheck para verificar la integridad de los propios archivos de base de datos de Nikto, un paso crucial al solucionar problemas de la herramienta en sí. Finalmente, aplicó estas habilidades a un escenario del mundo real, identificando rápidamente un problema de conectividad de red como la causa de un escaneo fallido.

Con estas habilidades, ahora está mejor equipado para diagnosticar y resolver problemas, asegurando que sus escaneos de Nikto sean efectivos y confiables.