Une injection de commande permet à un attaquant d'exécuter des commandes système arbitraires sur le serveur via le nom du fichier uploadé.
$fileName = $_FILES['file']['name'];
// ...
$output=shell_exec("md5sum " . $uploadDir . $fileName); // Concaténation directe
echo "<pre>Hash MD5 : " . $output . "</pre>";
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'.
// Utiliser escapeshellarg ou mieux, les fonctions natives PHP
echo "Hash MD5 : " . md5_file($uploadDir . $fileName);
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.
$id_com=$_POST['num_com'];
$requete="SELECT `commentaire` FROM `commentaires` WHERE id=".$id_com;
$result_requete=envoie_requete($connexion,$requete);
POST /traitement-commentaires.php
Data: num_com=-1 UNION SELECT user() --
$stmt = mysqli_prepare($connexion, "SELECT commentaire FROM commentaires WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id_com);
mysqli_stmt_execute($stmt);
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.
if (isset($_GET['page']) && $_GET['page']!="" )
{
$page=$_GET['page'];
include($page); // Aucune vérification
}
http://localhost:8080/accueil.php?page=../../../../etc/passwd
$whitelist = ['ajout.php', 'commentaires.php', 'formulaire.php'];
if (in_array($_GET['page'], $whitelist)) {
include($_GET['page']);
} else {
// Erreur 404
}
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.
if ($_COOKIE["identification"]==1)
{
echo "Bienvenue sur la page protégée";
}
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.
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) { ... }
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.
if (move_uploaded_file($fileTmpName, $uploadDir . $fileName)) {
echo "Fichier telecharge avec succes !";
// Aucune vérification d'extension (.php, .php5, etc.)
}
1. Créer un fichier shell.php contenant <?php system($_GET['cmd']); ?>
2. L'uploader.
3. Accéder à /uploads/shell.php?cmd=ls
$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;