Web Security Academy

SQL injection - Lab : SQL injection UNION attack, retrieving data from other tables

Objectif :

  • Réussir à récupérer tous les identifiants et mots de passe des utilisateurs du site pour ensuite se connecter en tant qu'administrateur, sachant que la table des utilisateurs dans la base de données s'appelle users et elle contient deux colonnes : username et password.

Solution :

On lance le lab et on se trouve dans un site de commerce avec des articles vendus détaillés.

On peut filtrer l'affichage des produits selon leurs catégories :

Pour traiter ce filtrage, une requête GET est envoyée au serveur avec comme paramètre la catégorie choisie. Dans l'image ci-dessous, un exemple est représenté avec la catégorie "Gifts" :

Les produits vendus sont stockés dans une base de données. On va essayer de modifier la requête SQL traitée par le serveur en utilisant le paramètre GET.

Dans un premier temps, on va utiliser l'opérateur UNION pour retrouver le nombre de colonnes retourné par le serveur. On trouve deux colonnes (le payload Gifts' UNION SELECT NULL,NULL-- ne retourne pas d'erreurs).

Ensuite, à la place des valeurs NULL, on écrit une chaîne de caractères ( par exemple la chaîne "test" ) pour vérifier leur affichage dans la page avec le payload suivant : Gifts' UNION SELECT 'test', 'test' --. Effectivement, l'affichage s'effectue correctement :

Il suffit finalement d'afficher toute la table users : Gifts' UNION SELECT username, password FROM users-- :

On retrouve le nom de compte et le mot de passe de l'administrateur. On se connecte sur son compte et le lab est désormais validé !