ffuf Guía de Uso para Fuzzing Web con ejemplos
ffuf Guía de Uso para Fuzzing Web con ejemplos

FFUF: Una Guía Completa de Uso para Fuzzing Web

En este artículo, vamos a aprender cómo podemos utilizar ffuf, que significa “Fuzz Faster U Fool“, que es una interesante herramienta de fuzzing web de código abierto. Desde su lanzamiento, mucha gente ha gravitado hacia ffuf, particularmente en el escenario de las recompensas por errores (bug bounty). Así que, vamos a sumergirnos en este proceso de aprendizaje.

Qué es ffuf

FFUF es un rápido fuzzer web escrito en Go. Es un método profesional de línea de comandos para el fuzzing web en un servidor web y el crédito va para el autor (@joohoi).

Pero, ¿qué es fuzzing, fuzzer, o fuzz?

El fuzzing es una técnica de prueba de software que consiste en proporcionar datos no válidos, inesperados o aleatorios como entradas a un programa informático. A continuación, se controla el programa para detectar excepciones, como bloqueos o fallos en las aserciones de código incorporadas, o para encontrar posibles fugas de memoria.

Uso

El fuzzing se utiliza habitualmente para comprobar si hay fallos de seguridad en el software, especialmente en aquellos que procesan datos no fiables, como formatos de archivo, protocolos de red y lenguajes de programación.

Instalación de ffuf

Este programa de línea de comandos se ejecuta en el Terminal de Linux o en el Símbolo del sistema de Windows. La actualización desde el código fuente no es más difícil que la compilación desde el código fuente, con la excepción de la inclusión de la flag -u. (funciona tanto para la instalación como para la actualización)

go get -u github.com/ffuf/ffuf

Debido a que estamos usando Parrot OS, encontraremos ffuf en los repositorios de apt, permitiéndonos instalar ejecutando el simple comando.

apt install ffuf
Instalar ffuf en Linux
Instalar ffuf en Linux

También puedes descargar un binario precompilado de la página de lanzamientos, descomprímelo y ejecútalo.

Después de instalar esta herramienta, para obtener sus parámetros y opciones de trabajo todo lo que necesitamos es utilizar el parámetro -h para la opción de ayuda.

ffuf -h
Comando de ayuda para ffuf
Comando de ayuda para ffuf

Tener un buen conjunto de diccionarios es importante para todo el personal de seguridad, y hay una colección llamada SecLists que tiene casi lo que necesitas. Está disponible en GitHub, pero también podemos instalarlo localmente en nuestra máquina.

sudo apt install seclists
Lista de palabras con SecLists
Lista de palabras con SecLists
Dark Mode

SecLists (este enlace se abre en una nueva ventana) por danielmiessler (este enlace se abre en una nueva ventana)

SecLists is the security tester’s companion. It’s a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, URLs, sensitive data patterns, fuzzing payloads, web shells, and many more.

Opciones de entrada

Son parámetros que nos ayudan a proporcionar los datos necesarios para el fuzzing web sobre una URL con la ayuda de una lista de palabras.

Ataque simple

Para el ataque por defecto, necesitamos utilizar los parámetros -u para la URL de destino y -w para cargar una lista de palabras como se muestra en la imagen.

ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt

