5. Blind SQL Injection : exploiter sans retour visible

Toutes les applications vulnérables n’affichent pas directement le résultat d’une requête injectée. Lorsque l’application se contente d’un comportement binaire (page normale ou page d’erreur, réponse rapide ou lente), on parle d’injection SQL aveugle, ou Blind SQL Injection. Cette unité en détaille les deux variantes principales.

 

L’injection aveugle booléenne

Dans ce scénario, l’application affiche un comportement différent selon que la condition injectée est vraie ou fausse (par exemple, un message « produit trouvé » contre « produit introuvable »), sans jamais révéler directement la donnée recherchée.

Deviner un caractère par dichotomie

Pour deviner, par exemple, le premier caractère du mot de passe de l’administrateur, l’attaquant teste des conditions successives :

produit.php?id=1 AND (SELECT SUBSTRING(mot_de_passe,1,1) FROM utilisateurs WHERE login='admin')='a'
produit.php?id=1 AND (SELECT SUBSTRING(mot_de_passe,1,1) FROM utilisateurs WHERE login='admin')='b'

Si la page répond normalement pour une lettre donnée, c’est que la condition est vraie, et donc que le premier caractère du mot de passe est connu. En répétant cette opération pour chaque position et chaque caractère possible, l’attaquant reconstitue progressivement l’intégralité de la valeur recherchée, caractère par caractère.

 

L’injection aveugle temporelle (time-based)

Lorsque l’application ne montre absolument aucune différence visuelle entre une condition vraie et une condition fausse, l’attaquant peut s’appuyer sur le temps de réponse du serveur en injectant une fonction de pause conditionnelle.

produit.php?id=1 AND IF((SELECT SUBSTRING(mot_de_passe,1,1) FROM utilisateurs WHERE login='admin')='a', SLEEP(5), 0)

Si la réponse du serveur met environ cinq secondes de plus que la normale à arriver, la condition est vraie. Si la réponse est immédiate, la condition est fausse. Cette technique, bien que beaucoup plus lente à exploiter manuellement, fonctionne même lorsque l’application ne renvoie absolument aucune information exploitable dans son contenu.

Pourquoi cette méthode est plus lente

Extraire une donnée entière caractère par caractère, en testant potentiellement des dizaines de valeurs possibles par position, peut nécessiter des centaines voire des milliers de requêtes. C’est pour cette raison que l’exploitation des injections aveugles est presque systématiquement automatisée via des outils dédiés, qui feront l’objet du chapitre suivant.

 

Pourquoi l’injection aveugle reste difficile à repérer

Contrairement à une injection classique ou UNION qui produit une erreur visible ou des données affichées, une injection aveugle bien menée ne génère souvent aucune anomalie apparente pour un utilisateur ou un simple test manuel rapide, ce qui la rend particulièrement insidieuse à détecter sans outillage adapté.

Points clés :

  • L’injection aveugle booléenne déduit l’information via une différence de comportement visible
  • L’injection aveugle temporelle déduit l’information via un délai de réponse provoqué
  • L’extraction caractère par caractère nécessite un grand nombre de requêtes
  • Cette technique est presque toujours automatisée en pratique
SEE ALL Add a note
YOU
Add your Comment