Web Security Academy

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

Objectif :

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

Solution :

On démarre de lab et on se retrouve dans un blog avec une barre de recherche disponible :

Lorsqu'on effectue une recherche, c'est une requête GET qui est envoyée au serveur avec comme seul paramètre le mot recherché, comme on peut le voir dans l'image suivante avec le mot "rouge" :

On regarde maintenant le code source et un bout de code Javascript nous intéresse :

On constate que fonction trackSearch prend en paramètre le mot recherché et qu'il l'utilise dans la fonction document.write.

Dans notre contexte, la fonction document.write est ce qu'on appelle un sink : c'est par celle-là qu'on l'on va exécuter le script injecté.

Sachant que l'on peut inclure des balises <script> dans l'argument cette fonction, on va essayer d'injecter du code Javascript depuis le paramètre query tout en préservant une syntaxe correcte.

On peut écrire par exemple : "><script>alert(1)</script><img src=".

On soumet ce payload et une fenêtre pop-up apparaît :

Le script injecté s'est exécuté et le lab est désormais résolu !