Détermination du nombre de colonnes — Attaque UNION
SQL injection UNION attack, determining the number of columns returned by the query
Contexte : filtre
categoryvulnérable à l’injection SQL ; la réponse de l’application inclut les résultats SQL, donc unUNIONpermet d’injecter une ligne additionnelle visible.Objectif : trouver le nombre exact de colonnes renvoyées par la requête originale pour construire ensuite des
UNION SELECTcompatibles.Méthode (rapide) :
Tester avec
ORDER BY— incrémenter l’indice jusqu’à provoquer une erreur (l’erreur indique que l’indice dépasse le nombre de colonnes) :' ORDER BY 1-- - ' ORDER BY 2-- - ' ORDER BY 3-- -Quand
ORDER BY Nprovoque une erreur, le nombre de colonnes est< N.
Confirmer en injectant une ligne UNION contenant NULL — construire un UNION SELECT avec le même nombre de colonnes ; si l’application affiche la ligne injectée (valeurs NULL), le nombre est correct. Exemple (3 colonnes):
' UNION SELECT NULL, NULL, NULL-- -Si la ligne apparaît, la requête originale retourne 3 colonnes. Sinon, ajuster le nombre de
NULLet retester.
Variantes utiles :
Utiliser des constantes pour repérer la colonne affichée (utile si seules certaines colonnes sont rendues) :
(Permet d’identifier visuellement quelles colonnes de la réponse correspondent aux colonnes injectées.)
Si UNION échoue pour cause de types, remplacer certaines constantes par CAST(NULL AS VARCHAR2) / NULL selon SGBD, ou adapter types avec CAST/TO_CHAR.
Résultat attendu : une ligne supplémentaire contenant les NULL (ou les constantes) s’affiche → nombre de colonnes déterminé.
Mis à jour
Ce contenu vous a-t-il été utile ?