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 obsoletas de más de 1250 servidores y problemas específicos de versión en más de 270 servidores.
Cuando Nikto envía solicitudes a un servidor de destino, se identifica utilizando una cadena "User-Agent" predeterminada. Esta cadena puede ser fácilmente detectada por firewalls o sistemas de detección de intrusiones, que podrían bloquear el escaneo. Para realizar un escaneo más sigiloso, puede "suplantar" o cambiar el User-Agent para imitar un navegador web común.
En este laboratorio, aprenderá a identificar el User-Agent predeterminado de Nikto y luego a cambiarlo utilizando la opción -useragent para hacer que sus escaneos sean menos conspicuos.
Identificar el User-Agent predeterminado de Nikto a partir de un escaneo de prueba
En este paso, ejecutará un escaneo básico de Nikto contra un servidor web local para ver su cadena User-Agent predeterminada. Se ha iniciado un servidor web simple de Python en segundo plano, que registra todas las solicitudes entrantes en un archivo llamado access.log.
Primero, ejecute un escaneo estándar de Nikto dirigido al servidor local que se ejecuta en el puerto 8000. Abra su terminal y ejecute el siguiente comando:
nikto -h http://localhost:8000
Nikto realizará una serie de pruebas. No nos interesan los resultados del escaneo en sí, sino la entrada de registro que crea.
Después de que el escaneo se complete, vea el contenido del archivo de registro para ver cómo el servidor registró la solicitud de Nikto. Utilice el comando cat:
cat ~/project/access.log
Debería ver entradas de registro que incluyen el User-Agent predeterminado de Nikto. Se verá algo como esto, identificando claramente el escáner.
127.0.0.1 - "GET / HTTP/1.1" Mozilla/5.0 (X11; Linux x86_64) Nikto/2.5.0 (Evasions:None) (Test:Port Check)
127.0.0.1 - "GET /icons/blank.gif HTTP/1.1" Mozilla/5.0 (X11; Linux x86_64) Nikto/2.5.0 (Evasions:None) (Test:Port Check)
... (otras entradas de registro) ...
Observe la parte Nikto/2.5.0 de la cadena. Esta es la firma que queremos ocultar en los siguientes pasos.
Elegir una cadena User-Agent de navegador común para imitar
En este paso, seleccionaremos una cadena User-Agent de un navegador web común. El objetivo es hacer que nuestro tráfico de escaneo parezca provenir de un usuario normal, no de una herramienta automatizada. Esto ayuda a evadir reglas de detección simples que bloquean el tráfico basándose en User-Agents de escáneres conocidos.
Hay muchos recursos en línea para encontrar cadenas User-Agent actuales. Para este laboratorio, utilizaremos un User-Agent típico para el navegador Firefox en una máquina con Windows.
Aquí está la cadena que utilizaremos:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
Este paso es puramente informativo. No necesita ejecutar ningún comando. Simplemente familiarícese con la cadena anterior, ya que la utilizará en los siguientes pasos.
Usar la opción -useragent para establecer la nueva cadena
En este paso, aprenderá cómo construir el comando Nikto para usar el nuevo User-Agent falsificado. Nikto proporciona una opción específica de línea de comandos para este propósito: -useragent.
La sintaxis para esta opción es sencilla. Añade -useragent a su comando, seguido de la nueva cadena que desea utilizar. Dado que las cadenas User-Agent contienen espacios y caracteres especiales, es crucial encerrar toda la cadena entre comillas dobles (").
Así es como construiría el comando para escanear nuestro servidor local con el User-Agent de Firefox que elegimos en el paso anterior:
nikto -h http://localhost:8000 -useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"
En este paso, solo necesita comprender cómo se construye el comando. Lo ejecutará en el siguiente paso.
Ejecutar un escaneo con el User-Agent falsificado
En este paso, ejecutará el escaneo de Nikto utilizando el User-Agent personalizado. Para asegurarnos de que solo vemos los resultados de nuestro nuevo escaneo, es una buena práctica borrar primero el archivo de registro antiguo.
Borre el archivo access.log con el siguiente comando:
> ~/project/access.log
Este comando sobrescribe el archivo, dejándolo vacío. Ahora, ejecute el escaneo de Nikto con la opción -useragent y la cadena de Firefox.
nikto -h http://localhost:8000 -useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"
Nikto ahora ejecutará el mismo escaneo que antes, pero cada solicitud que envíe llevará la cadena User-Agent de Firefox en lugar de la predeterminada de Nikto. Deje que el escaneo se complete.
Verificar el nuevo User-Agent en los registros del servidor o un proxy
En este paso final, verificará que la falsificación del User-Agent fue exitosa. Volveremos a revisar el archivo de registro del servidor para ver qué User-Agent se registró durante el último escaneo.
Utilice el comando cat para mostrar el contenido de access.log:
cat ~/project/access.log
Esta vez, la salida debería verse diferente. En lugar de ver "Nikto" en los registros, verá la cadena User-Agent de Firefox que especificó.
127.0.0.1 - "GET / HTTP/1.1" Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
127.0.0.1 - "GET /icons/blank.gif HTTP/1.1" Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
... (otras entradas de registro) ...
Como puede ver, el registro ahora muestra un User-Agent estándar de Firefox. La palabra "Nikto" ha desaparecido, ocultando con éxito la identidad de nuestro escáner de los registros básicos del servidor.
Resumen
En este laboratorio, ha aprendido una técnica fundamental para hacer que los escaneos de seguridad sean más sigilosos. Ha falsificado con éxito la cadena User-Agent en Nikto para imitar un navegador web normal.
Ha aprendido a:
- Ejecutar un escaneo predeterminado de Nikto para establecer una línea de base.
- Inspeccionar los registros del servidor para identificar el User-Agent predeterminado de Nikto.
- Utilizar la opción de línea de comandos
-useragentpara especificar una cadena personalizada. - Ejecutar un nuevo escaneo con el User-Agent falsificado.
- Verificar el cambio revisando nuevamente los registros del servidor.
Esta habilidad es esencial para los pentesters y profesionales de la seguridad que necesitan realizar evaluaciones de vulnerabilidades sin ser bloqueados o detectados de inmediato por los sistemas de seguridad.


