Omar Salazar .. / Ffuf CheatSheet

Optimiza el uso de Ffuf con esta Cheatsheet: ejemplos prácticos, fuzzing de archivos/directorios enumeración de vhosts y subdominios y otras funciones

Bypass

Guía Completa de Comandos de ffuf: Potencia tu Fuzzing Web

Durante las pruebas basadas en aplicativos web, la enumeración y el fuzzing es una de las técnicas esenciales para descubrir puntos débiles en aplicaciones. Una de las herramientas más potentes y versátiles para realizar este tipo de tareas es ffuf (Fuzz Faster U Fool). Esta guía completa te ayudara a tener una visión más detallada de los comandos de ffuf, acompañados de explicaciones contextuales para que puedas aprovechar al máximo sus capacidades.

¿Qué es ffuf?

ffuf es una herramienta escrita en Go para realizar fuzzing web de manera rápida y flexible. Permite realizar pruebas exhaustivas de enumeración de directorios, archivos, subdominios, vhosts, parámetros HTTP y mucho más. Su capacidad para manejar múltiples wordlists y su rendimiento optimizado lo convierten en una de las herramientas preferidas en el mundo de las pruebas de seguridad.

Tabla de Contenidos

  1. Uso Básico
  2. Wordlists Múltiples
  3. Subdominios y VHosts
  4. Parámetros HTTP
  5. Encabezados (Headers)
  6. Límites de Tasa (Rate Limits)
  7. Filtros (Filters)
  8. Matchers
  9. Opciones de Salida (Output Options)
  10. Proxy
  11. Límites de Tiempo (Time Limits)
  12. Otras Opciones Útiles
  13. Recursos Adicionales

Uso Básico

Fuzz de Archivos/Rutas

El fuzzing de archivos o rutas es una de las funcionalidades más comunes de ffuf. Permite descubrir directorios o archivos ocultos en un servidor web al reemplazar la palabra clave FUZZ con cada entrada de una wordlist.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Fuzz de Extensiones de Archivos

Este comando es útil cuando necesitamos descubrir archivos con diferentes extensiones, como .php, .html, .js, etc.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/indexFUZZ

Descripción:

Nombres de Archivos

Permite realizar fuzzing en nombres de archivos específicos con una extensión determinada, útil para encontrar scripts vulnerables o páginas administrativas.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/blog/FUZZ.php

Descripción:

Usar la Salida de un Comando como Wordlist

Aprovechar la salida de comandos del sistema como una fuente dinámica de entradas para el fuzzing.

Comando:

1
ffuf -c -w <(seq 1 1000) -u https://host.name/api/users/FUZZ

Descripción:

Fuzzing Recursivo

Permite realizar fuzzing de forma recursiva aplicando múltiples niveles de profundidad, descubriendo rutas ocultas en estructuras de directorios complejas.

Comando:

1
ffuf -recursion -recursion-depth 3 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Establecer Cookies

Podemos enviar cookies personalizadas con cada solicitud, lo que puede ser útil para acceder a áreas protegidas o mantener sesiones.

Comando:

1
ffuf -b "NAME1=VALUE1; NAME2=VALUE2" -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Wordlists Múltiples

Modo Clusterbomb

El modo clusterbomb intenta todas las combinaciones posibles de valores desde múltiples wordlists. Es ideal para escenarios donde se necesitas combinar diferentes parámetros, como usuarios y contraseñas.

Probar Diferentes Usuarios y Contraseñas

Este comando es útil para realizar ataques de fuerza bruta en formularios de inicio de sesión, combinando usuarios y contraseñas de dos wordlists diferentes.

Comando:

1
ffuf -w /path/to/users.txt:USER -w /path/to/passwords.txt:PASS -u https://host.name/login?username=USER&password=PASS -mode clusterbomb

Descripción:

Fuzzing de Múltiples Partes de una Solicitud JSON

Permite fuzzear múltiples campos dentro de una estructura JSON, ideal para realizar pruebas en APIs que aceptan datos complejos.

Comando:

1
ffuf -w /path/to/usernames.txt:U -w /path/to/passwords.txt:P -X POST -d '{"username":"U","password":"P"}' -H 'Content-Type: application/json' -u https://host.name/api/login

Descripción:

Fuzzear Directorios y Nombres de Archivos Simultáneamente

Podemos combinar la enumeración de directorios y archivos para descubrir rutas completas y archivos específicos en una estructura de directorios.

Comando:

1
ffuf -w /path/to/dirs.txt:DIR -w /path/to/files.txt:FILE -u https://host.name/DIR/FILE

Descripción:

Modo Pitchfork

El modo pitchfork envía combinaciones sincronizadas de valores de diferentes wordlists, tomando una entrada de cada wordlist en cada iteración.

Probar Combinaciones Sincronizadas de Usuarios y Contraseñas

Comando:

1
ffuf -w /path/to/users.txt:USER -w /path/to/passwords.txt:PASS -u https://host.name/login?username=USER&password=PASS --mode pitchfork

Descripción:


¿Disfrutaste el contenido? ¡Tu apoyo es bienvenido!


Subdominios y VHosts

Subdominios

El fuzzing de subdominios, ffuf también nos ayuda a descubrir subdominios ocultos que podrían estar expuestos y vulnerables.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://FUZZ.host.name/

Descripción:

VHosts

Fuzzear VHosts (Virtual Hosts) nos permite identificar configuraciones de servidores que pueden servir contenido diferente o estar expuestos a diferentes vulnerabilidades.

Comando:

1
ffuf -w /path/to/wordlist.txt -u http://host.name/ -H 'Host: FUZZ.host.name'

Descripción:

Parámetros HTTP

Nombres de Parámetros - GET

Fuzzear nombres de parámetros en solicitudes GET puede revelar parámetros ocultos o sensibles.

Comando:

1
ffuf -w /path/to/wordlist.txt -u http://host.name/index.php?FUZZ=key

Descripción:

Nombres de Parámetros - POST

Similar al fuzzing de parámetros GET, pero en solicitudes POST, donde los parámetros se envían en el cuerpo de la solicitud.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/index.php -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded'

Descripción:

Valores de Parámetros - POST

Fuzzear valores específicos de parámetros puede ayudar a descubrir vulnerabilidades como inyecciones SQL, XSS, entre otras.

Comando:

1
ffuf -w /path/to/ids.txt -u https://host.name/index.php -X POST -d 'id=FUZZ' -H 'Content-Type: application/x-www-form-urlencoded'

Descripción:

Fuzzing de Datos JSON en Solicitudes POST

Permite fuzzear valores dentro de estructuras JSON, ideal para pruebas de APIs que utilizan JSON para la comunicación.

Comando:

1
ffuf -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "FUZZ"}' -w /path/to/wordlist.txt -u http://host.name/api/login

Descripción:

Encabezados (Headers)

Cambiar User-Agent

Podemos establecer un User-Agent personalizado en las solicitudes, útil para simular diferentes navegadores o dispositivos.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"

Descripción:

Establecer el Encabezado Content-Type

Define el tipo de contenido que se está enviando, esencial para solicitudes POST o PUT que envían datos estructurados.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -H "Content-Type: application/json" -X POST

Descripción:

Establecer el Encabezado Authorization

Incluye un token de autorización en las solicitudes, necesario para acceder a recursos protegidos.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -H "Authorization: Bearer mytoken"

Descripción:

Valor de Token Bearer

Fuzzear tokens Bearer para probar la validez y seguridad de los mecanismos de autenticación.

Comando:

1
ffuf -w /path/to/tokens.txt -H "Authorization: Bearer FUZZ" -u https://host.name/api/resource

Descripción:

Valor de un Encabezado Personalizado

Permite fuzzear valores de encabezados HTTP personalizados, útil para descubrir configuraciones específicas del servidor.

Comando:

1
ffuf -w /path/to/wordlist.txt -u http://host.name -H "X-Forwarded-For: FUZZ"

Descripción:

Límites de Tasa (Rate Limits)

Controlar la tasa de solicitudes que enviamos durante el fuzzing, es crucial para evitar ser bloqueado por el servidor objetivo y para manejar eficientemente los recursos.

Limitar la Tasa a 50 Solicitudes por Segundo

Controlar la velocidad de las solicitudes para evitar sobrecargar el servidor o activar mecanismos de bloqueo.

Comando:

1
ffuf -rate 50 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Establecer Número de Hilos

Definir la cantidad de hilos concurrentes para las solicitudes, afectando el rendimiento y la velocidad del fuzzing.

Comando:

1
ffuf -t 5 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Delays (Retrasos)

Introduce retrasos entre las solicitudes para manejar mejor el flujo de tráfico y reducir la carga en el servidor.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -t 2 -p 1

Descripción:

Filtros (Filters)

Los filtros nos permiten excluir respuestas no deseadas basándose en diferentes criterios, optimizando los resultados del fuzzing.

Filtrar Códigos HTTP 301 y 302

Excluye respuestas que redirigen, enfocándose en respuestas finales.

Comando:

