Ejecutar un escaneo básico de servidor web con Nikto

Kali LinuxBeginner
Practicar Ahora

Introducción

Nikto es un 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. También verifica elementos de configuración del servidor, como la presencia de múltiples archivos de índice y opciones del servidor HTTP.

En este laboratorio, aprenderá los fundamentos del uso de Nikto para realizar un escaneo básico. Comenzaremos configurando un servidor web local simple para que actúe como nuestro objetivo, y luego usaremos Nikto para escanearlo y analizar los resultados.

Identificar la dirección IP o el nombre de host del objetivo

En este paso, identificaremos y confirmaremos la dirección de nuestro servidor web objetivo. Antes de ejecutar cualquier escaneo, debe conocer la dirección IP o el nombre de host del objetivo. Para este laboratorio, el script de configuración ya ha iniciado un servidor web simple en su máquina local.

En un contexto de red, su propia máquina puede ser referida por el nombre de host localhost o la dirección IP 127.0.0.1. Esta dirección especial es una dirección de "loopback" (bucle de retorno), lo que significa que siempre apunta a la máquina local.

Verifiquemos que nuestro servidor web está en funcionamiento y es accesible. Podemos usar el comando curl para enviar una solicitud a nuestro servidor local. El servidor se está ejecutando en el puerto 8000.

Ejecute el siguiente comando en su terminal:

curl http://localhost:8000

Debería ver el contenido HTML de nuestra página web simple, lo que confirma que el servidor está activo y listo para ser escaneado.

<h1>Welcome to the Test Server</h1>

Ahora que hemos confirmado nuestro objetivo en localhost:8000, podemos proceder al siguiente paso.

Construir el comando de escaneo básico usando la bandera -h

En este paso, aprenderemos cómo construir un comando de escaneo básico de Nikto. Nikto tiene muchas opciones, pero la más fundamental es especificar el host objetivo.

La bandera -h o -host se utiliza para indicar a Nikto qué servidor escanear. Para familiarizarse con esta y otras opciones, puede ver el menú de ayuda de Nikto.

Ejecute el siguiente comando para mostrar la información de ayuda:

nikto -Help

La salida será bastante larga, listando todas las opciones disponibles. Desplácese por ella o utilice la función de búsqueda de su terminal para encontrar la opción -h. Verá una descripción similar a esta:

...
-h, -host       Target host/IP/SSL-name
...

Dado que nuestro servidor no se está ejecutando en el puerto HTTP estándar (80), también debemos especificar el número de puerto. Podemos hacerlo utilizando la bandera -p o -port.

Basándonos en esto, el comando para escanear nuestro servidor local en el puerto 8000 sería nikto -h localhost -p 8000. Ejecutaremos este comando en el siguiente paso.

Ejecutar el escaneo contra el servidor objetivo

En este paso, ejecutará el escaneo de Nikto utilizando el comando que construimos. Esto iniciará el proceso de escaneo, donde Nikto envía una serie de solicitudes al servidor objetivo para sondear posibles problemas.

Ahora, ejecute el escaneo contra su servidor web local.

nikto -h localhost -p 8000

Una vez que ejecute el comando, Nikto comenzará el escaneo. Primero mostrará información básica sobre el objetivo y luego comenzará a ejecutar sus pruebas. El proceso puede tardar unos momentos en completarse. Verá los resultados impresos directamente en su terminal en tiempo real.

Observar la salida en tiempo real durante el escaneo

En este paso, examinaremos la salida generada por el escaneo de Nikto. A medida que se ejecuta el escaneo, Nikto informa sus hallazgos. Cada hallazgo suele ir precedido de un signo más (+).

La salida del paso anterior debería parecerse a la siguiente. Tenga en cuenta que los números de versión y las horas variarán.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ 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)
+ Allowed HTTP Methods: GET, HEAD, OPTIONS
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
...
+ 1 host(s) tested

Tómese un momento para leer la salida. Puede ver que Nikto identifica el software del servidor, verifica encabezados de seguridad importantes (como X-Frame-Options), enumera los métodos HTTP permitidos e informa sobre posibles vulnerabilidades. Esta información es crucial para comprender la postura de seguridad de un servidor.

En este paso, nos centraremos en una de las piezas de información más importantes que proporciona Nikto: el banner del servidor. Un banner de servidor es una cadena de texto que el servidor web envía en sus encabezados de respuesta y que generalmente identifica el software del servidor y su versión.

Los atacantes utilizan esta información para encontrar vulnerabilidades conocidas asociadas con una versión de software específica. En los resultados de su escaneo del paso anterior, debería ver una línea que comienza con + Server:.

+ Server: SimpleHTTP/0.6 Python/3.10.12

Esta línea nos dice que el servidor web es SimpleHTTP/0.6 ejecutándose en Python/3.10.12.

Para practicar el aislamiento de información específica de una salida más grande, puede volver a ejecutar el escaneo y usar el comando grep para filtrar los resultados, mostrando solo la línea que contiene "Server".

Ejecute el siguiente comando:

nikto -h localhost -p 8000 | grep Server

Este comando canaliza la salida de Nikto a grep, que luego filtra y muestra solo las líneas que contienen la palabra "Server". Esta es una técnica muy útil para analizar archivos de registro o salidas de comandos grandes. Su salida debería ser la única línea que identifica el servidor.

+ Server: SimpleHTTP/0.6 Python/3.10.12

Resumen

En este laboratorio, ha realizado con éxito un escaneo básico de servidor web utilizando Nikto. Aprendió a identificar un objetivo, construir un comando de escaneo básico con las banderas -h y -p, y ejecutarlo. También practicó la observación de la salida en tiempo real y el aislamiento de información específica, como el banner del servidor, utilizando herramientas como grep.

Esto es solo el comienzo de lo que Nikto puede hacer. Tiene una gran variedad de opciones para escaneos más específicos y detallados, incluyendo verificaciones SSL, búsquedas en bases de datos de vulnerabilidades y varios formatos de salida. Ahora está equipado con el conocimiento fundamental para explorar estas características avanzadas y mejorar sus habilidades de prueba de seguridad web.