Web Security Academy

Cross-site scripting - Lab : Reflected XSS with angle brackets and double quotes encoded and single quotes escaped

Objectif :

  • Invoquer la fonction alert() ( en Javascript ) en exécutant du script dans site web.

Solution :

Tout d'abord on lance le lab et on se retrouve dans un blog avec une barre de recherche disponible.

Lorsqu'on recherche un mot, il est directement affiché sur la page, comme dans l'image qui suit avec le mot "bleu" :

D'un point de vue du code source :

On va donc tenter une XSS réfléchie.

Essayons d'écrire "<img ' '>" pour savoir comment cet input sera filtré :

On regarde le code source :

On s'aperçoit de plusieurs choses:

  • Les doubles guillemets sont encodés.

  • Les caractères "<" et ">" sont aussi encodés.

  • Le simple guillemet a été précédé par un "\" dans la string. Ceci est un moyen de protection permettant de transformer le simple guillemet en un caractère neutre. Dans ce cas-là, ce n'est plus un délimiteur de chaîne de caractères.

On est donc limité dans la construction du payload.

Cependant un caractère intéressant n'est pas filtré : l'antislash.

On va donc précéder dans notre payload les simples guillemets par des antislashs pour que celui qui est ajouté automatiquement n'est plus d'effet. L'antislash que l'on rajoute rend neutre celui rajouté par le serveur.

Ce qui donne par exemple : \';alert(1)//

On soumet ce payload dans la barre de recherche et une fenêtre pop-up apparaît :

Le script s'est exécuté et le lab est désormais validé !