Web Security Academy

Cross-site scripting - Lab : DOM XSS in innerHTML sink using source location.search

Objectif :

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

Solution :

On lance le lab et on se retrouve dans un blog avec une barre de recherche à disposition.

Lorsqu'on recherche un mot ou une phrase, c'est une requête GET qui est envoyée au serveur avec le paramètre "search" qui stocke la chaîne de caractères recherchée comme le montrent les images suivantes, en prenant comme exemple le mot "rouge" :

On examine le code source et une partie semble intéressante :

On apprend que notre input est utilisé dans la propriété innerHTML d'un élément. Cette propriété va jouer le rôle de sink pour effectuer notre DOM XSS.

En effet, innerHTML peut prendre en charge plusieurs types de balises pouvant être utilisées pour exécuter du script grâce aux événements HTML.

On peut par exemple essayer d'injecter le payload suivant dans la barre de recherche : <img src=1 onerror=alert(1)>

On le soumet au serveur et une fenêtre pop-up surgit :

Le DOM de la page a été modifié et le script a bien été exécuté.

Le lab est désormais résolu !