Injection SQL

Vidéo sur Youtube Le play Youtube

Nous allons tester une injection SQL dans notre application.

⛔️ Il est interdit d'utiliser cette méthode dans un site internet. Cette action est fortement puni par la loi ! 🚔👮‍♂️

Comment utiliser l'injection SQL ?

Il est possible d'utiliser l'injection SQL de différente façon. Nous allons personnellement utiliser le texte suivant dans le champs de l'identifiant.

Bob'-- 
Une attaque par injection SQL

Comme vous pouvez le constater, je n'ai pas indiqué de mot de passe.

Quel va être le résultat ?

L'injection SQL a fonctionné et nous avons accès à tous les utilisateurs

Nous avons réussi à nous connecter 😳 ! Sans mot de passe 🙀 !

Mais pourquoi ?

Expliquer la faille

Dans notre code, dans notre fichier sql.php, il y a les lignes suivantes.

...
$user = $_POST['username'] ?? null;
$pass = $_POST['password'] ?? null;
...
$sql = "SELECT * FROM utilisateurs WHERE user = '$user' AND password = '$pass'";
...

PHP utilise une requête SQL. Si je remplace les variable par les informations transmises que ce passe-t-il ?

Sans l'injection SQL

SELECT * FROM utilisateurs WHERE user = 'Bob' AND password = 'hello'

La requête est correcte et ne présente pas de problèmes.

Avec l'injection SQL

SELECT * FROM utilisateurs WHERE user = 'Bob'-- ' AND password = ''

Il existe un problème avec cette requête. Dans MySQL, l'utilisation de l'expression -- transforme le reste de la ligne en commentaire, qui ne sera donc pas exécuté par le système.

Par conséquent, le mot de passe n'est pas vérifié car il est commenté.

Puisque le mot de passe n'est pas vérifié, il suffit de connaître le nom d'un identifiant pour se connecter. Le mot de passe ne sera pas nécessaire ce qui est problématique.

Dans la prochaine leçon, nous verrons comment corriger cette faille.