---
title: ffuf
description: "Fuzzer URLs, sous-domaines, paramètres et vhosts à grande vitesse avec ffuf."
category: web
kind: tool
tags: [fuzzing, content-discovery, wordlists, vhost]
level: basic
updated: 2026-11-10
order: 1
aliases: ["fuzz faster", "directory brute force"]
---

## Découverte de contenu

```bash
# Répertoires et fichiers
ffuf -u https://target.test/FUZZ -w /wordlists/dirb/common.txt -mc 200,204,301,302,307,401,403

# Filtrer par taille de réponse (élimine les pages par défaut)
ffuf -u https://target.test/FUZZ -w raft-medium-directories.txt -fs 4242

# Extensions multiples
ffuf -u https://target.test/FUZZ -w common.txt -e .php,.bak,.old,.txt,.zip

# Récursion sur les répertoires trouvés
ffuf -u https://target.test/FUZZ -w common.txt -recursion -recursion-depth 2 -fc 404
```

| Option | Effet |
| --- | --- |
| `-mc` | Codes à garder (`all` pour tout) |
| `-fc` | Codes à exclure |
| `-fs` | Taille de réponse à exclure |
| `-fw` / `-fl` | Nombre de mots / lignes à exclure |
| `-mr` / `-fr` | Regex à garder / exclure |
| `-ac` | Auto-calibration des filtres |
| `-rate` | Requêtes par seconde |
| `-p` | Pause entre requêtes (ex. `0.1`) |

## Sous-domaines et vhosts

```bash
# Virtual hosts : le domaine reste constant, le Host change
ffuf -u https://target.test -H "Host: FUZZ.target.test" \
  -w subdomains.txt -fs 0 -mc all

# Sous-domaines DNS (si résolution sauvage)
ffuf -u https://FUZZ.target.test -w subdomains.txt -mc 200 -fs 1234

# Filtrer la réponse par défaut du vhost
curl -s -H "Host: random.target.test" https://target.test | wc -c
```

## Paramètres et valeurs

```bash
# Découvrir des paramètres GET
ffuf -u "https://target.test/api?FUZZ=test" -w params.txt -fs 120

# Fuzzer une valeur (IDOR, injection, enum)
ffuf -u "https://target.test/api/user?id=FUZZ" -w ids.txt -mr "admin|root" -mc all

# POST JSON
ffuf -u https://target.test/api/login -X POST \
  -H "Content-Type: application/json" \
  -d '{"username":"FUZZ","password":"test"}' \
  -w users.txt -fc 401 -fr "invalid"

# Headers et méthodes
ffuf -u https://target.test/ -X FUZZ -w methods.txt -mc all -fc 405
```

> [!TIP]
> `-ac` lance d'abord des requêtes aléatoires pour déduire les filtres. C'est souvent plus fiable que deviner `-fs`, surtout sur les SPA qui renvoient 200 partout.

## Sortie et reprise

```bash
# JSON pour post-traitement
ffuf -u https://target.test/FUZZ -w common.txt -of json -o ffuf.json

# CSV et HTML
ffuf -u https://target.test/FUZZ -w common.txt -of csv -o ffuf.csv
```

> [!NOTE]
> ffuf ne reprend pas un scan interrompu. Sauvegarde les résultats en JSON et relance avec les mêmes filtres, ou découpe la wordlist en plusieurs lots.

```bash
# Extraire les URLs trouvées
jq -r '.results[].url' ffuf.json | sort -u
```

> [!WARNING]
> Un fuzzing agressif peut saturer une application ou déclencher un WAF. Commence avec `-rate 20`, exclure les chemins destructifs (`/logout`, `/delete`) et vérifie le scope. `-mc all` sans filtre produit énormément de bruit.
