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.

Injection SQL

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

L'injection SQL fonctionne

ร‰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

L'injection SQL fonctionne

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 = 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 SQL FiddleExรฉcutez la zone de texte SQL comme indiquรฉ ci-dessous

L'injection SQL fonctionne

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

SQL injecter une application Web

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 โ€” ]

SQL injecter une application Web

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

SQL injecter une application Web

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

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

Utiliser Havij pour l'injection SQL

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.

Rรฉsumez cet article avec :