# Fuzzing avec ffuf

## Prérequis
- ffuf installé : `go install github.com/ffuf/ffuf/v2@latest`
- Python 3 pour le serveur local
- curl ou un navigateur
- Wordlist : `wordlist_api.txt`, `wordlist_directory.txt`, `wordlist_params.txt` (à télécharger)

## Démarrage service web en local

Un serveur PHP vous est proposé. Il est en PHP. Démarrez le en localhost depuis le dossier `web/`. Le service est alors disponible, par exemple à l'adresse : `http://localhost:8080`. Le serveur est aussi disponible à l'adresse : `https://perso.isima.fr/~chaolivi/zz2f5-WebSec/1.fuzzing/web/`.

---

Votre objectif est de retrouver 6 flag en explorant le site web.

---

## Exercice 1 : Directory Fuzzing

### Objectif
Découvrir les répertoires et fichiers cachés du site.

### Étape 1 : Tester manuellement

Une URL a une structure. Il est donc possible d'essayer différents mots-clés. Par exemple user, secret, data, pages, index, backup. Essayez par exemple.
```bash
curl -s http://localhost:8080/admin/
```
**Question** : Que constatez-vous ? Ces pages sont-elles accessibles ?

### Étape 2 : Découvrir avec ffuf

Utilisez ffuf en spécifiant l'url du serveur pour fuzzyer les chemins du site avec la wordlist `wordlist_directory.txt`. Vous rechercherez l'ensemble des réponses avec les codes 200,301,302 (option `-mc`) et  filtrez la page d'accueil (index.php) retournée pour tous les chemins inconnus avec `-fs 2045`. Aidez-vous du `man`.

**Question** : Combien de répertoires/fichiers avez-vous trouvés ? Listez-les et analysez les résultats.

---

## Exercice 2 : Parameter Fuzzing

### Objectif
Découvrir les paramètres GET d'un endpoint.

### Étape 1 : Analyser search.php
```bash
curl -s "http://localhost:8080/search.php?q=test"
```

La page utilise un paramètre `q` pour la recherche. Dans la console du navigateur, retrouver la requête envoyée au serveur.

### Étape 2 : Fuzzyer les paramètres

**Consigne** : Utilisez ffuf pour découvrir quels paramètres fonctionnent sur l'endpoint `/search.php`. Utilisez cette fois les filtres `-mc 200` et  `-fs 1666`.

**Question** : Quel paramètre fonctionne au-delà de `q` ?

### Étape 3 : Fuzzyer les valeurs de paramètres

Utilisez la commande `seq` pour lister des nombres, par exemple de 1 à 100, et les enregistrer dans un fichier.

utilisez ensuite ffuf pour savoir combien d'articles existent sur le site.

---

## Exercice 3 : API Fuzzing

Découvrez les endpoints de l'API REST: `api/data.php`. Utilisez ffuf pour obtenir la liste de l'ensemble des `action` disponibles.  

**Question** : Quelles actions l'API expose-t-elle ? Quels flags trouvez-vous ?
