Auteur Sujet: Les tutos de ZeR0 - Ffuf  (Lu 1207 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 3250
  • +191/-5
  • Pentest - Arch - Python - Kali
    • Kali-fr
Les tutos de ZeR0 - Ffuf
« le: 19 juil. 2021 à 15:42:46 »


Bonsoir à tous, et bienvenue sur ce nouveau tuto de ZeR0 !

Aujourd'hui nous allons nous attaquer à un outil plutôt puissant pour faire du fuzzing web, je veux bien entendu parler de FFUF !



I) Vous avez dit FFUF ?

Exactement, Ffuf ! Alors c'est quoi donc exactement Ffuf ? Et bien c'est un fuzzer web qui est d'ailleurs codé en go ! Il va ainsi permettre de découvrir des élements rapidement sur des serveurs webs (des pages cachées par exemple...). L'outil est non seulement très performant, mais aussi open-source ! l'outil peut être trouvé sur la page github suivante : https://github.com/ffuf/ffuf mais ce qui est encore mieux c'est qu'il est déjà présent dans les repos de kali et peut s'installer avec apt comme suit :

apt install ffuf
Cet outil va nous permettre ainsi d'énumérer facilement le contenu de sites web, ce qui est très pratique en CTF par exemple.

Il est également intéréssant de noter que l'outil est officielement sponsorisé par Offensive Security ce qui nous permet d'avoir les nouvelles versions plus rapidement sous Kali qu'ailleurs !

Pour information j'utiliserai la version suivante de Ffuf pour le tuto :




II) Usages basiques

Commençons doucement, regardons un peu les options du programme :




Pour démontrer un exemple d'énumération basique des pages d'un site web, j'ai lancé un petit serveur python de mon côté avec les pages suivantes dedans :



Lançons maintenant ffuf comme suit :

ffuf -w /tmp/minilist.txt -u http://127.0.0.1/FUZZ -e .php
minilist.txt est une liste de mot de passe que j'ai créé à la main pour l'exemple, en voici le contenu :



  • L'option '-w' nous permet de spécifier un fichier contenant les noms de pages à tester (un dictionnaire)
  • L'option '-u' nous permet de spécifier une URL, on remarquera la présence du mot FUZZ dans l'exemple, c'est Ffuf qui s'utilise de cette manière. En effet Ffuf va chercher le mot 'FUZZ' dans l'url spécifiée, et va remplacer le terme par le contenu de notre dictionnaire. Il est bien sur possible de spécifier plusieurs fois le mot 'FUZZ' dans une URL si vous voulez tester plusieurs paramètres en même temps. (Je montrerai un exemple ci-après)
  • L'option '-e' nous permet de spécifier une extension à ajouter à la fin de chaque test, ici par exemple j'ai choisi de rajouter l'extension '.php' car comme vous l'aurez remarqué mon dictionnaire ne contient que des noms de pages sans extensions, or mon serveur ne contient que des pages au format php !

Voici donc le résultat de la commande :



Ffuf a donc reçu deux status 200 en réponse de ses requêtes GET, ce qui traduit la présence probable des deux pages affichées sur le serveur ! Parfait car ces pages sont bien sur notre serveur.

Par curiosité on peut également regardé ce qu'il s'est passé sur notre serveur :



On remarque ainsi que Ffuf a tout d'abord essayé une par une les pages sans extensions, puis une nouvelle fois avec l'extension que nous lui avons demandé.

III) Usages Avancés et Astuces

Nous avons vu précédément un cas très basique d'énumération de pages d'un site en utilisant des simples requêtes GET, mais nous allons maintenant aller un peu plus loin !

A) Le mode récursion

Le mode récursion va permettre à Ffuf d'automatiquement ajouter une couche d'énumération lors de la découverte d'un(e) dossier/page. Par exemple supposons que sur mons erveur j'ai un dossier nommé 'admin' lors de la découverte de celui-ci, Ffuf va lancer un nouveau scan pour tenter d'énumérer le contenu de ce dossier !

Pour l'exemple voici le contenu de mon serveur :



Pour utiliser le mode récursion rien de plus facile :

ffuf -w /tmp/minilist.txt -u http://127.0.0.1/FUZZ -e .php -recursion


On voit bien ici que une fois avoir trouvé le dossier 'admin' Ffuf met en attente le scan de celui-ci, une fois le premier scan finit, il se charge d'énumérer le contenu du dossier trouvé.

Les traces de mon serveur montre bien ce comportement :



Il est à noté qu'il est également possible de donner un paramètre supplémentaire à Ffuf pour lui donner le nombre de couche que l'on souhaite qu'il teste, ce paramètre est 'recursion-depth':

ffuf -w /tmp/minilist.txt -u http://127.0.0.1/FUZZ -e .php -recursion -recursion-depth 1

B) Scanner plusieurs sites à la fois

Supposons maintenant que nous souhaitons scanner plusieurs sites à la fois avec la même wordlist pour les énumérer. Et bien c'est possible avec Ffuf !

Regardons la commande dans un premier temps et je la détaillerai par la suite :

