Union-Based SQL Injection
hackingDéfinition
L'injection SQL union-based utilise l'opérateur SQL UNION pour fusionner les résultats d'une requête malveillante avec ceux de la requête légitime, permettant d'afficher des données arbitraires de la base de données dans la réponse HTTP. C'est la technique la plus directe et la plus rapide quand l'application retourne des résultats de requête visibles dans la page.
Prérequis pour une exploitation union-based : l'application affiche les résultats de la requête SQL dans la réponse, l'opérateur UNION est permis (non filtré), et le nombre de colonnes de la requête UNION doit correspondre à celui de la requête originale. Les étapes d'exploitation sont : 1) déterminer le nombre de colonnes avec ORDER BY N-- jusqu'à obtenir une erreur, 2) identifier les colonnes visibles avec UNION SELECT 1,2,3...N--, 3) remplacer les positions visibles par des sous-requêtes d'extraction.
Un exemple complet MySQL : ' UNION SELECT username, password, 3 FROM users-- (si la requête originale retourne 3 colonnes dont les 2 premières sont affichées). Le résultat de la requête UNION apparaît directement dans la page HTML, exposant les usernames et mots de passe de la table users.
L'union-based permet aussi l'exfiltration de fichiers (avec les permissions appropriées) : UNION SELECT LOAD_FILE('/etc/passwd'), 2, 3-- lit le contenu d'un fichier du système de fichiers. Et l'écriture de fichiers : UNION SELECT '<?php system($_GET["c"]);?>' INTO OUTFILE '/var/www/html/shell.php'-- écrit un webshell directement sur le serveur si les permissions FILE sont accordées à l'utilisateur MySQL et que le répertoire est accessible en écriture.
SQLMap exploite automatiquement les injections union-based avec --technique=U et un flag --file-read pour la lecture de fichiers et --file-write/--file-dest pour l'écriture.
Fonctionnement
Étape 1 - nombre de colonnes : ' ORDER BY 1-- ' ORDER BY 2-- ... ORDER BY N-- jusqu'à erreur (N-1 est le nombre). Étape 2 - colonnes visibles : ' UNION SELECT NULL,NULL,...N-- puis remplacer les NULL par 'a','b' pour identifier celles affichées dans la page. Étape 3 - extraction : ' UNION SELECT username,password,NULL FROM users LIMIT 0,1--. Si la page affiche les résultats de la requête, les credentials apparaissent dans la réponse HTML.
Exploitation offensive
L'écriture de fichiers via INTO OUTFILE est particulièrement puissante : elle permet de déposer un webshell PHP directement sur le serveur web depuis une injection SQL, contournant les protections au niveau de l'application et obtenant un accès OS. Prérequis : permissions FILE MySQL, connaissance du path web, et répertoire accessible en écriture. Cette technique combine SQLi et upload de webshell.
Détection et mitigation
Les WAF bloquent les patterns UNION SELECT dans les paramètres. Les requêtes préparées empêchent l'injection à la source. La restriction des permissions MySQL (pas de FILE privilege, moindre privilège sur les tables) limite les dommages. Les logs MySQL montrent des requêtes UNION SELECT inhabituelles comme indicateurs d'attaque.
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