Web Security Academy

SQL injection - Lab : SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

Objectif :

  • Afficher les détails de tous les produits du site, de n'importe quelle catégorie, publiés et non publiés.

Solution :

On lance le lab et on se trouve dans un site de commerce.

Plusieurs articles sont affichés :

On peut affiner l'affichage avec des filtres :

Dans l'énoncé, la syntaxe de la requête SQL traitée par le serveur pour afficher les produits demandés est donnée. Par exemple, si on sélectionne le filtre "Gifts", la requête sera de la forme :

SELECT * FROM products WHERE category = 'Gifts' AND released = 1

Lorsqu'on sélectionne un filtre, C'est requête GET qui est envoyée au serveur avec le paramètre "category" :

On va effectuer notre injection SQL par cette entrée.

On va essayer ce payload : Gifts' or 1=1--

La requête entière sera : SELECT * FROM products WHERE category = 'Gifts' or 1=1-- AND released = 1

Les deux tirets forment le commencement d'un commentaire. Ils sont utilisés pour ne plus prendre en compte l'opération AND.

L'ajout de l'opérateur OR avec "1=1" permet d'enlever la restriction sur la catégorie à afficher.

On soumet la requête. Le serveur nous renvoie tous les articles de toutes les catégories, publiés et non publiés.

Le lab est à présent validé.