1
ffuf -fc 301,302 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Filtrar por Tamaño de Respuesta

Excluye respuestas que no coinciden con un tamaño específico, lo que nos puede ayudar a identificar contenido único.

Comando:

1
ffuf -fs 2003 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Filtrar por Número de Líneas

Excluye respuestas basadas en el número de líneas, útil para filtrar contenido genérico.

Comando:

1
ffuf -fl 5 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Filtrar por Conteo de Palabras

Excluye respuestas que no tengan un número específico de palabras, nos ayuda a identificar respuestas únicas o sensibles.

Comando:

1
ffuf -fw 10 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Calibrar Opciones de Filtrado Automáticamente

Permite a ffuf ajustar automáticamente las opciones de filtrado basándose en las respuestas recibidas, optimizando el proceso de fuzzing.

Comando:

1
ffuf -ac -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Matchers

Los matchers son unas reglas o parámetros que definen cómo ffuf interpreta y filtra las respuestas basándose en diferentes criterios.

Coincidir Código de Estado

Filtra resultados que coincidan con un código de estado HTTP específico, facilitando la identificación de respuestas exitosas.

Comando:

1
ffuf -u https://host.name/FUZZ -w /path/to/wordlist.txt -mc 200

Descripción:

Coincidir Tamaño de Respuesta

Filtra resultados basados en el tamaño exacto de la respuesta, útil para identificar respuestas únicas.

Comando:

1
ffuf -u https://host.name/FUZZ -w /path/to/wordlist.txt -ms 1000

Descripción:

Coincidencia de un Rango de Tamaños de Respuesta

Filtra respuestas dentro de un rango específico de tamaños, ofreciendo mayor flexibilidad.

Comando:

1
ffuf -u https://host.name/FUZZ -w /path/to/wordlist.txt -ms 900-1100

Descripción:

Coincidencia por Conteo de Palabras

Filtra resultados basados en el conteo de palabras en la respuesta, ayudando a identificar contenido relevante.

Comando:

1
ffuf -u https://host.name/FUZZ -w /path/to/wordlist.txt -mw 50

Descripción:

Coincidencia por Número de Líneas de Respuesta

Filtra resultados basados en el número de líneas de la respuesta, útil para identificar respuestas únicas o relevantes.

Comando:

1
ffuf -u https://host.name/FUZZ -w /path/to/wordlist.txt -ml 10

Descripción:

Regex Matching

Permite filtrar respuestas que coincidan con una expresión regular específica, ofreciendonos una forma poderosa para identificar patrones en las respuestas.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -mr "success|welcome"

Descripción:

Opciones de Salida (Output Options)

Guardar y exportar los resultados del fuzzing es esencial para análisis posteriores y documentación.

Guardar Resultados en JSON

Exportar los resultados en formato JSON, facilitando su integración con otras herramientas para su análisis.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -o results.json -of json

Descripción:

Guardar Resultados en CSV

Exportar los resultados en formato CSV, ideal para análisis en hojas de cálculo o bases de datos.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -o results.csv -of csv

Descripción:

Guardar Salida en Todos los Formatos Soportados

Permite guardar los resultados en todos los formatos disponibles simultáneamente, facilitando múltiples tipos de análisis.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -o results -of all

Descripción:


¿Disfrutaste el contenido? ¡Tu apoyo es bienvenido!


Proxy

El uso de proxies es fundamental que nos permite monitorear y manipular el tráfico HTTP durante las pruebas de fuzzing.

Proxy HTTP

Redirige las solicitudes a través de un proxy HTTP, útil para inspeccionar el tráfico con herramientas como Burp Suite, Caido y OWASP ZAP.

Comando:

1
ffuf -x http://127.0.0.1:8080 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Proxy SOCKS

Utilizar un proxy SOCKS para una mayor flexibilidad y compatibilidad con diferentes tipos de tráfico.

Comando:

1
ffuf -x socks5://127.0.0.1:1080 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Proxy de Reproducción (Replay Proxy)

Reproducir las solicitudes a través de un proxy, permitiendo la inspección y modificación de las mismas en tiempo real.

Comando:

1
ffuf -replay-proxy http://127.0.0.1:8080 -w /path/to/wordlist.txt -u https://host.name/FUZZ

Descripción:

Límites de Tiempo (Time Limits)

Controlar el tiempo de ejecución de tus pruebas es esencial para gestionar recursos y evitar bloqueos prolongados.

Establecer un Límite de Tiempo Máximo

Define el tiempo máximo permitido para la ejecución completa del escaneo, evitando que ffuf se ejecute indefinidamente.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -maxtime 60

