Attaque UNION — extraire des données d’autres tables

SQL injection UNION attack, retrieving data from other tables

Contexte : filtre category vulnérable à l’injection; la réponse rend les résultats SQL, donc un UNION SELECT permet d’injecter et d’afficher des lignes provenant d’autres tables.

But du lab : récupérer tous les username / password depuis la table users puis se connecter en tant qu’administrator.

Étapes (ordre, payloads exacts)

  1. Déterminer le nombre de colonnes (si inconnu) :

    Quand ORDER BY N provoque une erreur, le nombre de colonnes < N.

  2. Valider UNION (même nombre de colonnes que la requête originale) : Exemple si la requête retourne 2 colonnes :

    ou avec NULL pour colonnes non pertinentes :

  3. Extraire username / password (adapter le nombre/ordre de colonnes) : Si la requête originale a 2 colonnes :

    Si elle a 3 colonnes, placer NULL pour la colonne non utilisée, p.ex. (texte en 2ᵉ position) :

    — Si types incompatibles : utiliser CAST/TO_CHAR ou NULL pour forcer compatibilité :

  4. Vérifier la sortie — la réponse doit contenir les paires username/password.

    • Repérer la ligne administrator et noter son mot de passe.

    • Utiliser ces identifiants sur la page de login.

  5. Alternative (si l’exfiltration échoue) — bypass d’auth par payload :

    (moins probant comme preuve que le dump; privilégier l’exfiltration si possible.)

Précisions techniques

  • Utiliser des constantes distinctes (ou NULL) pour repérer quelles colonnes sont affichées.

  • Oracle : noms en MAJUSCULES si non-quotés; peut nécessiter TO_CHAR.

  • MSSQL/MySQL/Postgres : CAST/CONVERT/::text si types différents.

  • Si UNION bloqué, tester variations d’espacement/commentaires ou fonctions pour reconstruire la chaîne (CONCAT, CHR/CHAR).

Impact résumé

  • Compromission d’identifiants (administrateur), prise de contrôle applicative, exfiltration/altération de données.

Mis à jour

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