Un pentesteur a audité le formulaire de connexion de app-auth-07.example. Le champ username est vulnérable à une injection SQL aveugle (*blind, boolean-based*) : l'application ne renvoie jamais le secret directement, mais sa réponse change selon que la condition injectée est vraie ou fausse.
Le secret est extrait caractère par caractère, par code ASCII et recherche dichotomique, avec une charge du type :
admin' AND ASCII(SUBSTR((SELECT note FROM app_secrets LIMIT 1),<POSITION>,1))><N>-- -
Bienvenue admin → la condition est vraie (le code ASCII est supérieur à N)Identifiants invalides → fauxLe journal complet des requêtes est fourni (ci-dessous). Pour chaque position, la suite de comparaisons encadre un code ASCII. Déduisez ce code, convertissez-le en caractère, puis reconstituez le secret position par position : c'est le flag.
Leçon de sécurité
L'injection SQL naît de la concaténation de données utilisateur dans une requête. La parade : des requêtes préparées (paramétrées) qui séparent le code SQL des données. Ajoutez le moindre privilège pour le compte SQL de l'application et des messages d'erreur génériques pour limiter l'exfiltration aveugle.