Excluir resultados por longitud de respuesta en modo Fuzz de Gobuster

Beginner
Practicar Ahora

Introducción

Gobuster es una potente herramienta utilizada para la fuerza bruta de directorios y archivos, la fuerza bruta de subdominios DNS y la enumeración de buckets S3. Al realizar operaciones de fuzzing, especialmente contra servidores web, es común encontrar una gran cantidad de resultados "ruidosos". Estos a menudo incluyen respuestas para rutas inexistentes que devuelven un código de estado HTTP consistente (por ejemplo, 404 Not Found) y, de manera crucial, una longitud de cuerpo de respuesta consistente. Esto puede saturar la salida y dificultar la identificación de hallazgos legítimos.

En este laboratorio, aprenderá a aprovechar el flag --exclude-length de Gobuster en modo fuzz. Esta característica le permite especificar una o más longitudes de cuerpo de respuesta para ignorar, filtrando efectivamente estos resultados ruidosos. Al final de este laboratorio, podrá realizar escaneos de fuzzing más específicos y eficientes, centrándose solo en las respuestas relevantes.

Ejecutar un escaneo de fuzzing e identificar un tamaño de respuesta común para solicitudes inválidas

En este paso, realizará un escaneo de fuzzing inicial con Gobuster contra un servidor web local. Esto le ayudará a observar la salida típica, especialmente las longitudes de respuesta para rutas inexistentes, que a menudo representan resultados "ruidosos".

Primero, asegúrese de que el servidor web esté en ejecución. Puede verificar si el proceso está activo:

ps aux | grep "python3 -m http.server 8000" | grep -v grep

Debería ver una salida similar a esta, indicando que el servidor está en ejecución:

labex       1234  0.0  0.0  12345  6789 ?        Sl   HH:MM   0:00 python3 -m http.server 8000 --directory /tmp/web_root

Ahora, ejecute un escaneo de fuzzing con Gobuster utilizando la lista de palabras creada en la configuración. Nos dirigiremos a http://127.0.0.1:8000.

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt

Observe la salida. Notará varias entradas con el mismo código de estado (por ejemplo, 404) y, lo que es más importante, la misma longitud. Esta longitud consistente para solicitudes inválidas es lo que intentaremos excluir. Por ejemplo, nonexistentpath123 y anothernonexistentpath deberían mostrar la misma longitud.

/index.html           (Status: 200) [Size: 19]
/admin                (Status: 404) [Size: 19]
/login                (Status: 404) [Size: 19]
/config               (Status: 404) [Size: 19]
/robots.txt           (Status: 404) [Size: 19]
/nonexistentpath123   (Status: 404) [Size: 19]
/anothernonexistentpath (Status: 404) [Size: 19]

A partir de la salida, identifique el tamaño de respuesta común para los errores 404 (Not Found). En este ejemplo, es 19. Esta es la longitud que utilizaremos para filtrar el ruido en el siguiente paso.

Volver a ejecutar el escaneo utilizando el flag --exclude-length con el tamaño identificado

En este paso, volverá a ejecutar el escaneo de Gobuster, pero esta vez utilizará el flag --exclude-length para filtrar los resultados ruidosos basándose en la longitud de respuesta que identificó en el paso anterior.

Recuerde la longitud de respuesta común para los errores 404 del paso anterior. En nuestro ejemplo, fue 19. Ahora, añada --exclude-length 19 a su comando de Gobuster:

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19

Ejecute el comando y observe la salida.

Observar cómo se filtran los resultados ruidosos

Después de ejecutar el comando en el paso anterior, debería notar inmediatamente una diferencia significativa en la salida. Las entradas que corresponden a la longitud excluida (por ejemplo, respuestas 404 con una longitud de 19) ya no deberían aparecer.

Compare la salida de este escaneo con la salida del Paso 1.

Salida esperada:

/index.html           (Status: 200) [Size: 19]

