ActivitesOWASP/francois_baille.md

3.9 KiB
Raw Blame History

Réponse aux questions sur le Fuzzing

Q1. Le niveau de sécurité 1 permet-il déviter cette brèche dinformation ?

Non, le niveau de sécurité 1 nempêche pas laccè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 saffiche sans vérification dauthentification.

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 dinformation ?

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 :

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 daccé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 :
if(isset($_SESSION["security-level"])){
    $lSecurityLevel = $_SESSION["security-level"];
}else{
    $lSecurityLevel = 0;  // Par défaut niveau 0 (insecure)
}

  1. 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.
  2. Contrôle basé sur la variable de session $_SESSION["is_admin"] :

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

sudo nano /etc/php/7.0/apache2/php.ini

Ajouter ou modifier la ligne suivante pour désactiver la fonction

disable_functions = phpinfo

Redémarrer le serveur Apache pour appliquer les changements

sudo systemctl restart apache2

Avec cette configuration, même si un attaquant accède au fichier phpinfo.php, la fonction phpinfo() ne sexé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 :
<Files "phpinfo.php">
    Require all denied
</Files>

Restreindre l'accès via le pare-feu pour ne permettre l'accès qu'aux administrateurs connus, via leurs adresses ip par exemple.