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
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.

Error-Based SQL Injection

hacking

Définition

L'injection SQL error-based exploite les messages d'erreur retournés par la base de données pour extraire des informations directement depuis les messages d'erreur affichés dans la réponse HTTP. C'est une technique plus rapide que la time-based car elle obtient des données complètes en une seule requête plutôt que de procéder bit par bit. Chaque SGBD a des fonctions qui provoquent des erreurs contenant des données : MySQL utilise extractvalue() et updatexml(), PostgreSQL utilise des conversions de types invalides (CAST(version() AS INTEGER)), SQL Server utilise convert(INT, (SELECT @@version)) et @@version dans des contextes d'erreur, et Oracle utilise des techniques de type XMLType. Exemple MySQL : ' AND extractvalue(1, concat(0x7e, (SELECT database())))-- provoque une erreur XPath malformée du type : XPATH syntax error: '~nom_de_la_base'. La valeur de la sous-requête (nom de la base de données) apparaît dans le message d'erreur. Des requêtes similaires permettent d'extraire la version, les noms de tables, les colonnes, et les données. L'error-based est significativement plus rapide que la time-based : une requête extrait une valeur complète (jusqu'à 32-64 caractères selon la fonction). L'extraction d'un mot de passe haché de 40 caractères SHA1 nécessite 1-2 requêtes au lieu de plusieurs centaines. SQLMap utilise l'error-based avec l'option --technique=E. Les conditions nécessaires : que l'application affiche les messages d'erreur SQL dans la réponse (configuration dev ou mauvaise gestion des erreurs en production). La mitigation la plus simple est de désactiver l'affichage des erreurs SQL en production et de loguer les erreurs côté serveur uniquement.

Fonctionnement

Payload MySQL error-based pour extraire les tables : ' AND updatexml(1,concat(0x7e,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=database())),1)--. L'erreur retournée contient les noms des tables de la base courante. Payload PostgreSQL : ' AND 1=CAST((SELECT username FROM users LIMIT 1) AS INT)-- provoque une erreur de conversion affichant le username. Chaque requête extrait jusqu'à 64 caractères de données.

Exploitation offensive

L'error-based est souvent le premier vecteur testé dans un pentest web car sa vitesse en fait la technique privilégiée quand applicable. La présence de messages d'erreur SQL en production indique souvent un environnement de développement déployé sans durcissement, suggérant d'autres vulnérabilités. L'extraction de la structure complète de la base (tables, colonnes, données) est réalisable en quelques dizaines de requêtes.

Détection et mitigation

Désactiver display_errors en PHP (display_errors = Off dans php.ini) et utiliser des pages d'erreur génériques élimine le vecteur error-based tout en permettant aux logs de capturer les vraies erreurs. Les requêtes préparées (PDO, PreparedStatement) éliminent la vulnérabilité à la source. Les WAF détectent les payloads error-based (extractvalue, updatexml, convert avec SELECT imbriqués).

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis