Fuzzing de Parámetros GET en Gobuster

Beginner
Practicar Ahora

Introducción

En la seguridad de aplicaciones web, descubrir parámetros GET ocultos o indocumentados es crucial para identificar posibles vulnerabilidades. Estos parámetros a veces pueden conducir a divulgación de información, inyección SQL u otras fallas de seguridad si la aplicación no los maneja adecuadamente. Gobuster, una popular herramienta de fuerza bruta de directorios y archivos, también ofrece un modo "fuzz" que se puede aprovechar para descubrir parámetros GET.

Este laboratorio lo guiará a través del proceso de uso del modo fuzz de Gobuster para identificar parámetros GET. Aprenderá a construir una URL con la palabra clave FUZZ, a utilizar una lista de palabras con nombres de parámetros comunes, a ejecutar el escaneo y a analizar los resultados para encontrar parámetros interesantes. Al final de este laboratorio, tendrá una comprensión práctica de cómo realizar fuzzing de parámetros GET con Gobuster, una habilidad valiosa para cualquier entusiasta o profesional de la ciberseguridad.

Identificar un Endpoint de URL para Probar

En este paso, identificará un endpoint de URL objetivo que desea probar para detectar parámetros GET ocultos. Para este laboratorio, utilizaremos un servidor web simple que simula una aplicación vulnerable. Iniciaremos un servidor HTTP de Python para servir un archivo HTML básico.

Primero, navegue a su directorio de proyecto:

cd ~/project

A continuación, cree un archivo HTML simple llamado index.html que utilizaremos como nuestro objetivo. Este archivo simulará una página web que podría aceptar parámetros GET.

nano index.html

Agregue el siguiente contenido a index.html:

<!DOCTYPE html>
<html>
  <head>
    <title>Página de Prueba</title>
  </head>
  <body>
    <h1>¡Bienvenido a la Página de Prueba!</h1>
    <p>Esta página es para probar parámetros GET.</p>
  </body>
</html>

Guarde el archivo presionando Ctrl+X, luego Y y Enter.

Ahora, inicie un servidor HTTP simple de Python para servir este archivo. Este servidor se ejecutará en el puerto 8000.

python3 -m http.server 8000 &

El & al final ejecuta el servidor en segundo plano, lo que le permite continuar usando la terminal. Debería ver una salida similar a esta:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

El endpoint de URL objetivo para nuestro fuzzing será http://127.0.0.1:8000/index.html.

Construir una URL con la Palabra Clave FUZZ como Nombre de Parámetro

En este paso, aprenderá a construir la URL que Gobuster utilizará para el fuzzing. El modo fuzz de Gobuster requiere una palabra clave FUZZ en la URL para indicar dónde se deben insertar las entradas de la lista de palabras. Al realizar fuzzing de parámetros GET, la palabra clave FUZZ reemplaza el nombre del parámetro.

El formato básico para una solicitud GET con un parámetro es http://example.com/path?parameter=value. Para realizar fuzzing del nombre del parámetro, reemplazaremos parameter con FUZZ. El valor puede ser cualquier cosa, ya que solo nos interesa descubrir el nombre del parámetro en sí. Una práctica común es usar un valor simple como 1 o test.

Para nuestro laboratorio, la URL objetivo es http://127.0.0.1:8000/index.html. Para realizar fuzzing de nombres de parámetros GET, la URL se construirá de la siguiente manera:

http://127.0.0.1:8000/index.html?FUZZ=test

Aquí:

  • http://127.0.0.1:8000/index.html es nuestra URL base.
  • ? indica el inicio de la cadena de consulta (query string).
  • FUZZ es el marcador de posición donde Gobuster insertará palabras de nuestra lista de palabras.
  • =test es un valor estático para el parámetro. El valor específico no importa para descubrir el nombre del parámetro, pero es necesario para un formato de parámetro válido.

No necesita ejecutar ningún comando en este paso, pero comprender esta construcción de URL es crucial para los siguientes pasos.

Usar una Lista de Palabras de Nombres de Parámetros Comunes

En este paso, preparará una lista de palabras (wordlist) que contiene nombres comunes de parámetros GET. Gobuster iterará a través de esta lista de palabras, reemplazando la palabra clave FUZZ en la URL con cada palabra de la lista.

Si bien Gobuster a menudo viene con listas de palabras predeterminadas, es una buena práctica saber cómo crear o especificar las suyas. Para este laboratorio, crearemos una pequeña lista de palabras personalizada con algunos nombres de parámetros comunes.

Primero, asegúrese de estar en el directorio ~/project:

cd ~/project

Ahora, cree un nuevo archivo llamado params.txt que servirá como nuestra lista de palabras:

nano params.txt

Agregue los siguientes nombres de parámetros comunes a params.txt, cada uno en una nueva línea:

id
name
user
page
search
query
file
data
token

Guarde el archivo presionando Ctrl+X, luego Y y Enter.

Este archivo params.txt será utilizado por Gobuster en el siguiente paso para realizar fuzzing de los parámetros GET.

Ejecutar el Escaneo Fuzz de gobuster

En este paso, ejecutará el escaneo fuzz de Gobuster utilizando la URL construida y la lista de palabras.

El comando para el modo fuzz de Gobuster es gobuster fuzz. Necesitamos especificar la URL con la palabra clave FUZZ usando la opción -u y la lista de palabras usando la opción -w.

Abra su terminal y ejecute el siguiente comando:

gobuster fuzz -u http://127.0.0.1:8000/index.html?FUZZ=test -w ~/project/params.txt

