ffuf quand la wordlist est mauvaise
Filtres, récursion et confusion vhost sur les tests web qui font perdre des heures.
Vous avez lancé ffuf avec directory-list-2.3-medium.txt, obtenu quatorze mille réponses 200, et passé l'après-midi sur des fausses pages CDN.
La cheat sheet ffuf documente les flags. Elle ne sait pas que l'appli renvoie du HTTP 200 avec 8 412 octets sur chaque 404 custom.
Filtrer par taille avant le code HTTP
La plupart des tutos s'arrêtent à -fc 404. En prod, les erreurs custom reviennent en 200 ou 302 avec une taille stable.
Baseline :
curl -s -o /dev/null -w "%{http_code} %{size_download}\n" https://target.example/missing-path-xyz
Puis fuzz avec exclusion de taille :
ffuf -u https://target.example/FUZZ -w /usr/share/wordlists/dirb/common.txt \
-fs 8412 -mc 200,301,302 -t 40 -o ffuf-dirs.json
-fs et -fw séparent un run utile d'un JSON que vous n'ouvrirez jamais.
La récursion a un coût
-recursion avec une grosse wordlist derrière un WAF qui rate-limit, c'est le ban avant /admin. Je récurse après un hit intéressant validé à la main, avec une liste réduite :
ffuf -u https://target.example/FUZZ -w small-api-list.txt -recursion -recursion-depth 2 \
-fs 8412 -rate 30
Vhost vs répertoires
Le mode vhost utilise le header Host :
ffuf -u https://10.0.0.5/ -H "Host: FUZZ.target.example" -w vhosts.txt -fs 0
Comparez avec gobuster pour un workflow dir-only plus simple. Je garde les deux ; ffuf gagne quand les réponses sont bizarres.
Extensions et faux positifs
-e .php,.asp,.bak peut exploser sur des serveurs qui renvoient index.html pour tout. Refiltrez. -ac aide parfois, parfois il masque de vrais hits.
Extensions et faux positifs
-e .php,.asp,.bak peut gonfler les hits sur des serveurs qui renvoient index.html pour toute extension inconnue. Refiltrez. -ac (autocalibration) aide parfois, parfois il cache de vrais résultats parce que la requête de calibration était mauvaise.
Vérifiez trois "misses" au hasard à la main avant de faire confiance à la chaîne de filtres.
Sorties exploitables
-o file.json -of json. Renommez par hôte et wordlist. Pour les zones authentifiées, passez le cookie avec -b ou -H "Cookie: ...". Les chemins intéressants sont rarement sur la surface anonyme.
Derrière Cloudflare ou Akamai, baissez -t et acceptez un run plus lent. Le parallélisme agressif finit en ban IP avant que vous atteigniez /api/internal.
Les zones authentifiées concentrent les vrais chemins. Cookie en -b, fuzz sur /api/FUZZ après login. Petites listes tirées du JS ou Swagger battent souvent SecLists medium sur un monolithe legacy.