Ffuf Fast Fuzzer

FIKARA BILALFIKARA BILAL
8 min read

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.txt
    
  • Listes 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 -recursion

    • On tente ici de trouver des répertoires comme /admin, /login ou d’autres répertoires

    • l’option -u permet 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 -recursion active 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 -w spé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.

  1. 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.

  1. 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.

  1. 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=1

      Si 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.

  2. 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=FUZZ

      Ici, on injecte chaque mot du wordlist comme une valeur dans le paramètre déja identifié. On pourrait voir par exemple que id=1 donne une page valide (code 200), alors que id=10 donne 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:

  1. 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.com

      Chaque mot du wordlist sera inséré ici avant le domaine. On aura par exemple http://blog.exemple.com ou http://test.exemple.com. Les réponses valides (200 ou 301) indiquent donc des sous-domaines qui existent.

  1. 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 -r

    • l’option -X spéficifie une méthode HTTP différente

    • l’option -r active 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 -mc spé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.
  • ffuf -u http://website.com/FUZZ -w PATH/TO/WORDLIST -fs [INT] -v

    • l’option -fs permet d’exclure les réponses d’une certaine taille.

    • l’option -v permet de fournir plus de détails

  • ffuf -w wordlists/common.txt -u http://website.com/FUZZ -ac

    • l’option -ac active 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

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:

  • Method GET indique la méthode http utilisée pour l’envoi des requêtes

  • URL indique l’URL cible

  • Wordlist le chemin vers le fichier de la liste de mots est indiqué

  • Follow redirects indique 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.

  • Calibration permet de distinguer les réponses valides des faux positifs. Il est à false, donc désactivée.

  • Timeout indique le temps d’exécution de chaque requête après lequel elle sera abandonnée

  • Threads indique le nombre de requêtes pouvant être envoyées simultanément

  • Matcher les 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.

0
Subscribe to my newsletter

Read articles from FIKARA BILAL directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

FIKARA BILAL
FIKARA BILAL

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