Attaque UNION — extraire plusieurs valeurs dans une seule colonne

SQL injection UNION attack, retrieving multiple values in a single column

Objectif : récupérer username et password concaténés dans une seule colonne et s’authentifier ensuite en administrator.

1) Pré-requis rapides

  • Connaître le nombre de colonnes retournées par la requête (cf. ORDER BY / UNION NULL tests).

  • Identifier quelle(s) colonne(s) de sortie sont rendues dans la réponse (constantes visibles).

2) Payloads exemples (selon SGBD)

Adapter le nombre de colonnes (NULL/constantes) pour correspondre à la requête vulnérable.

  • Oracle / PostgreSQL (concat par ||) — requête typique 2 colonnes :

  • MySQL (CONCAT) — 2 colonnes :

  • MSSQL (CONCAT ou +) — 2 colonnes :

ou

  • Si la requête originale a 3 colonnes (ex.) :

  • Si types incompatibles (erreur UNION) : forcer conversion / cast :

    • PostgreSQL: username::text

    • MySQL: CAST(username AS CHAR)

    • Oracle: TO_CHAR(username)

3) Procédure concise

  1. Détermine N colonnes (ORDER BY 1..N).

  2. Confirme UNION SELECT avec NULL/constantes.

  3. Injecte le payload de concaténation adapté au SGBD et au nombre de colonnes.

  4. Repère dans la réponse les lignes username:password.

  5. Identifie l’entrée administrator:… et utilise ces identifiants pour te connecter sur la page d’authentification.

4) Remarques pratiques

  • Si les mots de passe sont hachés (ex. bcrypt), l’utilisation directe pour login échouera — il faudra alors utiliser un bypass d’auth si autorisé ou confirmer que les mots de passe sont en clair (fort incident de sécurité).

  • Si l’application n’affiche qu’une colonne, concaténation est la bonne approche ; si elle rend plusieurs colonnes, préférer UNION SELECT username, password pour clarté.

  • Si UNION est filtré, tenter variations d’espacement/commentaires ou fonctions (CONCAT, CHR/CHAR) pour contourner les filtres.

Mis à jour

Ce contenu vous a-t-il été utile ?