Error-Based SQL Injection
hackingDé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
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h