3.9 KiB
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.
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 :
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 :
- 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)
}
-
Application des règles selon le niveau de sécurité :
- Niveau
0
et1
: accès libre. - Niveau
2
à5
: restriction d'accès en fonction du rôle admin.
- Niveau
-
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 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 :
<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.