Injection SQL

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

Injection SQL — Étapes de la formation

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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 .

  9. 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.

  10. 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