Ffuf Fast Fuzzer

As a newcomer to the cybersecurity industry, I'm on an exciting journey of continuous learning and exploration. Join me as I navigate, sharing insights and lessons learned along the way
Fast fuzzer (ffuf) est un outil outil open-source de fuzzing et de force brute, écrit en langage Go, utilisé pour découvrir des ressources web telles que des fichiers, des répertoires, et des sous-domaines. Le fuzzing est une méthode qui consiste à envoyer des données aléatoires, mal formées ou anormales à un système pour tester ses réponses, ce qui pourrait conduire à la découverte de vulnérabilités.
Contrairement à l’attaque par force brute qui vise à effectuer des tentatives de connexion multiples avec des données valides, le fuzzing, lui envoie plutôt des données aléatoires.
Fuzz est installé par défaut sur les machines Kali, donc vous pouvez l’utiliser directement si vous possédez une machine Kali.
La documentation officielle de ffuf se retrouve sur GitHub.
Pour installer ffuf, utilisez la commande suivante:
git clone https://github.com/ffuf/ffuf
cd ffuf
go get
go build
#La commande suivante rend ffuf disponible depuis nimporte quelle répertoire
sudo ln -s ~/go/bin/ffuf /usr/sbin/ffuf
Wordlists
Il existe plusieurs listes de mots assez populaires et souvent utilisées pour le fuzzing:
ffuf.me: trois listes de mots depuis le site de test ffuf.me. Pour les télécharger, exécutez les commandes suivantes:mkdir wordlists cd wordlists wget http://ffuf.me/wordlist/common.txt wget http://ffuf.me/wordlist/parameters.txt wget http://ffuf.me/wordlist/subdomains.txtListes de mots intégrées à Kali Linux: Kali Linux dispose de plusieurs wordlists préinstallées (liste de mots) qui peuvent utilisées pour le fuzzing. Elles se retrouvent dans le répertoire/usr/share/wordlists/.
Sur la photo ci-dessus, on voit plusieurs listes de mots utiles pour le fuzzing ou encore pour d’autres tests.
Seclists: un dépôt contenant des listes de mots disponible sur Github.
Cas d'utilisation
Fuzzing de répertoires
Le fuzzing de répertoires consiste à trouver des dossiers qui ne sont pas directement listés sur le site. On pointe le FUZZ vers le chemin de base.
ffuf -u http://website.com/FUZZ -w PATH/TO/WORDLIST -recursionOn tente ici de trouver des répertoires comme
/admin,/loginou d’autres répertoiresl’option
-upermet de spécifier l’URL à analyser. Cette option est obligatoire. La commande remplacera le terme “FUZZ“ dans l’URL par chaque mot de la liste et envoie une requête HTTP à cette URL.l’option
-recursionactive le fuzzing récursif sur l’URL. C’est-à-dire lorsque qu’il trouve un chemin dans les réponses, il rajoute un nouveau FUZZ à partir de ce chemin là qu’il a trouvé, et ainsi de suite. Cela permet donc d’obtenir des chemins plus profonds.l’option
-wspécifie le chemin du fichier contenant la liste de mots à utiliser pour le fuzzing (option obligatoire)
Fuzzing de fichiers (pages et extensions)
Le fuzzing de fichiers consiste à tester des noms de fichiers ou des extensions sur un chemin. Par exemple, si on sait qu’un site contient un dossier /images, on peut faire le fuzzing de fichiers, pour y chercher des fichiers cachés à l’intérieur.
Fuzzing de pages
ffuf -u http://website.com/images/FUZZ -w PATH/TO/WORDLIST
Dans ce cas, on tente de trouver des fichiers dans le dossier /images. On peut avoir par exemple /images/pic.jpg ou /images/favicon.io etc.
Fuzzing d’extensions
ffuf -u http://website.com/index.FUZZ -w PATH/TO/WEB-EXTENSIONS.TXT
La commande remplace FUZZ par des extensions comme .php, .html etc. Si la liste contient php et html, ffuf testera index.php, index.html, etc.
Il faut par contre veiller à ne pas dupliquer ou omettre le point. C’est-à-dire si la liste contient php (sans un point), l’URL doit être http://website.com/index.FUZZ. Par contre si la liste contient .php (avec le point), l’URL doit être http://website.com/indexFUZZ
ffuf -u http://website.com/FUZZ -w PATH/TO/WORDLIST -e .log,.php,.txt
l’option -e ici, spécifie les extensions de fichiers à ajouter aux mots de la liste. Si par exemple le FUZZ est le mot admin, ffuf tentera d’accéder à http://website.com/admin.log , à http://website.com/admin.php et à http://website.com/admin.txt.
Fuzzing de paramètres GET
Le fuzzing de paramètres est utilisé pour découvrir des paramètres d’URL et tester différentes valeurs. Il consiste à placer le FUZZ à la place du nom ou de la valeur d’un paramètre dans la requête.
Fuzzing du nom de paramètre (si on cherche quel paramètre existe)
ffuf -w PATH/TO/WORDLIST -u http://exemple.com/page.php?FUZZ=1Si la liste de mots contient par exemple id, admin, test, etc., ffuf testera
page.php?id=1,page.php?admin=1,page.php?test=1. À travers les réponses (200, 404, redirection), les paramètres valides seront détectés.
Fuzzing de la valeur de paramètre (si le nom du paramère est connu)
ffuf -w PATH/TO/WORDLIST -u http://exemple.com/page.php?id=FUZZIci, on injecte chaque mot du wordlist comme une valeur dans le paramètre déja identifié. On pourrait voir par exemple que
id=1donne une page valide (code 200), alors queid=10donne une page invalide (code 404).
Fuzzing de sous-domaines
Pour la recherche de sous-domaines inconnus qui pointent vers un serveur, on peut aussi utiliser le fuzz. Deux méthodes existent ici:
Méthode directe
On utilise cette méthode lorsque la résolution DNS est configurée pour n’importe quel sous-domaine.
ffuf -w PATH/TO/WORDLIST -u http://FUZZ.exemple.comChaque mot du wordlist sera inséré ici avant le domaine. On aura par exemple
http://blog.exemple.comouhttp://test.exemple.com. Les réponses valides (200 ou 301) indiquent donc des sous-domaines qui existent.
Méthode vhost discovery via l’entête Host (Découverte d’hôtes virtuels)
Dans le cas où on ne peut pas résoudre les sous-domaines dynamiquement, on peut cibler directement l’adresse IP du serveur, en définissant l’entête HTTP Host.
ffuf -w PATH/TO/WORDLIST/SUBDOMAINS -u http://IP_CIBLE/ -H "Host: FUZZ.exemple.com"
La requête est envoyée ici à l’adresse IP défini qui est celle du serveur. Mais on fait croire au serveur que le nom d’hôte demandé est FUZZ.exemple.com. Si le wordlist contient par exemple blog, la requête aura l’entête Host: blog.exemple.com. Avec les codes de réponses obtenus, on a les hôtes virtuels du serveur ou les sous-domaines valides.
Un hôte virtuel est une technique utilisée par un serveur web pour héberger plusieurs sites web sur une seule adresse IP. Par exemple, un même serveur peut répondre à www.exemple.com, blog.exemple.com ou admin.exemple.com. On utilise donc cette méthode pour découvrir ces sous-domaines là, qui sont bien configurés sur un serveur mais non publiés publiquement (elles ne sont pas spécifiées dans l’entrée DNS par exemple)
Injection SQL
Le fuzzing pour l’injection SQL consiste à injecter des payloads SQL dans un paramètre vulnérable. Il est utilisé dans des cas où on fait face à des formulaires, ou des zones d’entrée de données, et on veut interagir avec une base de données. Ici, la wordlist contient des payloads SQL.
ffuf -u "http://exemple.com/login.php" -d 'username=FUZZ&password=test' -w list.md -mc 302 -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
Cette commande teste chaque injection SQL dans la zone username. Ici, on a filtré avec -mc 302 pour afficher uniquement le code HTTP indiquant une redirection.
Voici un exemple de sortie da la commande ffuf pour de l’injection SQL.

