Tutoriel d'injection SQL : apprendre avec un exemple

โšก Rรฉsumรฉ intelligent

L'injection SQL est une attaque qui consiste ร  corrompre les requรชtes SQL dynamiques afin de contourner l'authentification ou de divulguer des donnรฉes, en exploitant les applications web qui construisent leurs requรชtes ร  partir de donnรฉes utilisateur non filtrรฉes. Cette page explique le fonctionnement de cette attaque et comment s'en prรฉmunir.

  • ???? Dรฉfinition: L'injection SQL insรจre du code SQL malveillant dans une requรชte via un champ de saisie non validรฉ.
  • (I.e. Impact: Une attaque rรฉussie peut contourner les identifiants de connexion et lire, modifier ou supprimer des enregistrements.
  • ๐Ÿงช Exemple : Une condition toujours vraie, associรฉe ร  un commentaire, transforme une vรฉrification de connexion en un contournement.
  • ๏ธ Outils: SQLMap et jSQL automatisent la dรฉtection et l'exploitation des paramรจtres injectables.
  • ๐Ÿ›ก๏ธ La prรฉvention: Les requรชtes paramรฉtrรฉes, la validation des entrรฉes et les comptes ร  privilรจges minimaux permettent de combler l'รฉcart.
  • ๐Ÿค– Avantage moderne : Les scanners et pare-feu pilotรฉs par l'IA signalent les schรฉmas d'injection que les signatures corrigรฉes ne parviennent pas ร  identifier.

Tutoriel sur l'injection SQL

Quโ€™est-ce quโ€™une injection SQL ?

L'injection SQL est une attaque qui consiste ร  corrompre les requรชtes SQL dynamiques en commentant certaines parties de la requรชte ou en y ajoutant une condition toujours vraie. Elle exploite les failles de conception des applications web mal conรงues pour exรฉcuter du code SQL malveillant.

Les donnรฉes constituent l'un des รฉlรฉments les plus essentiels des systรจmes d'information. Les applications web basรฉes sur des bases de donnรฉes sont utilisรฉes par les organisations pour obtenir des donnรฉes auprรจs de leurs clients. SQL est l'acronyme de Langage de requรชte structurรฉIl sert ร  extraire et ร  manipuler des donnรฉes dans la base de donnรฉes.

Schรฉma illustrant comment une injection SQL manipule une requรชte de base de donnรฉes dynamique

Comment fonctionne une attaque par injection SQL ?

Les types d'attaques rรฉalisables par injection SQL varient selon le moteur de base de donnรฉes. L'attaque exploite les requรชtes SQL dynamiques, c'est-ร -dire des requรชtes gรฉnรฉrรฉes ร  l'exรฉcution ร  partir de paramรจtres transmis via un formulaire web ou une chaรฎne de requรชte URI.

Exemple d'injection SQL

Prenons l'exemple d'une application web simple avec un formulaire de connexion. Le code HTML du formulaire est prรฉsentรฉ ci-dessous.

<form action=โ€˜index.phpโ€™ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

ICI,

  • Le formulaire ci-dessus accepte l'adresse e-mail et le mot de passe, puis les soumet ร  un PHP fichier nommรฉ index.php.
  • Il offre la possibilitรฉ de stocker la session de connexion dans un cookie. Nous l'avons dรฉduit de la case ร  cocher ยซ Se souvenir de moi ยป. Il utilise la mรฉthode POST pour soumettre les donnรฉes. Cela signifie que les valeurs ne sont pas affichรฉes dans le URL.

Supposons que la requรชte cรดtรฉ serveur pour vรฉrifier l'identifiant de l'utilisateur soit la suivante.

SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);

ICI,

  • L'instruction ci-dessus utilise directement les valeurs du tableau $_POST[] sans les nettoyer.
  • Le mot de passe est hachรฉ ร  l'aide de l'algorithme MD5.

Nous allons illustrer une attaque par injection SQL en utilisant SQL Fiddle. Ouvrez le URL http://sqlfiddle.com/ dans votre navigateur Internet. Vous obtiendrez la fenรชtre suivante.

Remarque : vous devrez rรฉdiger les instructions SQL.

Vide SQL Fiddle Fenรชtre prรชte pour le schรฉma et la requรชte

ร‰tape 1) Saisissez ce code dans le volet de gauche.

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));
  
  
insert into users (email,password) values ('m@m.com',md5('abc'));

ร‰tape 2) Cliquez sur ยซ Gรฉnรฉrer le schรฉma ยป.

ร‰tape 3) Saisissez ce code dans le volet de droite.

select * from users;

ร‰tape 4) Cliquez sur ยซ Exรฉcuter SQL ยป. Le rรฉsultat suivant sโ€™affichera.

SQL Fiddle rรฉsultat affichant l'enregistrement de l'utilisateur unique renvoyรฉ

Supposons qu'un utilisateur fournisse admin@admin.sys et 1234 comme mot de passe. La requรชte exรฉcutรฉe sur la base de donnรฉes serait :

SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');

Le code ci-dessus peut รชtre exploitรฉ en commentant la partie relative au mot de passe et en ajoutant une condition qui sera toujours vraie. Supposons qu'un attaquant saisisse l'adresse รฉlectronique suivante.

xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]

xxx pour le mot de passe.

L'instruction dynamique gรฉnรฉrรฉe sera la suivante.

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');

ICI,

  • xxx@xxx.xxx se termine par une apostrophe qui complรจte la citation.
  • OR 1 = 1 LIMIT 1 est une condition qui sera toujours vraie et limitera les rรฉsultats renvoyรฉs ร  un seul enregistrement.
  • โ€” ' AND โ€ฆ est un commentaire SQL qui รฉlimine la partie mot de passe.

Copiez l'instruction SQL ci-dessus et collez-la dans le SQL Fiddle Exรฉcutez la zone de texte SQL comme indiquรฉ ci-dessous.

SQL Fiddle renvoyer l'enregistrement aprรจs l'exรฉcution de la condition injectรฉe

Activitรฉ de piratage : SQL injecte une application Web

Nous avons une application Web simple ร  http://www.techpanda.org/ Ce code est vulnรฉrable aux attaques par injection SQL ร  des fins de dรฉmonstration uniquement. Le code HTML du formulaire ci-dessus provient de la page de connexion. L'application assure une sรฉcuritรฉ de base, notamment en nettoyant le champ e-mail. Par consรฉquent, le code prรฉsentรฉ ci-dessus ne peut pas รชtre utilisรฉ pour contourner la connexion.

Pour contourner ce problรจme, nous utilisons plutรดt le champ du mot de passe. Le schรฉma ci-dessous illustre les รฉtapes ร  suivre.

Diagramme de flux des รฉtapes d'injection du champ mot de passe du formulaire de connexion

Supposons qu'un attaquant fournisse les donnรฉes d'entrรฉe suivantes.

  • ร‰tape 1 : Saisissez xxx@xxx.xxx comme adresse e-mail
  • ร‰tape 2 : Saisissez xxx') OU 1 = 1 โ€” ]

Formulaire de connexion avec la chaรฎne d'injection saisie dans le champ mot de passe

  • Cliquez sur le bouton Soumettre.
  • Vous serez dirigรฉ vers le tableau de bord.

La requรชte SQL gรฉnรฉrรฉe sera la suivante.

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');

Le diagramme ci-dessous illustre comment l'instruction est gรฉnรฉrรฉe.

Explication dรฉtaillรฉe du processus de gรฉnรฉration de l'instruction SQL injectรฉe

ICI,

  • Cette dรฉclaration prรฉsuppose intelligemment que le chiffrement MD5 est utilisรฉ.
  • Complรจte l'apostrophe et la parenthรจse fermante.
  • Ajoute une condition ร  l'รฉnoncรฉ qui sera toujours vraie.

En gรฉnรฉral, une attaque rรฉussie combine plusieurs techniques comme celles prรฉsentรฉes ci-dessus.

Autres types d'attaques par injection SQL

Les injections SQL peuvent causer des dommages bien plus importants que le simple contournement des algorithmes de connexion. Voici quelques exemples d'attaques :

  • Supprimer des donnรฉes
  • Mise ร  jour des donnรฉes
  • Insertion de donnรฉes
  • Exรฉcuter des commandes sur le serveur permettant de tรฉlรฉcharger et d'installer des programmes malveillants tels que des chevaux de Troie
  • Exportation de donnรฉes prรฉcieuses telles que les dรฉtails de la carte de crรฉdit, les e-mails et les mots de passe vers le serveur distant de l'attaquant
  • Rรฉcupรฉration des informations de connexion des utilisateurs, etc.
  • Injection SQL basรฉe sur des cookies
  • Injection SQL basรฉe sur les erreurs
  • Injection SQL aveugle

La liste ci-dessus n'est pas exhaustive ; elle vous donne simplement une idรฉe de ce que peut faire une injection SQL.

Outils d'automatisation pour l'injection SQL

Dans l'exemple ci-dessus, nous avons utilisรฉ des techniques d'attaque manuelles s'appuyant sur notre connaissance approfondie de SQL. Il existe des outils automatisรฉs permettant de rรฉaliser des attaques plus efficacement et dans les plus brefs dรฉlais. Ces outils comprennent :

Comment prรฉvenir les attaques par injection SQL

Une organisation peut adopter la stratรฉgie suivante pour se protรฉger contre les attaques par injection SQL.

  • Il ne faut jamais faire confiance aux donnรฉes saisies par l'utilisateur. โ€“ Il doit toujours รชtre nettoyรฉ avant d'รชtre utilisรฉ dans des instructions SQL dynamiques.
  • Procรฉdures stockรฉes โ€“ Ces รฉlรฉments peuvent encapsuler les instructions SQL et traiter toutes les entrรฉes comme des paramรจtres.
  • Dรฉclarations prรฉparรฉes Les requรชtes prรฉparรฉes fonctionnent en crรฉant d'abord l'instruction SQL, puis en traitant toutes les donnรฉes utilisateur soumises comme des paramรจtres. Cela n'a aucun impact sur la syntaxe de l'instruction SQL.
  • Expressions rรฉguliรจres โ€“ ces outils peuvent รชtre utilisรฉs pour dรฉtecter un code potentiellement dangereux et le supprimer avant l'exรฉcution des instructions SQL.
  • droits d'accรจs utilisateur ร  la connexion ร  la base de donnรฉes โ€“ seuls les droits dโ€™accรจs nรฉcessaires devraient รชtre accordรฉs aux comptes utilisรฉs pour se connecter ร  la base de donnรฉes. Cela peut contribuer ร  rรฉduire ce que les instructions SQL peuvent effectuer sur le serveur.
  • Messages d'erreur Ces messages ne doivent pas rรฉvรฉler d'informations sensibles ni l'emplacement prรฉcis de l'erreur. Des messages d'erreur simples et personnalisรฉs, tels que ยซ Dรฉsolรฉ, nous rencontrons actuellement des problรจmes techniques. L'รฉquipe technique a รฉtรฉ contactรฉe. Veuillez rรฉessayer plus tard. ยป, peuvent รชtre utilisรฉs ร  la place des instructions SQL ayant provoquรฉ l'erreur.

Activitรฉ de piratage : utilisez Havij pour l'injection SQL

Dans ce scรฉnario pratique, nous utilisons le programme Havij Advanced SQL Injection pour analyser un site web ร  la recherche de vulnรฉrabilitรฉs.

Remarque : Havij est un site web ancien et non mis ร  jour. Windows L'outil SQLMap, mentionnรฉ ci-dessus, est la norme open source actuelle.

Remarque : votre programme antivirus peut le signaler en raison de sa nature. Vous devriez lโ€™ajouter ร  la liste des exclusions ou suspendre votre antivirus. programme antivirus.

L'image ci-dessous montre la fenรชtre principale de Havij.

Fenรชtre principale de l'outil d'injection SQL Havij

L'outil mentionnรฉ ci-dessus peut รชtre utilisรฉ pour รฉvaluer la vulnรฉrabilitรฉ d'un site web ou d'une application.

FAQ

Uniquement avec l'autorisation รฉcrite du propriรฉtaire du site. Tester une application qui ne vous appartient pas est illรฉgal, notamment en vertu de la loi amรฉricaine sur la fraude et les abus informatiques (Computer Fraud and Abuse Act). Les pรฉrimรจtres des programmes de primes aux bogues dรฉfinissent ce qui est autorisรฉ.

Oui. Dans le Top 10 de l'OWASP 2025, l'injection SQL est classรฉe A05, et les tests rรฉvรจlent encore sa prรฉsence dans la quasi-totalitรฉ des applications. Avec des milliers de nouvelles vulnรฉrabilitรฉs d'injection SQL (CVE) chaque annรฉe, elle demeure un risque majeur sur le web.

MD5 est un algorithme de hachage rapide, et non de chiffrement. Les attaquants peuvent facilement le casser grรขce aux tables arc-en-ciel et aux GPU. Il est donc recommandรฉ d'utiliser un algorithme lent et salรฉ, comme bcrypt ou Argon2, pour la protection des mots de passe.

Toute base de donnรฉes interrogรฉe via du SQL construit dynamiquement โ€” MySQL, PostgreSQL, Microsoft SQL Server, Oracle et SQLiteLe problรจme rรฉside dans la maniรจre dont l'application concatรจne les donnรฉes saisies par l'utilisateur dans les requรชtes, et non dans le moteur de base de donnรฉes.

Les pare-feu et les scanners basรฉs sur l'IA apprennent les schรฉmas de trafic normaux, puis signalent en temps rรฉel les entrรฉes anormales telles que les conditions ou les commentaires injectรฉs. Les modรจles d'apprentissage automatique dรฉtectent les charges utiles obfusquรฉes que les signatures fixes ne repรจrent pas.

Les assistants IA comme Copilote GitHub Ces outils peuvent suggรฉrer des requรชtes paramรฉtrรฉes et une validation des entrรฉes, mais ils reproduisent รฉgalement des schรฉmas non sรฉcurisรฉs. Considรฉrez chaque suggestion comme une รฉbauche et soumettez-la ร  un analyseur de sรฉcuritรฉ et ร  une vรฉrification.

L'injection SQL cible la base de donnรฉes en injectant du code SQL dans les requรชtes cรดtรฉ serveur. Le cross-site scripting (XSS) cible les autres utilisateurs en injectant des scripts qui s'exรฉcutent dans leur navigateur. L'une expose des donnรฉes ; l'autre dรฉtourne les sessions.

Un ORM (outil de mappage objet-relationnel) construit les requรชtes ร  partir d'objets de code paramรฉtrรฉs par dรฉfaut, empรชchant ainsi la plupart des injections SQL. Il n'est cependant pas infaillible : les requรชtes brutes et les mรฉthodes non sรฉcurisรฉes prรฉsentent toujours des risques de fuite, la validation reste donc essentielle.

Rรฉsumez cet article avec :