Qu’est-ce que l’injection SQL aveugle ?

L’injection SQL aveugle est un type d’ injection SQL où l’attaquant ne reçoit pas de réponse évidente de la base de données attaquée et reconstruit à la place la structure de la base de données étape par étape en observant le comportement du serveur de base de données et de l’application. L’injection SQL aveugle est également appelée injection SQL inférentielle .

Il existe deux types d’injections SQL aveugles : basées sur les booléens et basées sur le temps .

Conséquences de l’injection SQL aveugle

L’exécution d’une attaque à l’aide d’injections SQL aveugles prend beaucoup plus de temps que dans le cas d’injections SQL intrabande, mais peut donner les mêmes résultats. Selon le comportement du serveur de base de données et de l’application, l’attaquant peut être en mesure d’effectuer les actions suivantes :

  • Vérifier si d’autres types d’injections SQL sont possibles
  • Obtenir des informations sur la structure de la base de données
  • Extraire les données de la base de données

Qu’est-ce que l’injection SQL aveugle basée sur les booléens ?

L’ injection SQL aveugle basée sur les booléens est un sous-type d’injection SQL aveugle où l’attaquant observe le comportement du serveur de base de données et de l’application après avoir combiné des requêtes légitimes avec des données malveillantes à l’aide d’opérateurs booléens.

Exemple d’injection SQL aveugle basée sur les booléens

Par exemple, supposons que la requête suivante est destinée à afficher les détails d’un produit de la base de données.

SELECT * FROM products WHERE id = product_id
 

Dans un premier temps, un pirate malveillant utilise l’application de manière légitime pour découvrir au moins un ID de produit existant – dans cet exemple, il s’agit du produit 42. Ensuite, il peut fournir les deux valeurs suivantes pour product_id :

42 AND 1=1
42 AND 1=0
 

Si cette requête est exécutée dans l’application à l’aide d’une simple concaténation de chaînes, la requête devient respectivement :

SELECT * FROM products WHERE id = 42 and 1=1
SELECT * FROM products WHERE id = 42 and 1=0
 

Si l’application se comporte différemment dans chaque cas, elle est sensible aux injections SQL aveugles booléennes.

Si le serveur de base de données est Microsoft SQL Server, l’attaquant peut maintenant fournir la valeur suivante pour product_id :

42 AND (SELECT TOP 1 substring(name, 1, 1)
  FROM sysobjects
  WHERE id=(SELECT TOP 1 id
    FROM (SELECT TOP 1 id
      FROM sysobjects
      ORDER BY id)
    AS subq
    ORDER BY id DESC)) = 'a'
 

Par conséquent, la sous-requête entre parenthèses après 42 ANDvérifie si le nom de la première table de la base de données commence par la lettre a . Si true, l’application se comportera de la même manière que pour le payload 42 AND 1=1. Si false, l’application se comportera de la même manière que pour le payload 42 AND 1=0

L’attaquant peut parcourir toutes les lettres, puis passer à la deuxième lettre, à la troisième lettre, etc. En conséquence, l’attaquant peut découvrir le nom complet de la première table dans la structure de la base de données. Ils peuvent ensuite essayer d’obtenir plus de données sur la structure de cette table et enfin – extraire des données de la table. Bien que cet exemple soit spécifique à MS SQL, des techniques similaires existent pour d’autres types de bases de données.

Qu’est-ce que l’injection SQL aveugle basée sur le temps ?

L’injection SQL aveugle basée sur le temps est un sous-type d’injection SQL aveugle où l’attaquant observe le comportement du serveur de base de données et de l’application après avoir combiné des requêtes légitimes avec des commandes SQL qui provoquent des retards.

Exemple d’injection SQL aveugle basée sur le temps

Disons que nous avons la même requête que dans l’exemple ci-dessus :

SELECT * FROM products WHERE id = product_id
 

Un pirate malveillant peut fournir la valeur product_id suivante :

42; WAITFOR DELAY '0:0:10'
 

En conséquence, la requête devient :

SELECT * FROM products WHERE id = 1; WAITFOR DELAY '0:0:10'
 

Si le serveur de base de données est Microsoft SQL Server et que l’application est sensible aux injections SQL aveugles basées sur le temps, l’attaquant verra un délai de 10 secondes dans l’application.