Descripción:

Límite de Tiempo por Trabajo

Definir un límite de tiempo específico para cada trabajo individual, asegurando que ninguna solicitud individual consuma demasiado tiempo.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -maxtime-job 60

Descripción:

Otras Opciones Útiles

Podemos usar Ffuf en otro tipo de usos que combinan múltiples opciones para maximizar la eficacia de nuestras pruebas de de fuzzing.

Fuzzing con Métodos HTTP Personalizados

Además de los métodos HTTP estándar como GET y POST, ffuf permite utilizar métodos personalizados para interactuar con aplicaciones que dependen de otros métodos HTTP, como PUT, DELETE o PATCH.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/resource/FUZZ -X PUT -d '{"data":"test"}' -H "Content-Type: application/json" -mc 201 -o put_fuzz.json -of json

Descripción:

Uso Práctico

Este comando es útil para probar endpoints que aceptan métodos HTTP menos comunes, como la creación de recursos a través de solicitudes PUT.

Autenticación de Proxy

Al trabajar a través de un proxy que requiere autenticación, es esencial proporcionar las credenciales correctas para que ffuf pueda realizar las solicitudes adecuadamente.

Comando:

1
ffuf -x http://username:[email protected]:8080 -w /path/to/wordlist.txt -u https://host.name/FUZZ -o proxy_auth_fuzz.json -of json

Descripción:

Uso Práctico

Ideal para entornos corporativos donde el tráfico debe pasar a través de proxies autenticados, permitiendo realizar fuzzing sin interrupciones.

Fuzzing Adaptativo con Límites de Tasa Dinámicos

Implementa un fuzzing adaptativo que ajusta dinámicamente los límites de tasa basándose en la respuesta del servidor, evitando sobrecargas y posibles bloqueos.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -rate 100 -rate-step -50 -rate-min 10 -ac -o adaptive_fuzz.json -of json

Descripción:

Uso Práctico

Ideal para entornos donde la estabilidad del servidor es crítica y deseas minimizar la posibilidad de ser bloqueado mientras realizas pruebas intensivas.

Recursión Condicional Basada en Matchers

Realiza fuzzing recursivo únicamente cuando se cumplen ciertas condiciones definidas por los matchers, optimizando el proceso y enfocándose en áreas relevantes.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -recursion -recursion-depth 2 -mc 200,403 -ms 1500 -o conditional_recursion.json -of json

Descripción:

Uso Práctico

Permite enfocarse en rutas que devuelven respuestas exitosas o específicas, evitando profundizar en áreas irrelevantes o protegidas, optimizando así el tiempo y recursos.

Combinación de Hilos y Matchers Específicos

Optimizar el rendimiento de ffuf combinando un número específico de hilos con matchers diseñados para filtrar respuestas relevantes, asegurando una ejecución eficiente y focalizada.

Comando:

1
ffuf -w /path/to/wordlist.txt -u https://host.name/FUZZ -t 50 -mc 200,302 -mr "Dashboard|Admin" -o optimized_fuzz.json -of json

Descripción:

Uso Práctico

Este comando es ideal para entornos donde se necesita una exploración rápida y focalizada, como identificar paneles administrativos o dashboards que responden con códigos de estado específicos.


Tips Adicionales para Maximizar nuestro Uso de ffuf

  1. Personaliza tus Wordlists: Aunque las wordlists predefinidas son útiles, crear wordlists personalizadas basadas en el contexto de la aplicación objetivo puede aumentar significativamente la efectividad del fuzzing.

  2. Combina con Otras Herramientas: Utiliza ffuf en conjunto con herramientas como Burp Suite, Caido OWASP ZAP, o Nmap para obtener una visión más completa de la seguridad de tu aplicación.

  3. Automatiza tus Pruebas: Integra ffuf en tus pipelines de CI/CD para realizar pruebas automáticas durante el desarrollo.

  4. Monitorea el Rendimiento: La herramienta nos permite controlar los parámetros de tasa y hilos según el rendimiento del servidor objetivo y tus recursos locales para optimizar el tiempo de escaneo sin sobrecargar el sistema.

  5. Analiza los Resultados: Utiliza las opciones de salida en formatos como JSON o CSV para analizar los resultados de manera más eficiente y detectar patrones o anomalías rápidamente.

Con estos consejos y la guía completa de comandos, estás listo para llevar tus pruebas de fuzzing al siguiente nivel con ffuf. ¡Feliz fuzzing!


Recursos Adicionales

Para profundizar en el uso de ffuf y explorar otras opciones, te recomiendo consultar los siguientes recursos: