Qu'est-ce qu'une injection SQL ?
Une injection SQL (SQLi) est une attaque qui consiste à insérer du code SQL malveillant dans une requête envoyée à une base de données. Si l'application ne filtre pas correctement les entrées utilisateur, l'attaquant peut lire, modifier ou supprimer des données, contourner une authentification, ou même exécuter des commandes système.
En CTF, les challenges SQLi simulent ces vulnérabilités dans un environnement contrôlé. L'objectif est de récupérer un flag caché dans la base de données - une chaîne de caractères stockée dans une table que vous ne devriez pas pouvoir lire normalement.
Rappel légal : les techniques présentées ici ne s'appliquent que dans des environnements autorisés - plateformes CTF, labs dédiés. Toute utilisation sur un système réel sans permission est illégale.
Les types d'injections SQL en CTF
Tous les challenges ne se ressemblent pas. Savoir identifier le type de SQLi en face de vous est la première étape vers la solution.
SQLi classique (Error-based / UNION-based)
L'application affiche directement les données ou les erreurs SQL. C'est le type le plus simple. En ajoutant une apostrophe (') dans un champ de saisie, si la page renvoie une erreur SQL, vous avez une SQLi classique. La technique UNION permet ensuite d'extraire des données d'autres tables.
Blind SQLi
Aucun résultat visible, aucune erreur affichée. L'application répond juste différemment selon que la condition est vraie ou fausse (boolean-based), ou prend plus de temps à répondre (time-based avec SLEEP()). Ces challenges demandent plus de patience mais restent très courants.
Second-order SQLi
Les données malveillantes sont stockées, puis exécutées plus tard dans un autre contexte. Plus rare en CTF débutant, mais très intéressant pour comprendre la profondeur de la vulnérabilité.
Méthode pas à pas pour un challenge SQLi
Voici la démarche systématique qui fonctionne sur la plupart des challenges web SQLi :
- Identifier le point d'injection - champs de formulaire, paramètres URL, headers HTTP. Tester avec
',",; - Confirmer la vulnérabilité - observer si le comportement change (erreur SQL, page vide, résultat différent)
- Déterminer le nombre de colonnes - avec
ORDER BY 1--,ORDER BY 2--… jusqu'à obtenir une erreur - Identifier les colonnes affichables - avec
UNION SELECT NULL,NULL,NULL--puis remplacer les NULL par des valeurs - Énumérer les bases et tables - requêter
information_schema.tables - Extraire les données cibles - sélectionner la table contenant le flag et lire son contenu
Comprendre la protection pour mieux attaquer
En CTF, reconnaître pourquoi une application est vulnérable aide à trouver la faille. Les deux grandes causes d'injection SQL sont la concaténation directe de l'entrée utilisateur dans une requête, et l'absence de requêtes préparées (prepared statements).
Quand une requête ressemble à SELECT * FROM users WHERE name = '$input', il suffit que $input contienne ' OR '1'='1 pour changer la logique de la requête. Les paramètres préparés séparent la structure SQL des données - rendant l'injection impossible.
Connaître les défenses - WAF, filtres de caractères, whitelists - permet aussi de comprendre comment les contourner : encodage URL, commentaires SQL (--, #, /**/), variations de casse.
FAQ - Injections SQL en CTF
Oui, SQLMap est autorisé sur les plateformes CTF dans le cadre légal d'entraînement. Il ne doit jamais être utilisé sur des systèmes réels sans autorisation explicite du propriétaire.
En SQLi classique, les données ou erreurs s'affichent directement. En blind SQLi, aucun retour visible - on déduit les informations par des réponses booléennes (vrai/faux) ou des délais de réponse artificieux.
Quelques bases suffisent pour commencer : SELECT, WHERE, UNION, les guillemets et les commentaires. La pratique régulière développe les réflexes rapidement.
Les injections SQL restent l'une des vulnérabilités web les plus répandues dans les applications réelles. Les CTF les enseignent car comprendre SQLi est fondamental pour tout profil en sécurité applicative.
Conclusion
L'injection SQL est l'un des meilleurs points d'entrée en sécurité web. Elle est simple à comprendre, facile à pratiquer en CTF, et directement applicable dans les audits professionnels. Maîtriser la SQLi, c'est comprendre pourquoi les développeurs doivent valider et paramétrer chaque requête.
Sur CTFLab, les challenges web SQLi sont disponibles en progressivité : du classique UNION-based au blind time-based, avec indices et write-up intégrés pour apprendre à son rythme.
Pratiquer les injections SQL en conditions réelles
CTFLab propose des challenges web SQLi dans des environnements Docker isolés, avec scoreboard et progression individuelle.