Cómo encontrar vulnerabilidades día cero con Fuzz Faster U Fool (ffuf). Tutorial detallado de herramienta de fuzzing gratuita

En esta ocasión, los especialistas del curso de Ciberseguridad 360 del Instituto Internacional de Seguridad Cibernética (IICS) nos mostrarán a detalle el uso de Fuzz Faster U Fool (ffuf), una herramienta de fuzzing gratuita y fácil de utilizar, empleando el método de línea de comandos para la configuración en servidores web.

Creada por el usuario de Twitter @joohoi, profesionales de la ciberseguridad en todo el mundo han elogiado a ffuf por sus avanzadas capacidades, versatilidad, y facilidad de uso, por lo que es una de las principales opciones en el fuzzing.

Antes de continuar, como de costumbre le recordamos que este artículo fue elaborado con fines exclusivamente informativos y no representa un llamado a la acción; IICS no es responsable del mal uso que pueda darse a la información aquí contenida.

INSTALACIÓN

Acorde a los expertos del curso de Ciberseguridad 360, ffuf se ejecuta en una terminal de Linux o símbolo del sistema de Windows. Actualizar desde el código fuente no es más difícil que compilar, excepto por la inclusión de “-u”.

go get -u github.com/ffuf/ffuf

Para este ejemplo se utilizó Kali Linux, por lo que encontrará ffuf en los repositorios de apt, lo que le permitirá instalarlo ejecutando un simple comando.

apt install ffuf

Después de instalar este programa, use la opción “-h” para invocar el menú de ayuda.

ffuf –h

OPCIONES DE ENTRADA

Estos son parámetros que nos ayudan a proporcionar los datos necesarios para una búsqueda web de una URL mediante listas de palabras.

Ataque normal

Para un ataque predeterminado, use los parámetros “-u” para la URL objetivo y “-w” para cargar la lista de palabras.

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

Después de ejecutar el comando, deberá centrarse en los resultados.

  • Primero, vale la pena señalar que, de forma predeterminada, funciona en HTTP utilizando el método GET
  • También puede ver el estado del código de respuesta [200, 204, 301, 302, 307, 401, 403, 405}. Puede realizar un seguimiento del progreso del ataque que se está realizando

Uso de varias listas de palabras

Los expertos del curso de Ciberseguridad 360 mencionan que una sola lista de palabras no siempre basta para obtener los resultados deseados. En estos casos, puede aplicar varias listas de palabras al mismo tiempo, una de las funciones más atractivas de ffuf. En este ejemplo, hemos otorgado al programa acceso a dos diccionarios (txt:W1 y txt:W2), que la herramienta ejecutará al mismo tiempo:

ffuf -u https://ignitetechnologies.in/W2/W1/ -w dict.txt:W1 -w dns_dict.txt:W2

Ignorar un comentario en una lista de palabras

Por lo general, la lista de palabras predeterminada tiene algunos comentarios que pueden afectar la precisión de los resultados. En este caso, podemos usar el parámetro “-ic” para eliminar los comentarios. Además, para eliminar cualquier banner en las herramientas utilizadas, utilice el parámetro “-s”:

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

Aquí podemos notar que se muestran algunos comentarios en los resultados si se ejecuta el comando anterior. Después de usar los parámetros “-s” y “-ic”, se eliminarán todos los comentarios y banners.

ffuf -u http://testphp.vulnweb.com/FUZZ/ -w dict.txt -ic –s

Extensiones

También es posible buscar un archivo con una extensión específica en un servidor web usando la opción “—e”. Todo lo que necesita hacer es especificar la extensión y el nombre del archivo junto con el parámetro en el formato de comando apropiado:

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -e .php

Consultas y modos diferentes

Burp Suite es una plataforma profesional para monitorear la seguridad de aplicaciones web. La función “cluster bomb” permite utilizar múltiples cargas útiles, mencionan los expertos del curso de Ciberseguridad 360. Hay un paquete de carga útil separado para cada ubicación determinada; el ataque pasa por cada paquete de carga útil uno por uno, comprobando todas las opciones posibles.

