Attaque UNION — trouver la colonne compatible texte

SQL injection UNION attack, finding a column containing text

Objectif : insérer une ligne UNION contenant la valeur-test (PjNkGQ) pour identifier quelle colonne accepte des chaînes, afin d’extraire ensuite des données textuelles.

1) Confirmer le nombre de colonnes (si non déjà connu)

  • Tester avec ORDER BY incrémental :

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

2) Injecter une ligne UNION contenant la valeur fournie

  • Exemple pour 3 colonnes :

    — si la réponse affiche PjNkGQ, la 2ᵉ colonne est compatible texte.

3) Variantes pour localiser la colonne visible

  • Tester la constante dans chaque position :

  • Utiliser constantes distinctes pour cartographier les colonnes visibles :

4) Gérer les erreurs de types

  • Si UNION échoue pour incompatibilité de type, utiliser NULL pour les colonnes non textuelles ou caster la constante selon le SGBD :

    • MySQL / PostgreSQL :

    • MSSQL :

    • Oracle :

  • Si certaines colonnes exigent des types numériques, laisser NULL pour celles-ci et placer le texte uniquement dans la colonne candidate.

5) Si un WAF / filtrage bloque UNION

  • Varier le commentaire / espacement : -- -, --, /* ... */.

  • Construire la chaîne via fonctions (ex. CONCAT('P','jNkGQ')) pour contourner une normalisation stricte.

6) Résultat attendu

  • La réponse contient PjNkGQ → colonne texte identifiée. À partir de là, construire les UNION SELECT pour l’énumération (tables/colonnes/dumps).

Mis à jour

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