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.

Union-Based SQL Injection

hacking

Dé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

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis