Injection SQL
Une citation dans un champ de recherche réécrit la requête.
Qu'est-ce que Injection SQL?
Une chaîne fournie par l'utilisateur est concaténée dans une requête et cette chaîne peut modifier ce que demande la requête. Chaque requête ici s'exécute sur une véritable base de données intégrée, donc rien n'est falsifié. Vous allez casser un formulaire de recherche de compte avec un guillemet simple, renvoyer la table entière des membres avec ' OR '1'='1 , puis utiliser UNION SELECT et information_schema pour en extraire les e-mails de l'administrateur et les hachages de mots de passe. Le correctif lie la valeur en tant que paramètre afin que la grammaire SQL n'analyse jamais l'entrée sous forme de code. Pas de désinfection, pas de liste de blocage de pare-feu.
Ce que vous apprendrez dans Injection SQL
- Reconnaître la tautologie d'injection SQL du manuel ' OR '1'='1 et expliquer pourquoi une condition toujours vraie contourne un filtre WHERE
- Suivez comment un point de terminaison de recherche sur une seule ligne devient une lecture de table complète lorsque son paramètre est concaténé dans la chaîne SQL
- Utilisez UNION SELECT pour énumérer les tables de base de données via information_schema et extraire les lignes d'une table que le formulaire n'a jamais été censé exposer, comme admin_users
- Distinguer les requêtes paramétrées (la défense fiable) des défenses contre la manipulation de chaînes comme les listes de blocage, l'échappement et les règles WAF, et expliquer pourquoi seule l'approche paramétrée est valable
- Lisez suffisamment bien un gestionnaire de base de données vulnérable pour repérer le bogue de concaténation, puis confirmez le correctif paramétré en réexécutant la charge utile exacte sur le point de terminaison corrigé et en voyant zéro ligne.
Injection SQL — Étapes de la formation
-
Trouver le formulaire cible
Bob has Vantyr in his sights, a membership service with a public account-lookup page. Pas de connexion, juste un champ email qui renvoie le plan d'un membre. This is where web attacks begin: an ordinary form that quietly talks to a database.
-
Soumettre une recherche normale
First, see how the form behaves normally. Entrez l'e-mail d'un vrai membre et soumettez. The browser's Network panel opens and records the request, exactly what a developer sees in DevTools.
-
Inspecter la demande
Voilà la demande. L'e-mail que vous avez saisi est transmis au serveur dans la requête payload et la réponse renvoie le membre correspondant. Rien de mal pour l'instant. This is how the feature is meant to work.
-
Lire le code du gestionnaire
Maintenant la partie intéressante : le code du serveur qui gère cette requête. Il construit la requête SQL en en collant votre e-mail directement dans la chaîne de requête . Cette seule déclaration est tout le problème.
-
Repérez la ligne vulnérable
Cette seule déclaration représente toute la vulnérabilité : votre entrée est collée dans la chaîne SQL et le commentaire affiche la requête exacte envoyée à la base de données, reconstruite en direct à partir de ce que vous tapez.
-
Brisez-le avec une citation
Le champ contient toujours morgan.lee@example.com lors de votre première recherche. Votre entrée atterrit à l’intérieur d’une chaîne entre guillemets, alors que se passe-t-il lorsque vous envoyez un devis ? Ajoutez un guillemet simple à la fin et soumettez, et regardez le commentaire executed query dans le code reconstruit pendant que vous tapez : votre devis atterrit inside sur la chaîne et la brise. You're no longer sending data. You're editing the query.
-
Lire l'erreur de base de données
Le serveur a renvoyé un 500 avec une véritable erreur de base de données. Cette citation supplémentaire a mis fin à la chaîne plus tôt et a laissé la requête mal formée. The database tried to run it and choked. Une erreur comme celle-ci est le feu vert d'un attaquant : l'entrée atteint le moteur SQL.
-
Contourner le filtre
Now make the query do something useful for you. Fermez la chaîne vous-même, ajoutez une condition always true et le filtre WHERE arrête le filtrage. Le classique : ' OR '1'='1 .
-
Voir le dump complet
Le filtre est parti. Au lieu d'un membre, la réponse est la table des membres entire : chaque e-mail et plan dont dispose Vantyr. Vous avez demandé un compte et la base de données les a tous transmis.
-
Contrôle des connaissances
Vous venez de voir une charge utile renvoyer la table entière. Verrouillez pourquoi.
Couverture des référentiels de sécurité
OWASP Top 10
- A05:2025 Injection
- A03:2021 Injection
CWE
- CWE-89 Improper Neutralization of Special Elements used in an SQL Command
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security