Introduction à FFUF

FFUF, acronyme de « Fuzz Faster U Fool » est un outil dévelopé en Go et principalement utilisé pour la découverte de contenu Web, aussi appelé « Fuzzing ». Cet outil teste de très nombreux chemins et noms de fichiers grâce à des dictionnaires, aussi appelés des « Wordlists », et filtre les résultats pour nous permettre de découvrir de nouvelles surfaces d’attaques ou des informations croustillantes.

L’outil a été dévelopé pour être une alternative bien plus rapide que des outils plus datés comme Dirb ou Dirbuster, et fait jeu égal avec des fuzzers récents tels que Gobuster. Certains margoulins s’en servent même pour réaliser des attaques par bruteforce de noms et de mots de passe, voir même pour détecter des vulnérabilités de type injection SQL, XSS, XXE, etc…

La découverte de contenu Web et le fuzzing font partie des premières étapes dans les tests d’intrusion ou le Bug Bounty, ne négligez pas votre technique !

Pour rester à jour sur les dernières versions et avoir des informations complémentaires, consultez le repository GitHub de FFUF.
Comme pour le reste, utilisez cet outil de manière responsable et éthique !


Installation et Configuration

FFUF peut être installé sur Linux, MacOS et Windows (partout où vous pourrez installer Go en fait).

Sur Linux :

git clone https://github.com/ffuf/ffuf ; cd ffuf ; go get ; go build

Les binaires précompilés : https://github.com/ffuf/ffuf/releases/


Syntaxe de Base et Options

Voici la commande de base pour lancer une découverte via FFUF (le mot clé FUZZ est utilisé par l’outil pour savoir où réaliser son fuzzing dans l’URL ciblée) :

ffuf [options] -w <chemin/vers/dictionnaire> -u <https://url_cible>/FUZZ

Les flags clés comprennent :

  • -w : chemin vers le dictionnaire souhaité
  • -u : protocole + URL ciblée + emplacement de découverte indiqué avec le mot clé FUZZ
  • -ic : ignore l’en-tête de certains dictionnaires
  • -mc : n’afficher QUE les réponses HTTP correspondant au code de statut indiqué (200, 204, 301, 302, 307, 401, 403, 405, 500 ou all)
  • -fc : NE PAS afficher les réponses HTTP correspondant au code de statut indiqué (200, 204, 301, 302, 307, 401, 403, 405, 500 ou all)
  • -b : inclure un cookie (de session) spécifique

Les flags avancés comprennent :

  • -o : nom du fichier de sortie
  • -of : format du fichier de sortie (json, ejson, html, md, csv, ecsv ou all)
  • -c : afficher la sortie en couleur
  • -s : mode silencieux
  • -maxtime : durée maximum de fuzzing total
  • -p : délai fixe entre chaque requête en secondes (0.1, 0.5, etc.)
  • -v : sortie verbeuse
  • -t : nombre de threads (40 par défaut)
  • -recursion : active la recursivité
  • -r : suivre les redirections

Exemples Pratiques

Voici quelques exemples d’attaques utilisant FFUF :

  • Découverte de chemins avec le dictionnaire Raft, en couleur :
ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt -ic -c -u https://mywebsite.com/FUZZ 
  • Découverte de fichiers avec le dictionnaire Raft, en ignorant les fichiers avec un seul mot :
ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-large-files.txt -ic -u https://mywebsite.com/uploads/FUZZ -fw 1
  • Découverte de VHosts, en ignorant les réponses de 42 bytes :
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -ic -u https://mywebsite.com/ -H "Host: FUZZ.mywebsite.com" -fs 42
  • Fuzzing du paramètre « name » dans un formulaire POST, filtrant toutes les réponses contenant le mot « error » :
ffuf -w <wordlist> -u https://mywebsite.com/myform -X POST -H "Content-Type: application/json" \
-d '{"name": "FUZZ", "password": "sup3rs3cr3t"}' -fr "error"

Démonstration en vidéo

Pour compléter cet article, n’hésitez pas à consulter la vidéo explicative de Noobosaurus qui offre une démonstration pratique de FFUF.

C’est un excellent complément pour ceux qui souhaitent voir FFUF en action, avec des explications étape par étape sur la mise en place et l’exécution des attaques citées plus haut.