Il existe plusieurs listes de payloads d’injection SQL disponibles en ligne. Voici un exemple ici.
Autres paramètres
ffuf -u http://website.com/FUZZ -w PATH/TO/WORDLIST -X POST -rl’option
-Xspéficifie une méthode HTTP différentel’option
-ractive la redirection des requêtes. Elle est utile si la cible renvoie des 301/302. Pour la désactiver, il suffit de ne pas l’inclure dans la commande.
ffuf -u http://website.com/FUZZ -w PATH/TO/WORDLIST -mc 200-205,400- l’option
-mcspécifie les codes de statuts à matcher lors de l’analyse. Dans ce cas, on spécifie la plage de codes 200 à 205 et le code 400. On aura donc juste ces codes là dans le résultat. Cela permet d’exclure les codes de statut dont on n’aurait pas besoin dans le résultat.
- l’option
ffuf -u http://website.com/FUZZ -w PATH/TO/WORDLIST -fs [INT] -vl’option
-fspermet d’exclure les réponses d’une certaine taille.l’option
-vpermet de fournir plus de détails
ffuf -w wordlists/common.txt -u http://website.com/FUZZ -ac- l’option
-acactive l’autoconfiguration et permet à ffuf de déterminer automatiquement les codes de statut qui doivent être pris en compte. Cela évite donc de spécifier manuellement chaque code et rend la commande plus simple
- l’option
Interprétation des résultats
Chaque requête envoyée retournera donc un statut http de la réponse. En fonction de ce que l’on cherche à découvrir, chaque statut peut avoir une interprétation différente. Si par exemple on veut accéder à une page qui n’existe pas, mais on obtient un statut 200, cela indique une faille ou une mauvaise configuration.