Hay varios parámetros de esta herramienta que facilitan el uso del script. Por ejemplo, el parámetro “-request” permite utilizar la solicitud en un ataque, mientras que “-request-proto” le permite definir el parámetro en sí, y “-mode” ayuda a elegir el modo de ataque.

En primer lugar, se utilizan credenciales aleatorias en la página de URL objetivo y se configura el servidor proxy para capturar la solicitud en modo de intercepción en Burp Suite.

Ahora, en la pestaña Intercepción, debe cambiar las credenciales proporcionadas agregando HFUZZ y WFUZZ. Se añade HFUZZ antes de “uname” y WFUZZ antes de “pass”. Luego, debe copiar y pegar esta consulta en el texto y el nombre de acuerdo con los fines del proyecto. En este caso, se nombró al archivo como brute.txt.

Posteriormente pasaremos al modo de ataque principal, donde el parámetro “-request” contiene un archivo de texto “-request-proto” que lo ayudará a crear un prototipo de http, y “-mode” será responsable del ataque “cluster bomb”. Las listas de palabras en cuestión (users.txt y pass.txt) consisten en inyecciones SQL. Al ingresar el siguiente comando, se lanzará un ataque:

ffuf -request brute.txt -request-proto http -mode clusterbomb -w users.txt:HFUZZ -w pass.txt:WFUZZ -mc 200

Como se puede ver en los resultados del ataque, se ha descubierto con éxito que las inyecciones SQL son efectivas para este propósito específico.

OPCIONES DE MAPEO

Si deseamos que el ffuf muestre solo los datos que son importantes para el fuzzing web, debemos prestar atención a estos parámetros. Por ejemplo, puede ser código HTTP, cadenas, palabras, tamaño y expresiones regulares, mencionan los expertos del curso de Ciberseguridad 360.

Código HTTP

Para comprender esta configuración, debe considerar un ataque simple en el podrá ver qué códigos HTTP aparecen en los resultados.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt

Está claro que se recibieron los códigos 302 HTTP y 200 HTTP.

Si desea ver ataques específicos, como el código HTTP 200, debe usar el parámetro “-mc” junto con un número específico. Para verificar que este parámetro funciona, solo necesita ejecutar el siguiente comando:

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -mc 200

Línea

La herramienta devuelve resultados para líneas específicas en el archivo usando el parámetro “-ml”. Podemos usarlo especificando las cadenas que necesitamos.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -ml 15

Palabras

Del mismo modo, dado que las opciones anteriores corresponden a una función, puede proporcionar un resultado con un número determinado de palabras. Para esto, use el parámetro “-mw” junto con la cantidad de palabras que desea ver en los resultados.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -mw 53

Tamaño

También es posible usar el parámetro “-ms” junto con el tamaño específico que desea ver en los resultados.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -ms 2929

Expresiones regulares

Esta es la última de todas las opciones de mapeo disponibles en ffuf. Se aplicará fuzzing de LFI haciendo coincidir la cadena con el patrón “root:x” subsiguiente para este diccionario.

Se usa una URL que puede proporcionar esta funcionalidad, y con el parámetro “-mr”, se define la cadena correspondiente “root:x”. Así es como se ve una lista especial de palabras.

Usando esta lista de palabras, ingresamos el siguiente comando para agregar el parámetro “-mr” al script de ataque:

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

Recibimos la respuesta http 200 para /etc/passwd para esta lista de palabras.

OPCIONES DE FILTRADO

Las opciones de filtrado son exactamente lo contrario de los parámetros coincidentes. Los expertos del curso de Ciberseguridad 360 recomiendan usar estas opciones para eliminar elementos innecesarios durante el fuzzing web. También se aplica al código HTTP, cadenas, palabras, tamaño y expresiones regulares.

