Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Outils open source — Gratuits, portables, hors ligne
Caractéristiques communes
100 % hors ligne — aucune donnée transmise
Portables — un seul fichier exécutable
Gratuits — MIT ou GPL v3
Code source ouvert sur GitHub
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Academy Contact

Second-Order SQL Injection

hacking

Définition

L'injection SQL du second ordre (Second-Order SQL Injection, aussi appelée Stored SQL Injection) est une variante d'injection SQL où le payload malveillant est d'abord stocké dans la base de données (lors d'une première requête) et n'est exploité qu'ultérieurement, lors d'une seconde requête qui récupère et utilise les données stockées sans assainissement suffisant. Contrairement à l'injection SQL classique (first-order) qui est exécutée immédiatement lors de la première requête, le second-order bypass les protections appliquées uniquement à l'entrée de données. Une application peut sanitiser correctement les données lors de l'insertion (premier ordre) mais faire confiance aux données stockées en base lors de leur réutilisation (second ordre), supposant à tort que les données en base sont sûres. Scénario typique : un utilisateur s'inscrit avec le username admin'--. L'application échappe correctement ce username lors de l'INSERT (stocké tel quel avec l'apostrophe dans la base). Plus tard, quand l'utilisateur change son mot de passe, l'application exécute une requête utilisant le username stocké : UPDATE users SET password='nouveau' WHERE username='admin'--'. Le -- commente le reste de la requête, modifiant le mot de passe de l'utilisateur 'admin' plutôt que du compte actuel. Cette vulnérabilité est particulièrement insidieuse car elle ne se manifeste pas immédiatement lors du test de l'entrée originale et peut être difficile à détecter dans les revues de code. Les scanners automatiques simples qui ne suivent pas les flux de données entre requêtes peuvent manquer les second-order SQLi. Des cas réels documentés incluent des applications de changement de mot de passe, des fonctions de gestion de profil, et des traitements batch qui réutilisent des données stockées dans des requêtes SQL non paramétrées.

Fonctionnement

Étape 1 : s'inscrire avec username admin'-- (l'apostrophe est échappée lors de l'INSERT, stockée comme admin'-- en base). Étape 2 : utiliser la fonction 'changer mot de passe' qui génère : UPDATE users SET password='[newpass]' WHERE username='admin'--'. Le -- commente AND old_password='xxx', permettant de changer le mot de passe sans connaître l'ancien. L'injection ne s'exécute pas lors de l'inscription mais lors du changement de mot de passe.

Exploitation offensive

Les second-order SQLi permettent souvent de prendre le contrôle de comptes d'autres utilisateurs (admin) sans injection visible lors du test initial. Les fonctions de réinitialisation de mot de passe, de recherche basée sur le profil, et de traitement de messages sont des zones à fort risque. La cartographie des flux de données (où les données d'un utilisateur sont réutilisées dans des requêtes SQL) est nécessaire pour trouver ces injections.

Détection et mitigation

Les requêtes préparées (paramétrisées) au niveau des deux requêtes (insertion ET réutilisation) protègent contre les second-order SQLi. Un ORM (Object-Relational Mapper) bien utilisé offre une protection similaire. La revue de code doit tracer les flux de données depuis leur origine jusqu'à leur utilisation dans des requêtes SQL, même indirecte.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis