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.

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.
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.
ร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.
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 = 1LIMIT 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.
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.
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 โ ]
- 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.
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 :
- Carte SQL โ http://sqlmap.org/
- Injection jSQL โ https://www.kali.org/tools/jsql/
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.
L'outil mentionnรฉ ci-dessus peut รชtre utilisรฉ pour รฉvaluer la vulnรฉrabilitรฉ d'un site web ou d'une application.








