Web Security Academy

SQL injection - Lab : SQL injection UNION attack, determining the number of columns returned by the query

Objectif :

  • Déterminer le nombre de colonnes retourné par la requête SQL lorsque qu'on utilise le filtre d'affichage présent dans le site.

Solution :

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

Plusieurs produits sont affichés :

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

Lorsqu'on en sélectionne une, une requête GET est envoyée au serveur avec comme paramètre la catégorie choisie :

Les produits vendus dans le site sont stockés dans une base de données. Pour afficher ceux correspondant au filtrage choisi, c'est une requête SQL qui est envoyée au serveur.

On va essayer de la modifier ( en utilisant le paramètre GET ) pour connaitre le nombre de colonne retourné.

On va utiliser l'opérateur UNION. Pour tester la présence d'une seule colonne, on peut écrire dans le paramètre GET : Gifts' UNION SELECT NULL--.

On soumet la requête au serveur et un message d'erreur apparaît :

Il y a sans doute plus d'une colonne. On teste deux colonnes et on retrouve toujours le même message d'erreur.

Au bout de trois, le serveur nous retourne la page HTML de base :

Par l'absence d'erreur, on sait que la requête SQL qui a été envoyée était juste syntaxiquement. Il y a donc trois colonnes qui sont renvoyées par le serveur. le lab est désormais validé.