WAFPlanet

Injection SQL (SQLi)

Types d'attaques

Quick Definition

Une technique d'attaque qui exploite les vulnérabilités dans la couche base de données d'une application en insérant du code SQL malveillant dans les requêtes.

Qu'est-ce que Injection SQL ?

L'injection SQL (SQLi) est l'une des vulnérabilités d'applications web les plus anciennes et les plus dangereuses. Elle se produit lorsqu'un attaquant est capable d'insérer ou "d'injecter" du code SQL malveillant dans une requête qu'une application envoie à sa base de données. Cela se produit lorsque l'entrée utilisateur est incorrectement filtrée ou non correctement paramétrée.

Les attaques par injection SQL peuvent :

  • Contourner l'authentification pour obtenir un accès non autorisé
  • Lire des données sensibles de la base de données
  • Modifier ou supprimer des données
  • Exécuter des opérations administratives sur la base de données
  • Dans certains cas, exécuter des commandes sur le système d'exploitation

Il existe plusieurs types d'injection SQL :

  • SQLi in-band : L'attaquant utilise le même canal pour lancer l'attaque et recueillir les résultats (basé sur les erreurs, basé sur UNION)
  • SQLi aveugle : Pas de messages d'erreur visibles ; l'attaquant déduit les données en fonction du comportement de l'application
  • SQLi out-of-band : Les données sont récupérées via différents canaux (DNS, requêtes HTTP)

Exemples

Considérons un formulaire de connexion où la requête backend est :

SELECT * FROM utilisateurs WHERE nom_utilisateur='$user' AND mot_de_passe='$pass'

Un attaquant entrant admin'-- comme nom d'utilisateur transformerait la requête en :

SELECT * FROM utilisateurs WHERE nom_utilisateur='admin'--' AND mot_de_passe='...'

Le -- met en commentaire le reste de la requête, permettant la connexion sans mot de passe.

Questions fréquentes

Comment les WAF protègent-ils contre l'injection SQL ?

Les WAF utilisent la correspondance de patterns et la détection basée sur les signatures pour identifier les tentatives d'injection SQL dans les requêtes HTTP. Ils recherchent des mots-clés SQL suspects, des caractères spéciaux et des patterns d'attaque connus dans les chaînes de requête, les données de formulaire et les en-têtes. Les WAF avancés utilisent également l'analyse comportementale pour détecter les nouvelles attaques.

Les requêtes paramétrées suffisent-elles pour prévenir l'injection SQL ?

Les requêtes paramétrées (prepared statements) sont la défense la plus efficace contre l'injection SQL au niveau de l'application. Cependant, les WAF fournissent une défense en profondeur en interceptant les attaques en périphérie, en protégeant les applications legacy et en fournissant une protection pendant que le code est en cours de correction.