Archives Wild Code School
Sécurité Web

2.1 [Basics] Injections SQL : découvrir

Quête 3 sur 8

Pars à la conquête des injections SQL, un type d'attaques régulièrement classé en tête des risques pour la sécurité d'une application web.

Objectifs

  • Connaître le principe général d'une injection SQL
  • Connaître l'impact d'une attaque par injection SQL sur un site web
  • Savoir mener une attaque par SQLi basique

Chapitre 1

Source : Photo by Milos Darmanovic on Unsplash

Alors que tu es en vacances chez ta mamie, amatrice de tricot et consultante en cyber-sécurité à ses heures perdues, tu cherches de quoi te faire une tartine banane-beurre-chocolat-confiture pour le goûter (oui, le grand air et l'oisiveté, ça creuse). Tu es en route vers la cuisine lorsqu'une lumière électrique attire ton attention dans le couloir.

Ta grand-mère semble avoir oublié d'éteindre son ordinateur avant d'aller chercher ses nouveaux plants de gardénias à la jardinerie. Étrange ! Curieux·se, tu entres dans le bureau.

Le site haveibeenpwned.com est ouvert dans le navigateur.

Source : https://www.troyhunt.com/introducing-have-i-been-pwned/

Intrigué·e, tu tapes ton adresse e-mail dans le champ qui t'y invite. Et là, c'est le drame : tu découvres que tu t'es fait·e pwned cinq fois ! Bien que tu ne saches pas vraiment ce que se faire pwned implique, la panique te saisit (de plus, rappelons que tu as toujours l'estomac vide).

Mais que veut dire pwned, au juste ? Et quel est cet étrange logo ?

Tandis que tu tournicotes dans le bureau, tu tombes sur un comics posé près du clavier.

– Tu ne pensais quand même pas que j'avais vraiment oublié d'éteindre mon ordinateur en partant, ma petite caille digitale ? résonne une voix dans ton dos.

Alors que tu ouvres la bouche pour répondre, une quête consacrée aux injections SQL s'allume sur l'écran.

Pour comprendre ce que te veut ta mamie, lance-toi sans plus tarder !

↗
OPTIONNEL - Exploits of a Mom

Un comics devenu iconique.

imgs.xkcd.com
↗
OPTIONNEL - Wikipedia - Pwn

Pour enfin savoir ce que pwned veut dire.

en.wikipedia.org

Qu'est-ce qu'une injection SQL ?

Principe général

Une injection SQL (SQLi de son petit nom) permet d'attaquer un site web en visant la base de données de celui-ci.

Pour mener une attaque de ce type, un·e pirate a besoin de deux éléments :

  1. Le site victime doit autoriser l'entrée de données à partir d'une source potentiellement non fiable (par exemple, un champ de formulaire que l'utilisateur remplit – mettons, un mot de passe).
  2. Les données entrées par l'utilisateur sont utilisées pour construire une requête SQL dynamiquement (par exemple, le mot de passe entré par l'utilisateur via le formulaire est stocké dans une variable password, et la requête dynamiquement construite est "SELECT * FROM Users WHERE userPassword = " + password).

Concrètement, un·e pirate va repérer un input vulnérable sur un site web (par exemple, un champ de formulaire demandant un mot de passe) et y écrire du code malveillant au lieu de l'information demandée (dans notre exemple, le mot de passe).

Cette vidéo explique en deux minutes le fonctionnement général d'une SQLi.

Pour observer une SQLi en action, cours voir cette animation interactive.

Dans les ressources, je remarque qu'un obscur ' OR 1=1 -- est souvent donné en exemple... Comment ça marche ? Patience : c'est ce que tu vas pouvoir creuser dans l'étape suivante !

Quels dommages une attaque par SQLi peut-elle causer ? Pour le savoir, tu peux consulter les parties « Overview » et « Description » de cet article de l'OWASP (l'organisation mondiale de référence en termes de sécurité web).

↗
OPTIONNEL - OWASP

Dommages causés par une attaque SQLi.

owasp.org
↗
ESSENTIEL - Hacksplaining - SQL INJECTION

Une animation interactive pour voir une SQLi en action.

hacksplaining.com
↗
SQL Injection - Simply Explained

Une vidéo pour découvrir le concept des SQLi en moins de deux minutes.

youtube.com

Exemples de SQLi basiques

Voici venu le moment de revenir sur cette histoire de ' OR 1=1 -- et autres joies des SQLi. ' OR 1=1 --, ainsi que beaucoup d'autres bouts de code malveillants, sont ce qu'on appelle des vecteurs (ou payloads, en anglais). C'est ce qu'un·e pirate va essayer de transmettre au site victime en tant qu’input pour réaliser une attaque SQLi.

Avant de partir à l'aventure, sache que si jamais tu as besoin de te rafraîchir la mémoire en termes de SQL, cette ressource t'aidera à t'y retrouver rapidement (n'hésite pas à aller directement consulter les exemples interactifs, qui valent souvent mieux que mille explications verbeuses).

NB : les ressources utilisent des exemples en PHP, mais ne te braque pas : ils sont compréhensibles même si ce n'est pas ta technologie de prédilection.

Ensuite, vas voir cette page, qui parle d'une attaque SQLi utilisant un payload très simple (arrête-toi avant la partie « Mitigation using Prepared Statements (Parameterized Queries) »).

Maintenant, revenons au cas ' OR 1=1 -- ! Il s'agit d'un payload qu'on retrouve très souvent lorsqu'on parle de SQLi. Cet article donne une explication de son usage. Si la logique de l'attaque te pose des difficultés et que tu as besoin de plus d'explications, consulte cette réponse donnée sur StackOverflow, ainsi que celle-ci.

↗
StackOverflow

Une (autre) réponse pour éclaircir (encore) la logique derrière le payload ' OR 1=1 --.

stackoverflow.com
↗
StackOverflow

Une réponse pour éclaircir la logique derrière le payload ' OR 1=1 --.

stackoverflow.com
↗
Graceful Security - SQL Injection: Basics and Defence

Exemple d'une SQLi avec l'archi-classique payload ' OR 1=1 --.

akimbocore.com
↗
ESSENTIEL - GeeksForGeeks - Basic SQL Injection and Mitigation with Example

Exemple d'une SQLi avec un payload très simple.

geeksforgeeks.org
↗
OPTIONNEL - w3schools - SQL Tutorial

Pour te souvenir du SQL en un clin d'œil.

w3schools.com

Réponses à tes questions existentielles

Avoue, tu n'y tiens plus : les SQLi, c'est bien joli, mais que signifie le logo du site haveibeenpwned.com ? Et quel est le sens du comics que tu as trouvé près du clavier ?

Tu as sûrement une petite idée des réponses maintenant, mais tu peux consulter les ressources pour en avoir le cœur net !

↗
327:_Exploits_of_a_Mom

Tout sur le comics Exploits of a Mom.

explainxkcd.com
↗
Have I Been Pwned?

Lis la partie « Branding » pour connaître la signification du logo de HIBP.

en.wikipedia.org

Challenge

Break it until you make it !

Frotte-toi à ce challenge pour voir si tu as compris les bases d'une SQLi ! Pour ce faire, rends-toi ici, inscris-toi et résous les tâches 1 à 9.

  1. Poste une capture d'écran de tes tâches résolues.
  2. Bonus regarde également la tâche 10, elle t'aidera pour la prochaine étape : prévenir les attaques SQLi ;)

Critères de validation

  • La capture d'écran montre les tâches 1 à 9 résolues.

Ressources partagées sur cette quête