Solo debería ver la entrada /index.html, ya que es la única que devolvió un estado 200 OK con una longitud de contenido diferente (aunque en esta configuración específica, la página 404 también tiene una longitud de 19, lo cual es una limitación de nuestro servidor simple. En un escenario del mundo real, las páginas 404 a menudo tienen una longitud distinta a las páginas válidas). La conclusión clave es que cualquier respuesta con la longitud especificada ahora está filtrada.

Esto demuestra cuán efectivamente el flag --exclude-length puede reducir el ruido, permitiéndole centrarse en hallazgos potencialmente interesantes.

Refinar la exclusión con una lista de longitudes separadas por comas

A veces, un servidor web puede devolver diferentes longitudes de respuesta para varios tipos de solicitudes de "no encontrado" o "inválido". Gobuster le permite excluir múltiples longitudes proporcionando una lista separada por comas al flag --exclude-length.

Para demostrar esto, imaginemos que nuestro servidor podría devolver páginas 404 con longitudes de 19 y 50. Simularemos esto añadiendo otra ruta "válida" que devuelva una longitud diferente.

Primero, añadamos un nuevo archivo a nuestra raíz web con un tamaño diferente:

echo "This is a test page with a different length." > /tmp/web_root/testpage.html

Ahora, añadamos testpage.html a nuestra lista de palabras (wordlist):

echo "testpage.html" >> /tmp/wordlist.txt

Ejecute el escaneo de nuevo, pero esta vez, supongamos que queremos excluir tanto 19 como 39 (la longitud de testpage.html es 39).

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19,39

Observe la salida. Debería ver que tanto las respuestas 404 originales (longitud 19) como la respuesta testpage.html (longitud 39) están ahora excluidas.

Analizar la salida más limpia en busca de hallazgos interesantes

En este paso final, analizará la salida más limpia producida al usar el flag --exclude-length. El objetivo es comprender cómo este filtrado ayuda a identificar hallazgos verdaderamente interesantes durante una operación de fuzzing.

Después de ejecutar el comando en el paso anterior, la salida debería ser aún más concisa. Si hubiera otras rutas en su lista de palabras que devolvieran un código de estado y una longitud que no estuvieran en su lista de exclusión, ahora destacarían.

Por ejemplo, si tuviera una ruta como /secret_admin_panel que devolviera un 200 OK con una longitud única, sería claramente visible en la salida filtrada, mientras que podría haberse perdido entre cientos de 404 en un escaneo sin filtrar.

En nuestra configuración actual, con 19 y 39 excluidos, y index.html teniendo una longitud de 19, la salida debería estar vacía, ya que todas las entradas están ahora excluidas. Esto demuestra el poder del filtrado preciso.

Esta técnica es invaluable en pruebas de penetración y caza de recompensas por errores (bug bounty hunting) en el mundo real, donde las listas de palabras grandes pueden generar cantidades abrumadoras de datos irrelevantes. Al excluir sistemáticamente las longitudes comunes de "ruido", puede reducir significativamente el esfuerzo manual requerido para revisar los resultados del escaneo y aumentar sus posibilidades de descubrir directorios o archivos ocultos.

Para limpiar el entorno, puede detener el servidor web de Python:

kill $(cat /tmp/web_server_pid)

Esto concluye el laboratorio. Ha aprendido con éxito cómo usar el flag --exclude-length de Gobuster para refinar sus escaneos de fuzzing.

Resumen

En este laboratorio, ha adquirido experiencia práctica en el uso del flag --exclude-length de Gobuster en modo fuzz. Comenzó realizando un escaneo inicial para identificar las longitudes de respuesta comunes para solicitudes inválidas, que a menudo representan ruido. Luego, aprendió a usar el flag --exclude-length con una sola longitud para filtrar estos resultados irrelevantes, lo que condujo a una salida más limpia. Finalmente, exploró cómo refinar aún más la exclusión proporcionando una lista de longitudes separadas por comas, demostrando su flexibilidad para manejar varios tipos de respuestas ruidosas.

Al dominar esta técnica, puede mejorar significativamente la eficiencia y efectividad de sus operaciones de fuzzing de aplicaciones web, permitiéndole centrarse en hallazgos verdaderamente interesantes y acelerar su proceso de descubrimiento de vulnerabilidades.