Código HTTP

El parámetro “-fc” requiere un código de estado HTTP específico que el usuario desea eliminar de los resultados.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -fc 302

Línea

Con la ayuda del parámetro “-fl”, es posible eliminar una determinada fila del resultado o filtrarla del ataque.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -fl 26

Tamaño

La opción “-fs” permite filtrar el tamaño especificado descrito por el usuario durante el ataque.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -fs 2929

Palabras

La opción “-fw” permite filtrar el número de palabras de los resultados que el usuario quiere recibir.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -fw 83

Expresiones regulares

La opción “-fr” le permite eliminar una expresión regular específica. En este caso, intentaremos excluir los archivos de registro de los resultados.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -fr "log"

PARÁMETROS GENERALES

A continuación se muestran los parámetros generales de esta herramienta, los cuales están completamente relacionados con el proceso de fuzzing web.

Calibración automática personalizada

La calibración es el proceso de proporcionar a un instrumento de medición la información que necesita para comprender el contexto en el que se utilizará. Al recopilar datos, calibrar su computadora asegura que el proceso funcione con precisión, mencionan los expertos del curso de Ciberseguridad 360.

Podemos ajustar esta función según las necesidades en cada caso usando el parámetro “-acc”, que no se puede usar sin el parámetro “-ac”.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -acc -ac -fl 26 -ac -fs 2929 -ac -fw 54

Color

A veces, la separación por color ayuda a identificar detalles relevantes en los resultados. El parámetro “-c” ayuda a dividir los datos en categorías.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt –c

Tiempo máximo de ejecución de tareas

Si desea aplicar fuzzing por un período de tiempo limitado, puede usar el parámetro “-maxtime”. Debe ingresar un comando para especificar el intervalo de tiempo seleccionado.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -maxtime 5

Tiempo máximo de respuesta

Usando el parámetro “-max time-job”, el usuario puede establecer un límite de tiempo para un trabajo específico. Con este comando, podrá limitar el tiempo que tarda en completar una tarea o consulta.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -maxtime-job 2

Delay

Usando el parámetro “-p”, el usuario agregará un ligero delay para cada solicitud ofrecida por el ataque. Según los expertos del curso de Ciberseguridad 360, con esta característica la consulta se vuelve más eficiente y proporciona resultados más claros.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -p 1

Velocidad de consulta

Podemos seleccionar la velocidad de solicitud que necesita para cada uno de los ataques mediante el parámetro “-rate”. Por ejemplo, podremos crea una solicitud por segundo según el ataque deseado.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -rate 500

Funciones de error

Hay tres parámetros que soportan la función de error. El primer parámetro es “-se”, un “falso error” que dice si la próxima solicitud es genuina o no. El segundo parámetro “-sf” detendrá el ataque cuando más del 95% de las solicitudes se cuenten como un error. El tercer parámetro es “-sa”, una combinación de los parámetros anteriores.

En el ejemplo mostrado a continuación, usaremos el parámetro “-se”:

Ffuf -u http://ignitetechnologies.in/W2/W1/ -w dict.txt:W1 -w dns_dict.txt:W2 –se

Modo detallado

El Modo Detallado es una función utilizada en muchos sistemas operativos que proporciona información adicional sobre lo que hace la computadora y qué controladores y aplicaciones carga cuando se inicializa. En programación, este modo proporciona una salida precisa para fines de depuración, lo que facilita la depuración del programa en sí. Para acceder a este modo, se aplica el parámetro “-v”.

Ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt –v

Hilos de ejecución

El parámetro “-t” se utiliza para acelerar o ralentizar el proceso. De forma predeterminada, está configurado en 40. Si desea acelerar el proceso, debe aumentar su valor.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -t 1000

OPCIONES DE SALIDA

