Tutoriel d'injection SQL : comment apprendre avec un exemple
Quโest-ce quโune injection SQL ?
L'injection SQL est une attaque qui empoisonne les instructions SQL dynamiques pour commenter certaines parties de l'instruction ou ajouter une condition qui sera toujours vraie. Il profite des dรฉfauts de conception des applications Web mal conรงues pour exploiter les instructions SQL afin d'exรฉcuter du code SQL malveillant.
Les donnรฉes sont lโun des composants les plus vitaux des systรจmes dโinformation. Les applications Web basรฉes sur des bases de donnรฉes sont utilisรฉes par l'organisation pour obtenir des donnรฉes auprรจs des clients. SQL est l'acronyme de Structured Query Language. Il est utilisรฉ pour rรฉcupรฉrer et manipuler des donnรฉes dans la base de donnรฉes.
Comment fonctionne lโattaque par injection SQL ?
Les types d'attaques pouvant รชtre effectuรฉes ร l'aide de l'injection SQL varient en fonction du type de moteur de base de donnรฉes. L'attaque fonctionne sur des instructions SQL dynamiques. Une instruction dynamique est une instruction gรฉnรฉrรฉe au moment de l'exรฉcution ร l'aide du mot de passe des paramรจtres d'un formulaire Web ou d'une chaรฎne de requรชte URI.
Exemple d'injection SQL
Considรฉrons une simple application Web avec un formulaire de connexion. Le code du formulaire HTML 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 a la possibilitรฉ de stocker la session de connexion dans un cookie. Nous l'avons dรฉduit de la case ร cocher Remember_me. Il utilise la mรฉthode post pour soumettre les donnรฉes. Cela signifie que les valeurs ne sont pas affichรฉes dans l'URL.
Supposons que l'instruction du backend pour vรฉrifier l'ID utilisateur soit la suivante
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
ICI,
- L'instruction ci-dessus utilise les valeurs de
$_POST[]tableau directement sans les dรฉsinfecter. - Le mot de passe est cryptรฉ ร l'aide de l'algorithme MD5.
Nous illustrerons l'attaque par injection SQL ร l'aide de sqlfiddle. Ouvrez l'URL http://sqlfiddle.com/ dans votre navigateur Internet. Vous obtiendrez la fenรชtre suivante.
Remarque : vous devrez รฉcrire les instructions SQL
รtape 1) Entrez 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 Crรฉer un schรฉma
รtape 3) Entrez ce code dans le volet de droite
select * from users;
รtape 4) Cliquez sur Exรฉcuter SQL. Vous verrez le rรฉsultat suivant
Supposons que l'utilisateur fournisse admin@admin.sys et 1234 comme mot de passe. L'instruction ร exรฉcuter 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 mot de passe et en ajoutant une condition qui sera toujours vraie. Supposons qu'un attaquant fournisse l'entrรฉe suivante dans le champ de l'adresse e-mail.
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 un guillemet simple qui complรจte la chaรฎne de guillemets
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 SQL FiddleExรฉ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/ qui est vulnรฉrable aux attaques par injection SQL ร des fins de dรฉmonstration uniquement. Le code du formulaire HTML ci-dessus provient de la page de connexion. L'application offre une sรฉcuritรฉ de base telle que la dรฉsinfection du champ de courrier รฉlectronique. Cela signifie que notre code ci-dessus ne peut pas รชtre utilisรฉ pour contourner la connexion.
Pour contourner cela, on peut plutรดt exploiter le champ mot de passe. Le schรฉma ci-dessous montre les รฉtapes que vous devez suivre
Supposons qu'un attaquant fournisse l'entrรฉe suivante :
- ร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
L'instruction 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 que la dรฉclaration a รฉtรฉ gรฉnรฉrรฉe.
ICI,
- La dรฉclaration suppose intelligemment que le cryptage md5 est utilisรฉ
- Complรจte le guillemet simple et la parenthรจse fermante
- Ajoute une condition ร l'instruction qui sera toujours vraie
En gรฉnรฉral, une attaque par injection SQL rรฉussie utilise un certain nombre de techniques diffรฉrentes, telles que celles illustrรฉes ci-dessus, pour mener ร bien une attaque.
Autres types d'attaques par injection SQL
Les injections SQL peuvent faire plus de mal que simplement transmettre les algorithmes de connexion. Certaines des attaques incluent
- 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
- Obtenir les informations de connexion de l'utilisateur, 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 ; cela vous donne juste une idรฉe de ce qu'est l'injection SQL
Outils d'automatisation pour l'injection SQL
Dans l'exemple ci-dessus, nous avons utilisรฉ des techniques d'attaque manuelle basรฉes sur notre vaste connaissance de SQL. Il existe des outils automatisรฉs qui peuvent vous aider ร rรฉaliser des attaques plus efficacement et dans les plus brefs dรฉlais. Ces outils comprennent
- Carte SQL โ http://sqlmap.org/
- Injection JSQL โ https://tools.kali.org/vulnerability-analysis/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 entrรฉes des utilisateurs โ Il doit toujours รชtre nettoyรฉ avant d'รชtre utilisรฉ dans des instructions SQL dynamiques.
- Procรฉdures stockรฉes - ceux-ci peuvent encapsuler les instructions SQL et traiter toutes les entrรฉes comme des paramรจtres.
- Dรฉclarations prรฉparรฉes โ les instructions prรฉparรฉes pour fonctionner 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 effet sur la syntaxe de l'instruction SQL.
- Expressions rรฉguliรจres - ceux-ci peuvent รชtre utilisรฉs pour dรฉtecter le code potentiellement dangereux et le supprimer avant d'exรฉcuter les instructions SQL.
- Droits dโaccรจs des utilisateurs de connexion ร la base de donnรฉes โ seuls les droits d'accรจs nรฉcessaires doivent รช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 - ceux-ci ne doivent pas rรฉvรฉler dโinformations sensibles ni lโendroit exact oรน une erreur sโest produite. Des messages d'erreur personnalisรฉs simples tels que ยซ Dรฉsolรฉ, nous rencontrons des erreurs techniques. L'รฉquipe technique a รฉtรฉ contactรฉe. Veuillez rรฉessayer plus tard ยป peut รชtre utilisรฉ au lieu d'afficher les instructions SQL ร l'origine de l'erreur.
Activitรฉ de piratage : utilisez Havij pour l'injection SQL
Dans ce scรฉnario pratique, nous allons utiliser le programme Havij Advanced SQL Injection pour analyser un site Web ร la recherche de vulnรฉrabilitรฉs.
Remarque: votre programme antivirus peut le signaler en raison de sa nature. Vous devez l'ajouter ร la liste des exclusions ou suspendre votre logiciel antivirus.
L'image ci-dessous montre la fenรชtre principale de Havij
L'outil ci-dessus peut รชtre utilisรฉ pour รฉvaluer la vulnรฉrabilitรฉ d'un site/d'une application Web.
Rรฉsumรฉ
- L'injection SQL est un type d'attaque qui exploite de mauvaises instructions SQL
- L'injection SQL peut รชtre utilisรฉe pour contourner les algorithmes de connexion, rรฉcupรฉrer, insรฉrer, mettre ร jour et supprimer des donnรฉes.
- Les outils d'injection SQL incluent SQLMap, SQLPing et SQLSmack, etc.
- Une bonne politique de sรฉcuritรฉ lors de lโรฉcriture dโune instruction SQL peut aider ร rรฉduire les attaques par injection SQL.