Maintenant que l’attaquant sait que des injections SQL aveugles basées sur le temps sont possibles, il peut fournir le product_id suivant :

42; IF(EXISTS(SELECT TOP 1 *
  FROM sysobjects
  WHERE id=(SELECT TOP 1 id
    FROM (SELECT TOP 1 id 
      FROM sysobjects 
      ORDER BY id) 
    AS subq
    ORDER BY id DESC)
  AND ascii(lower(substring(name, 1, 1))) = 'a'))
  WAITFOR DELAY '0:0:10'
 

Si le nom de la première table de la structure de la base de données commence par la lettre a , la deuxième partie de cette requête sera vraie et l’application réagira avec un délai de 10 secondes. Tout comme pour les injections SQL aveugles booléennes ci-dessus, l’attaquant peut utiliser cette méthode à plusieurs reprises pour découvrir le nom de la première table dans la structure de la base de données, puis essayer d’obtenir plus de données sur la structure de cette table et enfin extraire des données de la tableau.

Comment prévenir les vulnérabilités d’injection SQL aveugle ?

Le seul moyen totalement efficace de prévenir tous les types de vulnérabilités SQLi dans les applications Web, y compris le SQLi aveugle, consiste à utiliser des requêtes paramétrées (également appelées instructions préparées) pour accéder aux bases de données SQL. Si votre langage de programmation ne prend pas en charge les requêtes paramétrées mais que votre moteur de base de données prend en charge les procédures stockées, vous pouvez utiliser à la place des procédures stockées avec des instructions préparées. Il n’est pas recommandé de se fier uniquement à d’autres méthodes de prévention telles que les listes blanches, les listes noires ou le filtrage/l’échappement des entrées. Les pirates malveillants peuvent trouver un moyen de contourner une telle désinfection.

Dans une attaque par injection SQL aveugle, l’attaquant ne reçoit aucune réponse directe de la base de données attaquée mais reconstruit à la place les données ou la structure de la base de données étape par étape en observant le comportement du serveur de base de données et de l’application.

L’injection SQL booléenne est un sous-type d’injection SQL aveugle où l’attaquant observe le comportement d’un serveur de base de données et d’une application en réaction aux requêtes qui combinent des requêtes légitimes avec des données malveillantes à l’aide d’opérateurs booléens.

L’injection SQL aveugle basée sur le temps est un sous-type d’injection SQL aveugle où l’attaquant observe le comportement d’un serveur de base de données et d’une application en réaction aux requêtes qui combinent des requêtes légitimes avec des commandes SQL qui entraînent des retards.

{"cpt":"service","style":"9","columns":"3","show":"6","order":"DESC","orderby":"DESC"}

Nos Services en Cybersécurité

Protégez-vous maintenant !

Forfait Évaluation de la surface d’attaque

La cible de cette évaluation de la surface d’attaque est les ressources réseau, les systèmes et les terminaux. Il n’y a pas de ciblage des membres ou des employés des organisations à des fins d’ingénierie sociale.

Forfait Évaluation de la vulnérabilité

Nous sommes en mesure de fournir des évaluations de vulnérabilité des applications web , des serveurs connectés à Internet et des gammes de réseaux connectés à Internet .

Analyse de vulnérabilité

Cycuri propose des analyses de vulnérabilité ponctuelles ou régulières de votre périmètre externe, de vos applications Web ou de votre réseau interne.

Forfait Évaluation WordPress

Nos services d’évaluation WordPress professionnelle sont populaires auprès de tous ceux qui souhaitent un examen par un tiers indépendant de leur posture de sécurité.

Test d’intrusion d’application Web

Que votre application Web soit destinée aux employés, B2B ou B2C, il existe un niveau de confiance inhérent qui est supposé lorsque les utilisateurs sont autorisés à entrer, naviguer et utiliser des applications et/ou des portails d’applications.

Test d’intrusion Black-Box externe

Un test d’intrusion externe Black-Box imite les actions d’un adversaire réel en tentant d’exploiter les faiblesses de la sécurité du réseau sans les dangers d’une menace réelle.

Injection SQL aveugle