# Réponse aux questions sur le Fuzzing **Q1. Le niveau de sécurité 1 permet-il d’éviter cette brèche d’information ?** Non, le niveau de sécurité 1 n’empêche pas l’accès non autorisé à la page `phpinfo.php`. Dans le code source, on voit que pour les niveaux `0` et `1`, la variable `$lShowPHPInfo` est définie sur `true`, ce qui signifie que la page s’affiche sans vérification d’authentification. ```php case "0": case "1": $lShowPHPInfo = true; break; ``` Un attaquant peut simplement accéder à l'URL `http://serveur/mutillidae/phpinfo.php` et voir des informations sensibles comme : - La version de PHP installée (ex. PHP 7.0.33). - Les chemins des fichiers de configuration (ex. `/etc/php/7.0/apache2/php.ini`). - Les extensions PHP activées (ex. `mysqli, curl`). Cela facilite les attaques par reconnaissance, comme l'exploitation de vulnérabilités connues de certaines versions de PHP. ---------- **Q2. Le niveau de sécurité 5 permet-il d’éviter cette brèche d’information ?** Oui, le niveau de sécurité 5 bloque l'accès aux utilisateurs non administrateurs. Avec le niveau de sécurité 5, le code effectue une vérification sur la session utilisateur : ```php case "5": if(isset($_SESSION["is_admin"]) && $_SESSION["is_admin"]){ $lShowPHPInfo = true; } break; ``` Cela signifie que **seuls les utilisateurs ayant la variable de session `is_admin` définie sur `true`** pourront accéder à la page. Cela renforce la sécurité en limitant l'accès aux seuls administrateurs authentifiés. ---------- **Q3. Expliquer le mécanisme de sécurité mis en œuvre dans le code source. Tous les utilisateurs ont-ils interdiction d’accéder à cette page ?** Le mécanisme repose sur la gestion de session PHP. Voici les étapes : 1. Vérification du niveau de sécurité défini dans la session : ```php if(isset($_SESSION["security-level"])){ $lSecurityLevel = $_SESSION["security-level"]; }else{ $lSecurityLevel = 0; // Par défaut niveau 0 (insecure) } ``` 2. Application des règles selon le niveau de sécurité : - Niveau `0` et `1` : accès libre. - Niveau `2` à `5` : restriction d'accès en fonction du rôle admin. 3. Contrôle basé sur la variable de session `$_SESSION["is_admin"]` : ```php if(isset($_SESSION["is_admin"]) && $_SESSION["is_admin"]){ $lShowPHPInfo = true; } ``` Non, tous les utilisateurs ne sont pas interdits. - Seuls les administrateurs peuvent y accéder aux niveaux de sécurité supérieurs. - Si l'attaquant parvient à manipuler la session (ex. via une faille XSS), il pourrait contourner cette sécurité. ---------- **Q4. Proposer une solution de sécurité basée sur la configuration du fichier php.ini du serveur Web.** **Solution :** Pour empêcher totalement l'accès à la page `phpinfo.php`, même si elle est accessible via le Web, on peut désactiver la fonction PHP `phpinfo()` en modifiant le fichier de configuration `php.ini`. Ouvrir le fichier de configuration PHP sur le serveur ```bash sudo nano /etc/php/7.0/apache2/php.ini ``` Ajouter ou modifier la ligne suivante pour désactiver la fonction ```ini disable_functions = phpinfo ``` Redémarrer le serveur Apache pour appliquer les changements ```bash sudo systemctl restart apache2 ``` Avec cette configuration, même si un attaquant accède au fichier `phpinfo.php`, la fonction `phpinfo()` ne s’exécutera pas, évitant ainsi la divulgation d'informations sensibles. Cela renforce la sécurité en limitant les fonctionnalités exposées par le serveur PHP. **Autres mesures de sécurité recommandées :** - Supprimer ou restreindre l'accès au fichier `phpinfo.php` via la configuration Apache : ```apache Require all denied ``` Restreindre l'accès via le pare-feu pour ne permettre l'accès qu'aux administrateurs connus, via leurs adresses ip par exemple.