Skip to content

Quels sont les principaux types d'injection SQL ?

Réponse courte

L'injection SQL permet à l'entrée d'un attaquant de modifier une requête. Les techniques en bande renvoient les données directement : celle basée sur UNION ajoute un UNION SELECT pour extraire des colonnes supplémentaires, et celle basée sur les erreurs fait fuiter les données via les messages d'erreur de la base. Quand aucune sortie n'est visible, les attaquants utilisent la SQLi à l'aveugle — la booléenne déduit les données des différences de réponse vrai/faux, et la temporelle utilise des délais comme SLEEP() pour lire les données bit par bit.

L'injection SQL survient quand une entrée non fiable est concaténée dans une requête de sorte que l'entrée modifie la structure de la requête, pas seulement ses données. Les attaquants catégorisent les techniques selon la façon dont ils récupèrent les données — qui dépend entièrement de ce que l'application révèle dans ses réponses.

En bande : les données reviennent directement

  • Basée sur UNION. L'attaquant ajoute UNION SELECT ... pour faire renvoyer à la base des lignes supplémentaires d'autres tables dans le même jeu de résultats que l'application affiche déjà. Cela nécessite de faire correspondre le nombre de colonnes et les types compatibles de la requête originale, souvent découverts par sondage ORDER BY ou remplissage par NULL.
  • Basée sur les erreurs. L'application affiche les erreurs de base de données, donc l'attaquant conçoit une entrée qui force le SGBD à intégrer des données sensibles dans un message d'erreur (par exemple via une conversion de type ou EXTRACTVALUE). Rapide, mais ne fonctionne que lorsque des erreurs verbeuses fuitent vers l'utilisateur.

À l'aveugle : aucune donnée n'est affichée, donc on la déduit

Quand l'application ne renvoie aucune sortie de requête ni erreur, l'attaquant extrait les données un booléen à la fois :

  • Booléenne. Injecter une condition (AND 1=1 vs AND 1=2) et observer si le contenu de la page change (résultats affichés ou non). Chaque réponse vrai/faux révèle un bit, permettant à l'attaquant de reconstruire les valeurs caractère par caractère.
  • Temporelle. Quand même le contenu de la page ne change pas, l'attaquant injecte un délai conditionnel — IF(condition, SLEEP(5), 0). Une réponse lente signifie « vrai ». C'est la méthode la plus lente mais elle fonctionne contre les points de terminaison totalement aveugles.

Hors bande (à mentionner)

Quand ni l'en-bande ni le chronométrage ne fonctionnent, les attaquants peuvent exfiltrer via un canal latéral comme une requête DNS ou HTTP que la base de données effectue — utile dans les environnements fortement protégés par pare-feu.

Le correctif pour toutes est le même : requêtes paramétrées.

Les recruteurs recherchent la distinction en-bande vs à l'aveugle, le raisonnement selon lequel le choix de la technique dépend de ce que révèle la réponse, et la reconnaissance que la temporelle est le dernier recours.

Questions de suivi probables

  • Pourquoi un attaquant a-t-il recours à l'injection à l'aveugle temporelle ?
  • Comment une injection basée sur UNION doit-elle faire correspondre le nombre et les types de colonnes ?
  • Qu'est-ce que l'injection SQL de second ordre ?

Sources

Certifications

Recevez 100 questions d'entretien en cybersécurité + réponses

Laissez votre e-mail et nous vous enverrons le pack PDF gratuit et le jeu de flashcards.

Pas de spam. Désabonnez-vous à tout moment.