Avec cette requête, on obtient un statut 200 qui indique donc que le chemin http://ffuf.me/cd/basic/class existe sur le serveur. Le fichier development.log existe aussi sur ce même serveur.
L’entête résume les paramètres et les options dans la commande:
MethodGET indique la méthode http utilisée pour l’envoi des requêtesURLindique l’URL cibleWordlistle chemin vers le fichier de la liste de mots est indiquéFollow redirectsindique si la commande ffuf suivra ou pas une redirection http si une réponse renvoie par exemple un statut de code 301 ou 302. Dans ce cas, elle est à “false“, ce qui signifie que ffuf ne tentera pas de suivre l'URL redirigée.Calibrationpermet de distinguer les réponses valides des faux positifs. Il est à false, donc désactivée.Timeoutindique le temps d’exécution de chaque requête après lequel elle sera abandonnéeThreadsindique le nombre de requêtes pouvant être envoyées simultanémentMatcherles réponses http dpnt le code de statut est dans la plage seront celle qui seront affichées dans les résultats.
Il est toutefois possible de modifier ces paramètres avec les différentes options de ffuf.

Sur l’image ci-dessus, on obtient d’abord un statut 301 pour le chemin http://ffuf.me/cd/recursion/admin/FUZZ indiquant une redirection vers une autre URL. La commande ajoute après une deuxième tentaive pour l’URL http://ffuf.me/cd/recursion/admin/users/FUZZ après un autre statut 301. Le statut 200 obtenu après indique que le chemin testé est valide et que le serveur renvoie une réponse 200 avec un FUZZ = 96. Cela indique qu’un répertoire est disponible à l’URL http://ffuf.me/cd/recursion/admin/users/96
Voici en quelques lignes l’outil ffuf expliqué.
À noter, qu’il est important de rappeler que l'utilisation de ces outils doit toujours se faire dans un cadre légal.