ffuf -w /tmp/minilist.txt:F1,/tmp/sites.txt:F2 -u http://F2/F1
Nous donnons une première wordlist à Ffuf en lui disant que les élements de cette liste devront être testés à l'emplacement ou se situe le terme 'F1', il en va de même pour la liste qui est associée au terme 'F2' sauf que cette liste sera une liste contenant les sites que l'on souhaite scanner. Ainsi en donnant l'URL "://F2/F1" à Ffuf , il va essayer d'énumérer toutes les pages comprises dans la liste F1 , sur tous les sites donnés dans la liste F2.

Un exemple chez moi avec les sites suivants:





Et l'on retrouve bien les traces sur mes deux serveurs :






C) Mode silencieux

Rien de bien difficile ici, mais une simple petite astuce. Si vous souhaitez ne pas voir les différents essais de Ffuf et que vous voulez seulement voir les résultats positifs, il est possible de procéder comme suit :

ffuf -w /tmp/minilist.txt -u http://127.0.0.1/FUZZ -s
L'option '-s' va nous permettre ainsi d'obtenir le résultat souhaité , voici un exemple chez moi :



Et pourtant on remarque que tout est bien testé avec les traces du serveur :




D) Temps d'attente entre deux requêtes

Voilà une option bien pratique me direz vous, en effet il se peu que des fois nous ayons besoin de limiter la vitesse de notre énumération et ce pour diverses raisons.

Pour ce faire il faut utiliser l'option suivante :

-p X
Ou 'X' est le nombre de seconde à attendre entre deux requêtes.

Par exemple si je souhaite attendre 2 secondes entre chaque requêtes pour mon scan je pourrais utiliser la commande suivante :

ffuf -w /tmp/minilist.txt -u http://127.0.0.1/FUZZ -p 2 -t 1
Il est a noter que Ffuf étant une application multithreadée, le temps d'attente fourni englobe l'ensemble des threads. Ainsi si vous utilisez 40 threads, et que vous spécifiez un temps d'attente de 2 secondes, il y aura 40 requetes jouées puis 2 secondes d'attente, puis encore 40 requetes jouées etc...

Dans mon cas avec 1 thread on peut bien vérifier sur les traces du serveur que 2 secondes se sont écoulées entre chaque requêtes :




E) Faire passer le traffic au travers de BURP

Admettons que pour certaines raisons vous souhaitiez faire passer le traffic générer par Ffuf dans BURP, et bien il va suffir dans un premier temps de configurer BURP comme suit, rendez-vous dans un premier temps dans l'onglet Proxy > Options et ajoutez OU modifiez un proxy (dans mon cas je ferai une simple modification) :



Une fois le port et l'interface choisie, rendez-vous dans l'onglet "Request Handling" :



Puis renseignez la cible de votre scan ainsi que le port , dans mon cas ce sera mon serveur local en python :



Une fois configuré il ne reste plus qu'à lancer Ffuf comme suit :

ffuf -w /tmp/minilist.txt -u http://127.0.0.1/FUZZ -x http://127.0.0.1:8080/
L'option -x devra être spécifiée avec vos informations concernant le proxy que vous utilisez.

Une fois la commande lancée on peut observer les requêtes qui passent dans BURP :



Et ainsi on peut choisir de DROP ou de FORWARD les requêtes, par exemple si je laisse passer qu'une seule requête :




IV) Conclusion

Nous voilà à la fin de ce tuto ! Ouf enfin ! Comme nous l'avons vu, Ffuf est un outil extrèmement puissant et nous avons dans ce tutorial que simplement graté la surface des possibilités qu'offre l'outil. Je ne peux que vous conseiller que d'aller lire le code source et de creuser un peu les cas d'utilisation ! Vous pourrez retrouver quelques exemples supplémentaire dans le menu d'aide de Ffuf.

Souvenez vous que faire du fuzzing sur des sites web qui ne vous appartiennent pas ou pour lesquels vous n'avez pas reçu d'autorisation pour lancer votre outil de fuzz, est puni par la loi.

J'espère que ce tuto vous aura donner envie d'aller voir un peu plus en profondeur le fonctionnement et les possibilités de cet outil.

Merci à tous et à bientôt pour un prochain tuto !

ZeR0-@bSoLu


« Modifié: 19 sept. 2021 à 15:50:52 par ZeR0-@bSoLu »
Mess  with the bests.
Die like the rest.

Hors ligne Snk

  • Modérateur
  • Membre Elite
  • *****
  • Messages: 1713
  • +120/-1
  • Multiboot Linux - Kali en Amateur - bash(A)
Re : Les tutos de ZeR0 - Ffuf
« Réponse #1 le: 21 juil. 2021 à 23:47:49 »
Merci a toi pour ce tuto, ceci va donner envie d'approfondir un peu l'utilisation de ffuz...   8) :P
On attend le prochain!!
--------------------------------------------------------
A l'époque c'était système_D (Comme démerdes-toi!)
On ne gagne pas sa Liberté , On choisi de la prendre!
Membre du P.L.F, Bill Gate$ suck'$.
Eux, c'est les pommes, et vous des poires...
--------------------------------------------------------

Hors ligne ZeR0-@bSoLu

  • Administrateur
  • Membre Elite
  • *****
  • Messages: 3250
  • +191/-5
  • Pentest - Arch - Python - Kali
    • Kali-fr
Re : Les tutos de ZeR0 - Ffuf
« Réponse #2 le: 21 juil. 2021 à 23:51:23 »
Merci ^^' :)
Mess  with the bests.
Die like the rest.