Rapport d'Audit de Sécurité

Analyse Technique & Intrusion - Cible : localhost:8080
3 Vulnérabilités Critiques
2 Sévérité Haute
1 Sévérité Moyenne
CRITIQUE Remote Code Execution (Injection de Commande)

Une injection de commande permet à un attaquant d'exécuter des commandes système arbitraires sur le serveur via le nom du fichier uploadé.

Fichier Vulnérable : formulaire.php
$fileName = $_FILES['file']['name'];
// ...
$output=shell_exec("md5sum " . $uploadDir . $fileName); // Concaténation directe
echo "<pre>Hash MD5 : " . $output . "</pre>";
Preuve de Concept (Exploit)
1. Créer un fichier local.
2. Le renommer : pwn.jpg; id
3. Uploader le fichier via le formulaire.
4. Résultat : Le serveur exécute 'md5sum...' puis la commande 'id'.
Correction Recommandée
// Utiliser escapeshellarg ou mieux, les fonctions natives PHP
echo "Hash MD5 : " . md5_file($uploadDir . $fileName);
CRITIQUE Injection SQL (Error-Based / Blind)

Le paramètre POST num_com est concaténé directement dans la requête SQL sans validation, permettant l'exfiltration complète de la base de données.

Fichier Vulnérable : traitement-commentaires.php
$id_com=$_POST['num_com'];
$requete="SELECT `commentaire` FROM `commentaires` WHERE id=".$id_com;
$result_requete=envoie_requete($connexion,$requete);
Preuve de Concept (Exploit)
POST /traitement-commentaires.php
Data: num_com=-1 UNION SELECT user() --
Correction Recommandée
$stmt = mysqli_prepare($connexion, "SELECT commentaire FROM commentaires WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id_com);
mysqli_stmt_execute($stmt);
CRITIQUE Local File Inclusion (LFI)

L'inclusion dynamique de fichiers via le paramètre GET page n'est pas sécurisée, permettant de lire n'importe quel fichier du serveur.

Fichier Vulnérable : accueil.php
if (isset($_GET['page']) && $_GET['page']!="" ) 
{
  $page=$_GET['page'];
  include($page); // Aucune vérification
}
Preuve de Concept (Exploit)
http://localhost:8080/accueil.php?page=../../../../etc/passwd
Correction Recommandée
$whitelist = ['ajout.php', 'commentaires.php', 'formulaire.php'];
if (in_array($_GET['page'], $whitelist)) {
    include($_GET['page']);
} else {
    // Erreur 404
}
HAUTE Contournement d'Authentification

La sécurité repose uniquement sur un cookie côté client non signé. Il suffit de modifier ce cookie pour accéder aux zones administratives.

Fichier Vulnérable : page-protegee.php
if ($_COOKIE["identification"]==1)
{
    echo "Bienvenue sur la page protégée";
}
Preuve de Concept (Exploit)
1. Ouvrir la console développeur (F12).
2. Aller dans Application > Cookies.
3. Ajouter/Modifier le cookie identification avec la valeur 1.
4. Rafraîchir la page.
Correction Recommandée
session_start();
// Vérifier une variable de session sécurisée côté serveur
if (isset($_SESSION['is_logged_in']) && $_SESSION['is_logged_in'] === true) { ... }
HAUTE Upload de Fichier Non Restreint

L'application ne vérifie ni l'extension ni le type MIME des fichiers uploadés. Un attaquant peut uploader un script PHP (webshell) et l'exécuter.

Fichier Vulnérable : formulaire.php
if (move_uploaded_file($fileTmpName, $uploadDir . $fileName)) {
    echo "Fichier telecharge avec succes !";
    // Aucune vérification d'extension (.php, .php5, etc.)
}
Preuve de Concept (Exploit)
1. Créer un fichier shell.php contenant <?php system($_GET['cmd']); ?>
2. L'uploader.
3. Accéder à /uploads/shell.php?cmd=ls
Correction Recommandée
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
if (!in_array($ext, ['jpg', 'png', 'gif'])) die("Interdit");
// Renommer le fichier pour éviter l'exécution
$new_name = md5(uniqid()) . "." . $ext;