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.
Un escaneo completo de Nikto puede consumir mucho tiempo, especialmente en aplicaciones web grandes y complejas. Si necesita los resultados del escaneo en múltiples formatos (por ejemplo, uno para un informe técnico y otro para una presentación), ejecutar el escaneo repetidamente es ineficiente. Nikto proporciona una potente función para guardar los resultados del escaneo y luego "reproducirlos" para generar informes en diferentes formatos sin volver a escanear el objetivo.
En este laboratorio, aprenderá a realizar un escaneo inicial, guardar los resultados en un archivo XML y luego usar la opción -replay para generar eficientemente un nuevo informe en formato HTML.
Realizar un escaneo y guardar la salida en un archivo XML
En este paso, realizará un escaneo básico de Nikto contra un servidor web de prueba local. La clave es guardar la salida en un archivo en un formato estructurado, como XML, que Nikto pueda analizar más tarde. Utilizaremos la opción -o para especificar un archivo de salida y -Format para definir el tipo de archivo.
Primero, asegúrese de estar en el directorio ~/project. Nuestro script de configuración ya ha iniciado un servidor web simple en localhost en el puerto 8000.
Ahora, ejecute el siguiente comando en su terminal para escanear el servidor web local y guardar los resultados en un archivo llamado scan_results.xml:
nikto -h http://localhost:8000 -o scan_results.xml -Format xml
Analicemos este comando:
nikto: El comando para ejecutar el escáner Nikto.-h http://localhost:8000: Especifica el host (objetivo) a escanear.-o scan_results.xml: Especifica el nombre del archivo de salida.-Format xml: Indica a Nikto que guarde la salida en formato XML.
El escaneo tardará un momento en completarse. Verá una salida en su terminal similar a la siguiente (los detalles pueden variar):
- Nikto v2.5.0
---------------------------------------------------------------------------
+ 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-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)
+ Allowed HTTP Methods: GET, HEAD, OPTIONS
+ Public HTTP Methods: GET, HEAD, OPTIONS
...
+ 1 host(s) tested
Después de que el comando finalice, se creará un archivo llamado scan_results.xml en su directorio actual (~/project).
Usar la opción -replay con el archivo XML guardado
En este paso, aprenderá a utilizar la función -replay de Nikto. Esta opción permite a Nikto analizar un archivo de escaneo XML guardado previamente y mostrar los hallazgos sin conectarse nuevamente al servidor de destino. Esto es increíblemente útil para revisar rápidamente los resultados o para situaciones en las que el objetivo ya no está en línea.
Para reproducir el escaneo que acaba de guardar, use el siguiente comando:
nikto -replay scan_results.xml
Este comando le indica a Nikto que lea el archivo scan_results.xml y muestre los hallazgos en la terminal. La salida será casi idéntica a la salida de terminal del escaneo original, pero se generará instantáneamente desde el archivo.
- Nikto v2.5.0
---------------------------------------------------------------------------
+ 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-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.
...
+ 1 host(s) tested
Observe la rapidez con la que se completa el comando. Esto demuestra que Nikto está leyendo desde el archivo local, no realizando un nuevo escaneo de red.
Usar -Format htm para generar un nuevo informe HTML
En este paso, combinará la opción -replay con la opción -Format para generar un informe en un nuevo formato. Este es el núcleo de la lección de este laboratorio: puede tomar un escaneo guardado y producir varios tipos de informes a partir de él.
Supongamos que ahora necesita un informe HTML bien formateado para una presentación. Puede generarlo directamente desde su archivo scan_results.xml guardado.
Ejecute el siguiente comando:
nikto -replay scan_results.xml -o report.html -Format htm
Aquí está el desglose del nuevo comando:
nikto -replay scan_results.xml: Esta parte es la misma que en el paso anterior; le dice a Nikto que use los datos guardados.-o report.html: Esto especifica un nuevo archivo de salida llamadoreport.html.-Format htm: Esto le dice a Nikto que formatee la salida como un archivo HTML.
Este comando se ejecutará muy rápidamente y producirá una salida mínima en la terminal, ya que está escribiendo el informe directamente en el archivo report.html.
- Nikto v2.5.0
+ 1 host(s) tested
Ahora ha generado con éxito un nuevo informe en un formato diferente sin volver a escanear el objetivo.
Verificar que el nuevo informe se creó sin volver a escanear
En este paso, verificará que se ha creado el nuevo archivo de informe HTML y confirmará que contiene contenido HTML válido. Esto refuerza la comprensión de que el comando anterior generó un informe basado en archivos.
Primero, liste los archivos en su directorio actual (~/project) para ver el informe recién creado.
ls -l
Debería ver tanto el archivo XML original como el nuevo archivo HTML en la salida:
total 12
-rw-r--r-- 1 labex labex 68 ... index.html
-rw-r--r-- 1 labex labex ... ... report.html
-rw-r--r-- 1 labex labex ... ... scan_results.xml
A continuación, para verificar rápidamente el contenido del nuevo informe, puede usar el comando head para ver las primeras líneas del archivo report.html.
head report.html
La salida mostrará el inicio de un documento HTML, confirmando que el archivo se creó correctamente.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Nikto Report</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
...
La observación más importante es la velocidad. El comando en el Paso 3 finalizó casi instantáneamente, mientras que el escaneo original en el Paso 1 tomó un tiempo notable. Esta es la prueba definitiva de que está reformateando datos existentes, no realizando un escaneo nuevo y que consume mucho tiempo.
Comprender la eficiencia de reproducir resultados guardados
En este último paso, solidificará su comprensión de la eficiencia que se obtiene al utilizar la función de reproducción. Imagine que también necesita los resultados en formato CSV (valores separados por comas) para importarlos a una hoja de cálculo para un análisis posterior. En lugar de ejecutar otro escaneo, simplemente puede generar otro informe del mismo archivo scan_results.xml.
Ejecute el siguiente comando para crear un informe CSV:
nikto -replay scan_results.xml -o report.csv -Format csv
Este comando está estructurado de manera similar al del HTML, pero especifica un nuevo nombre de archivo (report.csv) y un nuevo formato (csv). Nuevamente, se completará en segundos.
Ahora, liste los archivos nuevamente para ver todos los informes generados:
ls -l
Ahora verá tres archivos de informe, todos generados a partir de un solo escaneo:
total 16
-rw-r--r-- 1 labex labex 68 ... index.html
-rw-r--r-- 1 labex labex ... ... report.csv
-rw-r--r-- 1 labex labex ... ... report.html
-rw-r--r-- 1 labex labex ... ... scan_results.xml
Este flujo de trabajo —escanear una vez, informar muchas veces— es una piedra angular de la evaluación de vulnerabilidades eficiente. Para escaneos a gran escala que pueden llevar horas, esta función ahorra una enorme cantidad de tiempo y recursos computacionales, lo que le permite concentrarse en analizar los resultados en lugar de esperar a que se completen los escaneos.
Resumen
En este laboratorio, ha aprendido un flujo de trabajo muy eficiente para trabajar con los resultados de escaneo de Nikto. Realizó con éxito un escaneo de servidor web y guardó sus hallazgos en un archivo XML. Luego utilizó la potente opción -replay para analizar estos datos guardados y generar nuevos informes en diferentes formatos (HTML y CSV) sin necesidad de volver a ejecutar el escaneo de red, que consume mucho tiempo.
Los comandos y conceptos clave que practicó son:
nikto -h [host] -o [file.xml] -Format xml: Para realizar un escaneo y guardar los resultados.nikto -replay [file.xml] -o [new_report] -Format [htm/csv/txt]: Para generar nuevos informes a partir de datos guardados.
Esta técnica de separar la fase de escaneo de la fase de informes es crucial para las pruebas y el análisis de seguridad eficientes.