Analicemos el comando:

  • gobuster fuzz: Invoca Gobuster en modo fuzzing.
  • -u http://127.0.0.1:8000/index.html?FUZZ=test: Especifica la URL objetivo con el marcador de posición FUZZ.
  • -w ~/project/params.txt: Especifica la ruta a nuestra lista de palabras que contiene los nombres de los parámetros.

Gobuster enviará ahora solicitudes al servidor web, reemplazando FUZZ con cada palabra de params.txt. Dado que nuestro index.html en realidad no procesa estos parámetros, Gobuster probablemente informará el mismo código de estado y longitud de contenido para todas las solicitudes. Sin embargo, en un escenario del mundo real, un cambio en el código de estado o la longitud del contenido indicaría que un parámetro podría ser reconocido.

La salida mostrará cada intento y el código de estado y la longitud del contenido correspondientes. Se verá similar a esto:

===============================================================
Gobuster vX.X.X
===============================================================
[+] Url: http://127.0.0.1:8000/index.html?FUZZ=test
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /home/labex/project/params.txt
[+] Status codes: 200,204,301,302,307,401,403,405
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
200 (290)    - http://127.0.0.1:8000/index.html?id=test
200 (290)    - http://127.0.0.1:8000/index.html?name=test
200 (290)    - http://127.0.0.1:8000/index.html?user=test
200 (290)    - http://127.0.0.1:8000/index.html?page=test
200 (290)    - http://127.0.0.1:8000/index.html?search=test
200 (290)    - http://127.0.0.1:8000/index.html?query=test
200 (290)    - http://127.0.0.1:8000/index.html?file=test
200 (290)    - http://127.0.0.1:8000/index.html?data=test
200 (290)    - http://127.0.0.1:8000/index.html?token=test
===============================================================

Analizar los Resultados de Cambios en la Longitud de Respuesta o Estado

En este paso, aprenderá a interpretar la salida del escaneo fuzz de Gobuster. La clave para identificar parámetros GET potencialmente válidos o interesantes radica en observar los cambios en la respuesta HTTP.

Cuando Gobuster se ejecuta, muestra el código de estado HTTP y la longitud del contenido (en bytes) para cada solicitud que realiza.

Por ejemplo, la salida del paso anterior mostró:

200 (290)    - http://127.0.0.1:8000/index.html?id=test
200 (290)    - http://127.0.0.1:8000/index.html?name=test
...

Aquí, 200 es el código de estado HTTP (OK), y 290 es la longitud del contenido de la respuesta.

Qué buscar:

  1. Códigos de Estado Diferentes: Si una solicitud con un nombre de parámetro específico devuelve un código de estado HTTP diferente (por ejemplo, 200 para válido, 404 para no encontrado, 500 para error del servidor, 302 para redirección), podría indicar que la aplicación procesó o reaccionó a ese parámetro. Por ejemplo, un 200 OK para un parámetro que normalmente devuelve 404 Not Found podría ser significativo.
  2. Longitudes de Contenido Diferentes: Incluso si el código de estado sigue siendo 200 OK, un cambio en la longitud del contenido puede ser un fuerte indicador. Esto a menudo significa que el cuerpo de la respuesta de la aplicación cambió, quizás al incluir datos específicos relacionados con el parámetro, un mensaje de error o un diseño de página diferente.
  3. Mensajes de Error: A veces, un parámetro puede desencadenar un mensaje de error (por ejemplo, error SQL, error de aplicación) que se refleja en el cuerpo de la respuesta, lo que lleva a una longitud de contenido diferente o incluso a un código de estado 500. Esta es una señal fuerte de una posible vulnerabilidad.

En nuestra configuración de laboratorio actual, dado que index.html es un archivo estático y el servidor Python no procesa los parámetros GET, observará que todas las solicitudes devuelven un código de estado 200 y la misma longitud de contenido (290 bytes). Este es el comportamiento esperado para nuestro caso de prueba simple.

En un escenario del mundo real, si estuviera realizando fuzzing en una aplicación web activa y viera una entrada como:

200 (512)    - http://example.com/search?query=test

mientras que otros parámetros devolvían 200 (290), el parámetro query valdría la pena investigarlo más a fondo debido a la diferente longitud del contenido.

Este paso concluye el laboratorio. Ha aprendido con éxito cómo usar Gobuster para realizar fuzzing de parámetros GET y cómo analizar los resultados.

Para detener el servidor HTTP de Python, puede encontrar su ID de proceso (PID) y matarlo. Primero, liste los procesos de Python en ejecución:

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

Verá una salida similar a:

labex     1234  0.0  0.0  12345  6789 ?        S    HH:MM   0:00 python3 -m http.server 8000

Anote el PID (por ejemplo, 1234 en este ejemplo) y luego mate el proceso:

kill 1234

Reemplace 1234 con el PID real que encontró.

Resumen

En este laboratorio, ha aprendido con éxito a realizar fuzzing de parámetros GET utilizando Gobuster. Comenzó configurando un servidor web local y creando un archivo HTML objetivo. Luego construyó una URL con la palabra clave FUZZ, preparó una lista de palabras personalizada de nombres de parámetros comunes y ejecutó el escaneo fuzz de Gobuster. Finalmente, aprendió a analizar los resultados del escaneo, centrándose en los cambios en los códigos de estado HTTP y las longitudes de contenido, que son indicadores clave de los parámetros reconocidos.

Esta técnica es una parte fundamental del reconocimiento de aplicaciones web y puede ayudar a descubrir funcionalidades ocultas o posibles vulnerabilidades. Al dominar esta habilidad, estará mejor equipado para identificar e investigar las superficies de ataque de las aplicaciones web.