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.
Muchas aplicaciones web tienen áreas restringidas a las que solo se puede acceder después de que un usuario proporcione credenciales válidas. La autenticación básica HTTP (HTTP Basic Authentication) es uno de los métodos más sencillos utilizados para proteger estas áreas. Para realizar una evaluación de seguridad exhaustiva, es crucial escanear estas secciones autenticadas.
En este laboratorio, aprenderá a utilizar Nikto para realizar un escaneo autenticado en un directorio web protegido por autenticación básica. Utilizará la opción -id para proporcionar las credenciales necesarias, permitiendo a Nikto acceder y probar los recursos protegidos en busca de vulnerabilidades.
Identificar un recurso web protegido por autenticación básica
En este paso, primero verificará que el recurso web de destino está efectivamente protegido por autenticación básica. Una forma común de comprobarlo es utilizando el comando curl para inspeccionar las cabeceras HTTP devueltas por el servidor cuando intenta acceder al recurso.
Un recurso desprotegido devolverá un estado 200 OK, mientras que uno protegido devolverá un estado 401 Unauthorized junto con una cabecera WWW-Authenticate, indicando el tipo de autenticación requerida.
Intentemos acceder al directorio protegido http://localhost/protected/ usando curl con la opción -I, que solo recupera las cabeceras HTTP.
Ejecute el siguiente comando en su terminal:
curl -I http://localhost/protected/
Debería ver una salida similar a la siguiente. Observe el estado HTTP/1.1 401 Unauthorized y la cabecera WWW-Authenticate: Basic realm="...". Esto confirma que el directorio está protegido.
HTTP/1.1 401 Unauthorized
Date: [current_date]
Server: Apache/2.4.52 (Ubuntu)
WWW-Authenticate: Basic realm="Restricted Content"
Content-Type: text/html; charset=iso-8859-1
Obtener el nombre de usuario y la contraseña requeridos
En este paso, reconoceremos las credenciales necesarias para acceder al área protegida. En una prueba de penetración del mundo real, podría obtener estas credenciales a través de varios medios, como la adivinación de contraseñas, encontrarlas en repositorios de código públicos o mediante ingeniería social.
Para este laboratorio, el entorno ha sido preconfigurado con un nombre de usuario y una contraseña específicos. Necesitará estas credenciales para los pasos posteriores para realizar un escaneo autenticado.
Las credenciales son:
- Nombre de usuario:
labex - Contraseña:
P@ssw0rd123
No hay comandos que ejecutar en este paso. Simplemente tome nota de las credenciales anteriores y continúe con el siguiente paso, donde las utilizará para autenticarse.
Usar la opción -id con el formato 'usuario:contraseña'
En este paso, aprenderá sobre la opción -id de Nikto, que se utiliza para proporcionar credenciales para la autenticación HTTP. El formato es una única cadena que contiene el nombre de usuario y la contraseña, separados por dos puntos (:).
La sintaxis es: -id <nombre_usuario>:<contraseña>
Antes de usar esto con Nikto, es una buena práctica verificar que las credenciales funcionen. Puede hacerlo nuevamente con curl, esta vez usando la opción --user para proporcionar las credenciales.
Ejecute el siguiente comando para acceder a la página protegida con las credenciales correctas:
curl --user labex:P@ssw0rd123 http://localhost/protected/
Si las credenciales son correctas, el servidor concederá el acceso y devolverá el contenido de la página, como se muestra a continuación. Esto confirma que puede autenticarse correctamente.
This is a protected page accessible only with credentials.
Ahora que ha confirmado las credenciales y comprende el formato, está listo para utilizarlas en un escaneo de Nikto.
Ejecutar el escaneo autenticado contra el área protegida
En este paso, combinará sus conocimientos de los pasos anteriores para ejecutar un escaneo autenticado completo con Nikto. Necesita especificar el host de destino y las credenciales de autenticación.
La estructura del comando será:
nikto: El programa a ejecutar.-h http://localhost/protected/: La opción-h(host), que apunta directamente al directorio que desea escanear.-id labex:P@ssw0rd123: La opción-idcon el nombre de usuario y la contraseña.
Ahora, ejecute el comando completo en su terminal. El escaneo puede tardar unos minutos en completarse.
nikto -h http://localhost/protected/ -id labex:P@ssw0rd123
Nikto iniciará el escaneo. Dado que proporcionó credenciales válidas, podrá acceder a http://localhost/protected/ y probar vulnerabilidades dentro de ese directorio. La salida se verá algo así:
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: [scan_start_time]
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ /: 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.
+ /: Server may leak inodes via ETags, header found with file /, fields: 0x1ed 0x5f7e21e8a2e80
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD.
+ /: Apache/2.4.52 appears to be outdated (current is at least Apache/2.4.54).
+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time: [scan_end_time] (30 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
Verificar que Nikto accedió correctamente a los recursos protegidos
En este paso, analizará la salida del escaneo para confirmar que Nikto se autenticó y escaneó correctamente el área protegida. Un indicador clave de un escaneo autenticado exitoso es la ausencia de errores de autenticación generalizados.
Una buena práctica para analizar los resultados del escaneo es guardar la salida en un archivo. Puede hacerlo con la opción -o (output). Volvamos a ejecutar el escaneo y guardemos el informe en un archivo de texto llamado nikto_report.txt.
nikto -h http://localhost/protected/ -id labex:P@ssw0rd123 -o nikto_report.txt -Format txt
Después de que el escaneo se complete, se creará un archivo llamado nikto_report.txt en su directorio actual (~/project). Puede inspeccionar este archivo para verificar los resultados. Una forma rápida de comprobar el éxito es observar la línea de resumen del número de errores.
Utilice el comando grep para buscar la línea que contiene "error(s)" en su archivo de informe:
grep "error(s)" nikto_report.txt
La salida debería mostrar 0 error(s), lo que confirma que Nikto no encontró problemas como 401 Unauthorized al realizar las solicitudes. Esto, combinado con la lista de hallazgos, demuestra que el escaneo autenticado fue exitoso.
+ 8142 requests: 0 error(s) and 5 item(s) reported on remote host
Resumen
¡Felicitaciones por completar este laboratorio! Ha realizado con éxito un escaneo de vulnerabilidades web autenticado utilizando Nikto.
En este laboratorio, aprendió a:
- Identificar un recurso web protegido por autenticación HTTP Basic utilizando
curl. - Comprender el formato de las credenciales requeridas para un escaneo autenticado.
- Utilizar la opción
-idde Nikto para proporcionar un nombre de usuario y una contraseña. - Ejecutar un escaneo contra un directorio protegido y verificar su éxito analizando la salida.
Dominar el escaneo autenticado es una habilidad fundamental para cualquier profesional de la seguridad, ya que permite una evaluación mucho más profunda y completa de la postura de seguridad de una aplicación web al descubrir vulnerabilidades que están ocultas detrás de un muro de inicio de sesión.