Podremos guardar los resultados de los ataques realizados con el fin de mantener registros, mejorar la legibilidad y encontrar posibles enlaces. Ingrese el parámetro “-o” para guardar la salida, pero debe especificar su formato usando el parámetro “-of”.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -o file.html -of html

Una vez que se completa el ataque, se debe verificar si el archivo con los datos de salida corresponde a este formato o no, mencionan los expertos del curso de Ciberseguridad 360. Como puede ver, el archivo en sí se refiere a HTML.

Datos de salida en formato CSV

De manera similar, podremos crear archivos CSV usando el parámetro “-of”, donde csv son valores separados por comas. Por ejemplo:

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -o file.csv -of csv

Cuando se completa el ataque, debe verificar si el archivo con los datos de salida corresponde a este formato o no. Como puede ver, el archivo en sí pertenece al CSV.

Salida de datos en todos los formatos disponibles

De manera similar, si desea recuperar datos en todos los formatos, use el parámetro “-of all”. Por ejemplo, puede ser json, ejson, html, md, csv, ecsv.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -o output/file -of all

Ahora, una vez que se completa el ataque, debe verificar todos los archivos. Podemos ver que se guardaron en varios formatos.

OPCIONES HTTP

A veces, el proceso de fuzzing requiere detalles como una solicitud HTTP, cookies y un encabezado HTTP, mencionan los expertos del curso de Ciberseguridad 360.

Time-out

Esta función actúa como una fecha límite para que se complete el evento. El parámetro “-timeout” ayuda a activar esta opción.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -timeout 5

Encabezado de host

Si desea realizar fuzzing de subdominios, puede utilizar el parámetro “-H” junto con la lista de palabras del nombre de dominio.

Ffuf -u https://google.com -w dns_dict.txt -mc 200 -H “HOST: FUZZ.google.com”

Recursividad

Según los expertos del curso de Ciberseguridad 360, este es un mecanismo para reutilizar objetos; si un programa requiere que el usuario acceda a una función dentro de otra función, esto se denomina llamada recursiva a la función. Usando el parámetro “-recursion”, el usuario puede implementar esta funcionalidad en sus ataques.

ffuf -u "http://testphp.vulnweb.com/FUZZ/" -dict.txt –recursion

Ataque de cookies

Hay ocasiones en que el fuzzing no es efectivo en un sitio en el que se requiere autenticación. En estos casos, podemos usar el parámetro “-b” para usar cookies de sesión.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -b "PHPSESSID:"7aaaa6d88edcf7cd2ea4e3853ebb8bde""

Proxy de reproducción

Hay límites de velocidad cuando se usa la función Intruso en la versión gratuita de Burp (Community Edition). El ataque se ralentizó mucho, y cada nueva “orden” lo ralentizaba aún más.

En este caso, el usuario utiliza el servidor proxy de Burp Suite para obtener los resultados y evaluarlos. Primero, debe instalar el servidor proxy localhost en el número de puerto 8080.

Ahora usemos “-replay-proxy”, que ayuda a obtener el servidor proxy local del host, instalado en el paso anterior en el número de puerto 8080.

ffuf -u http://192.168.1.12/dvwa/FUZZ/ -w dict.txt -replay-proxy http://127.0.0.1:8080 -v -mc 200

Este ataque mostrará resultados en dos plataformas. La primera plataforma está en la terminal Kali Linux y la segunda está en la pestaña “HTTP history” en Burp Suite. Con la ayuda de varios métodos, podrá comprender mejor el objetivo y analizar los resultados del ataque.

Es común que se compare a ffuf con otras herramientas como dirb o dirbuster. Si bien ffuf se puede usar para el despliegue de ataques de fuerza bruta, su verdadero atractivo radica en la simplicidad.

Para conocer más sobre riesgos de seguridad informática, malware, vulnerabilidades y tecnologías de la información, y más detalles sobre el curso de Ciberseguridad 360, no dude en ingresar al sitio web del Instituto Internacional de Seguridad Cibernética (IICS).