Después de ejecutar el comando, vamos a centrarnos en los resultados.

  • En primer lugar, observamos que se ejecuta por defecto el método HTTP GET.
  • Lo siguiente es el estado del código de respuesta , todo lo que necesitamos es especificar el archivo de extensión junto con el parámetro [-e]. Para obtener estos resultados sólo tenemos que seguir el comando.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -e .php
    Fuzzing con extensión de archivo
    Fuzzing con extensión de archivo

    Opciones de coincidencia

    Si queremos que ffuf muestre sólo aquellos datos que son importantes en nuestro fuzzing web. Entonces nos ayudará a mostrar sólo los datos coincidentes según el parámetro. Ejemplo: Código HTTP, Líneas, Palabras, Tamaño y Expresiones Regulares.

    Coincidir con Código HTTP

    Para entender este parámetro tenemos que considerar un ataque sencillo en el que podemos ver qué códigos HTTP aparecen en nuestros resultados.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt

    Podemos ver claramente que muestra algún código HTTP 302 junto con el código HTTP 200.

    Si sólo necesitamos resultados exitosos como el código HTTP 200, sólo tenemos que usar el parámetro -mc junto con nuestro código HTTP específico. Para utilizar este parámetro sólo tienes que seguir el comando.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -mc 200
    Fuzzing con código HTTP específico
    Fuzzing con código HTTP específico

    Coincidir líneas

    Al igual que el código de coincidencia que discutimos anteriormente, podemos utilizar el parámetro -ml para obtener el resultado para una línea específica en un archivo.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -ml 8
    Coincidir líneas con ffuf
    Coincidir líneas con ffuf

    Coincidir palabras

    Al igual que la función de coincidencia de las funcionalidades anteriores, el programa puede proporcionarnos un resultado con un recuento de palabras específico. Para obtener este resultado necesitamos utilizar el parámetro -mw junto con el recuento de palabras específico que queremos.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -mw 5
    https://i.imgur.com/svAxRAL.png
    Coincidir palabras con ffuf

    Coincidir con tamaño

    De manera similar, el programa puede proporcionarnos un resultado con el tamaño del archivo. Podemos utilizar el parámetro [-ms] junto con el recuento de tamaño específico que queremos obtener.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -ms 2929
    Coincidir tamaño de archivo con ffuf
    Coincidir tamaño de archivo con ffuf

    Coincidir expresiones regulares

    Es la última de todas las funciones de coincidencia disponibles en esta herramienta. Vamos a buscar LFI comparando la cadena/string con el patrón seguido “root:x” para el diccionario dado.

    Estamos usando una URL que puede lograr esta funcionalidad y usando el parámetro -mr definimos la cadena coincidente “root:x”.

    Esta es nuestra lista especial de palabras.

    cat diccionario.txt
    /etc/passwd
    /etc/shadow
    /etc/aliases
    /etc/anacrontab
    /etc/apache2/apache2.conf
    /etc/at.allow
    /etc/at.deny
    /etc/bashrc
    /etc/bootptab
    /etc/chrootUsers
    /etc/chttp.conf
    /etc/cron.allow
    /etc/cron.deny
    /etc/crontab

    Utilizando esta lista de palabras, ejecuta el siguiente comando para utilizar el parámetro -mr en un escenario de ataque.

    ffuf -u http://testphp.vulnweb.com/showimage.php?file=FUZZ -w diccionario.txt -mr "root:x"

    Luego de esperar un poco, obtendremos un HTTP 200 para /etc/passwd de la lista de palabras dada.

    Coincidir expresión regular en ffuf
    Coincidir expresión regular en ffuf

    Opciones de filtro

    Las opciones de Filtro son absolutamente opuestas a las opciones de Coincidencia. Podemos utilizar estas opciones para eliminar lo no deseado de nuestro fuzzing web. Ejemplo: Código HTTP, Líneas, Palabras, Tamaño, Expresiones Regulares.

    Filtro de código HTTP

    El parámetro -fc necesita el código de estado HTTP específico que queremos eliminar del resultado.

    ffuf -u http://testphp.vulnweb.com/dvwa/FUZZ -w diccionario.txt -fc 302
    Filtro de código HTTP en ffuf
    Filtro de código HTTP en ffuf

    Filtrar Líneas

    El parámetro -fl tiene la capacidad de eliminar una longitud específica de nuestro resultado para filtrar nuestro ataque.

    ffuf -u http://testphp.vulnweb.com/dvwa/FUZZ -w diccionario.txt -fl 26
    Filtro de líneas en ffuf
    Filtro de líneas en ffuf

    Filtrar tamaño

    El parámetro -fs tiene la capacidad de filtrar el tamaño especificado por nosotros durante el comando del ataque.

    ffuf -u http://testphp.vulnweb.com/dvwa/FUZZ -w diccionario.txt -fs 2929
    Filtro por tamaño de archivo en ffuf
    Filtro por tamaño de archivo en ffuf

    Filtrar palabras

    El parámetro -fw tiene la capacidad de filtrar el recuento de palabras de los resultados que queremos eliminar.

    ffuf -u http://testphp.vulnweb.com/dvwa/FUZZ -w diccionario.txt -fw 83
    Filtro de palabras en ffuf
    Filtro de palabras en ffuf

    Filtrar Expresión Regular

    El parámetro -fr podemos eliminar una expresión regular específica, aquí tratamos de excluir el archivo log del resultado de salida.

    ffuf -u http://testphp.vulnweb.com/dvwa/FUZZ -w diccionario.txt -fr "log"
    Filtro de expresión regular en ffuf
    Filtro de expresión regular en ffuf

    Opciones generales

    Estos son los parámetros generales de esta herramienta, que giran en torno a su funcionamiento general en el fuzzing web.

    Calibración automática personalizada

    Sabemos que el poder de un ordenador o máquina para calibrarse automáticamente se conoce como autocalibración. La calibración es el proceso de proporcionar a un instrumento de medida la información que necesita para entender el contexto en el que se va a utilizar. Al recopilar datos, la calibración de un ordenador garantiza su precisión.

    Podemos personalizar esta función según nuestra necesidad con la ayuda del parámetro -acc. El cual no puede ser utilizado sin el parámetro -ac para su personalización.

    ffuf -u http://testphp.vulnweb.com/FUZZ -w diccionario.txt -acc -ac -fl 26 -ac -fs 2929 -ac -fw 54
    Calibración personalizada de ffuf
    Calibración personalizada de ffuf

    El color

    A veces la separación del color crea una atención extra a todos los detalles que se obtienen en los resultados. Este parámetro -c ayuda a crear la separación de colores.

    ffuf -u http://testphp.vulnweb.com/FUZZ -w diccionario.txt -c
    Personalizar color en ffuf
    Personalizar color en ffuf

    Tiempo máximo para la tarea

    Si deseas realizar un fuzz durante un tiempo limitado, puedes elegir el parámetro [-maxtime]. Ejecuta el comando para proporcionar un tramo de tiempo.

    ffuf -u http://testphp.vulnweb.com/FUZZ -w diccionario.txt -maxtime 5
    Configurar tiempo máximo de tarea en ffuf
    Configurar tiempo máximo de tarea en ffuf

    Tiempo máximo para el trabajo

    Con la ayuda del parámetro -maxtime-job, podemos poner un límite de tiempo para un trabajo en particular. Al utilizar este comando, estamos tratando de limitar el tiempo por trabajo de la ejecución de la solicitud.

    ffuf -u http://testphp.vulnweb.com/FUZZ -w diccionario.txt -maxtime-job 2
    Tiempo máximo de trabajo en ffuf
    Tiempo máximo de trabajo en ffuf

    Retraso

    Si creamos un retraso particular en cada petición ofrecida por el ataque, éste tiene una oportunidad de obtener mejores resultados. El parámetro -p nos ayuda a conseguir el retraso en esas peticiones.

    ffuf -u http://testphp.vulnweb.com/FUZZ -w diccionario.txt -p 1
    Retraso en ffuf
    Retraso en ffuf

    Tasa de solicitud

    Podemos crear una tasa de solicitud independiente para cada uno de nuestros ataques con la ayuda del parámetro -rate. A través de este parámetro, creamos nuestra solicitud por segundo según nuestro ataque deseado.

    ffuf -u http://testphp.vulnweb.com/FUZZ -w diccionario.txt -rate 200
    Tasa de solicitud en ffuf
    Tasa de solicitud en ffuf

    Funciones de error

    Hay tres parámetros que soportan la función Error. El primer parámetro es -se, que es un spurious error. Indica si la siguiente petición es genuina o no. El segundo parámetro es -sf, detendrá nuestro ataque cuando más del 95% de las peticiones se produzcan como error. El tercer y último parámetro es -sa, que es una combinación de ambos parámetros de error.

    En nuestro escenario, estamos usando el parámetro -se donde se detendrá nuestro ataque cuando nuestra solicitud no sea real.

    ffuf -u http://testphp.vulnweb.com/FUZZ -w diccionario1.txt:W1 -w diccionario2.txt:W2 -se
    Funciones de error en ffuf

    Modo detallado

    Como todos sabemos, el modo verbose/detallado es una característica utilizada en muchos sistemas operativos de ordenadores y lenguajes de programación que proporciona información extra sobre lo que el ordenador está haciendo y qué controladores y aplicaciones está cargando en la inicialización. En programación, produce una salida precisa para propósitos de depuración. Existe un parámetro llamado -v para ffuf.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -v
    Modo verbose en ffuf
    Modo verbose en ffuf

    Hilos

    El parámetro -t se utiliza para acelerar o ralentizar un proceso. Por defecto, está establecido en 40. Si queremos acelerar el proceso, debemos aumentar su número, y viceversa para ralentizarlo.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -t 1000
    Configurar hilos en ffuf
    Configurar hilos en ffuf

    Opciones de salida

    Guardamos el rendimiento de nuestros ataques con el fin de mantener un registro, mejorar la legibilidad y las posibles referencias. Usamos el parámetro -o para guardar nuestra salida, pero necesitamos (conjuntamente) especificar su formato con el parámetro -of.

    Formato de salida en HTML

    Usamos el parámetro -of y este define un formato HTML. Usando el siguiente comando, podemos crear nuestro informe en .html.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -o file.html -of html
    Guardar salida en formato HTML
    Guardar salida en formato HTML

    Ahora, después de la finalización de este ataque, tenemos que comprobar nuestro archivo de salida está a la altura o no. Como podemos ver, nuestro archivo se crea con éxito.

    Formato de salida .HTML
    Formato de salida .HTML

    Formato de salida en CSV

    Del mismo modo, sólo tenemos utilizar el formato csv junto con el parámetro -of. Donde los valores separados por comas, son almacenados en un formato tabular.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -o file.csv -of csv
    Guardar salida en formato .CSV
    Guardar salida en formato CSV

    Ahora, después de la finalización de este ataque, tenemos que comprobar nuestro archivo de salida está a la altura o no. Como podemos ver, nuestro archivo se crea con éxito.

    Formato de salida .CSV
    Formato de salida .CSV

    Todos los formatos de salida

    Del mismo modo, si queremos todos los formatos de salida a la vez sólo hay que utilizar el parámetro -of all. Como json, ejson, html, md, csv, ecsv. Ejecuta este comando para generar todos los informes a la vez.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -o output/file -of all

    Ahora, después de la finalización de este ataque, podemos comprobar nuevamente la salida:

    Exportar en todos los formato de salida
    Exportar en todos los formato de salida

    Opciones HTTP

    Los resultados se mueven alrededor de las opciones HTTP. A veces se requieren ciertos detalles para ejecutar el fuzzing web como la solicitud HTTP, Cookie, encabezado HTTP, etc.

    Tiempo de espera

    El tiempo de espera actúa como un tiempo límite para el evento de ejecución. El parámetro -timeout ayuda a establecer esta característica con facilidad.

    ffuf -u http://testphp.vulnweb.com/FUZZ/ -w diccionario.txt -timeout 2
    Configurar tiempo de espera en ffuf
    Configurar tiempo de espera en ffuf

    Encabezado de host

    Si queremos realizar el fuzzing en un subdominio, podemos utilizar el parámetro -H junto con una lista de palabras del nombre de dominio como se indica a continuación en el comando.

    ffuf -u https://google.com -w diccionario.txt -mc 200 -H "HOST: FUZZ.google.com"
    Encabezado de host en ffuf
    Encabezado de host en ffuf

    Recursión

    La recursión es el mecanismo de repetir objetos de forma autosimilar, como todos sabemos. Si un programa requiere que se acceda a una función dentro de otra función, esto se conoce como una llamada recursiva de la función. Usando el parámetro -recursion, podemos lograr esta funcionalidad en nuestros ataques.

    ffuf -u "http://testphp.vulnweb.com/FUZZ/" -w diccionario.txt -recursion
    Recursión en ffuf
    Recursión en ffuf

    A veces el fuzzing web no muestra el resultado en el sitio autenticado sin autenticación. Hay un parámetro -b a través del cual podemos lograr el objetivo proporcionando una cookie de sesión.

    ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w diccionario.txt -b "PHPSESSID:"7aaaa6d88edcf7cd2ea4e3853ebb8bde""
    Ataque de cookie con ffuf
    Ataque de cookie con ffuf

    Conclusión

    FFUF es a menudo comparado con herramientas como dirb o dirbuster, lo cual, aunque es preciso hasta cierto punto, no es una analogía razonable. Aunque FFUF puede ser usado para forzar archivos, su verdadera fuerza radica en su simplicidad, y una mejor herramienta comparativa para FFUF sería algo como Burp Suite Intruder o Turbo Intruder.

    Este artículo está inspirado en la publicación original de Shubham Sharma, un apasionado de la investigación en ciberseguridad. Contacta con él en LinkedIn y Twitter.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda
Más artículos
La mejor forma de crear contraseña segura
Esta es la mejor forma de crear una contraseña segura