Détermination du nombre de colonnes — Attaque UNION

SQL injection UNION attack, determining the number of columns returned by the query

  • Contexte : filtre category vulnérable à l’injection SQL ; la réponse de l’application inclut les résultats SQL, donc un UNION permet 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 SELECT compatibles.

  • Méthode (rapide) :

    1. 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 N provoque une erreur, le nombre de colonnes est < N.

    2. 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 NULL et 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 ?