Nous continuons cet après-midi sur des vulnérabilités ultra classiques, puisque nous allons parler de la plus courante de nos jours, l'injection SQL.
L'écrasante majorité des applications ont besoin de manipuler des donnés, et il est très courant que l'on ait besoin que cette donnée soit persistante. Pour ça on se repose en général sur un ou plusieurs systèmes de gestion de base données (SGBD, ou DBMS en anglais). On a donc besoin de communiquer les donnés de l'application au SGBD, et c'est là que les choses se gâtent.
Il existe une multitude de langages qui peuvent être utilisés pour communiquer avec des bases de données, mais SQL est encore aujourd'hui le plus commun. La logique du langage est assez simple, et est facile à transposer d'un SGBD à l'autre.
Pas d'inquiétude si vous n'avez jamais fait de SQL auparavant, vous apprendrez sur le tas. Si vous en avez, déjà faitm tant mieux pour vous, profitez du temps gagné pour rattrapper ce que vous n'avez pas eu le temps de faire.
Ce premier exercice a pour objectif de vous familiariser avec la logique derrière une injection SQL.
Pour cet exercice, rendez vous sur la plateforme suivante:
Votre objectif principal pour cet exercice va être de récupérer les mots de passe des utilisateurs.
Suivez la démonstration, puis à vous de jouer pour trouver le mot de passe de l'utilisateur Oursin.
Maintenant que vous vous êtes familiarisés avec le principe de l'injection SQL, on va pouvoir mettre ça en pratique.
A vous de résoudre cette épreuve.
Voici quelques questions pour vous guider:
- quelle entrée utilisatgeur est vulnérable ?
- imaginez à quoi ressemble la requête, comment peut-on l'injecter tout en la rendant valide ?
Retournez sur le challenge 00, y a-t-il d'autres tables dans la base de données ? Que contiennent-elles ?
- Combien de champs la requête contient-elle ?
- Quel est le type de SGBD utilisé ?
- Comment récupérer la liste des tables ?
A vous d'affronter cette épreuve maintenant.
- Est-il possible d'injecter le champ de connection ?
- Quels autres champs d'entrée utilisateur sont présents ?
Vous allez affronter cette épreuve. Plus d'aide à présent, vous êtes grands maintenant.
Enfin vous aurez cette épreuve à résoudre.
Pour cette épreuve vous aurez besoin d'écrire un script. Pour ceux d'entre vous qui n'ont pas d'idées de langage, prenez Python, vous trouverez plus facilement des ressources utiles. Ne restez pas bloqués sur des soucis liés au langage, ce n'est pas une piscine Python, n'ayez pas peur de poser des questions.
Quelques questions pour vous guider:
- Quel est le problème ? Qu'est-ce qui fait que ce challenge est différent des précédents ?
- Pouvez vous trouver la longueur de ce que vous cherchez ? Ça aiderait pas mal déjà.
- Quel jeu de caractères pouvez vous logiquement utiliser ?
Faites nous de retours sur ce que vous avez pensé de la piscine :D