Web Security Academy

Cross-site scripting - Lab : DOM XSS using web messages and a JavaScript URL

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.

On consulte le code source et on constate du code Javascript écrit de façon directe :

La page attend de recevoir des données ( par la fonction postMessage() ) pour ensuite les traiter.

Il est prévu de recevoir une URL pour ensuite y accéder.

Pour vérifier cela, le script contrôle la présence des chaînes de caractères "http:" ou "https:" dans les données reçus.

La redirection vers l'URL s'effectue avec la modification de la propriété location.href.

On sait qu'avec l'attribut href, on peut exécuter du code Javascript et dans notre contexte, on décide de sa valeur.

Il suffit d'envoyer javascript:alert(\'http:\'+document.cookie) en tant que donnée pour que la fonction alert() se lance.

Une fonctionnalité du lab permet de simuler l'exécution de code HTML chez une victime.

On va lui envoyer le payload suivant :

<iframe src="https://ac911fa41ff36b6881b616e6003100c2.web-security-academy.net/" onload="this.contentWindow.postMessage('javascript:alert(\'http:\'+document.cookie)','*')">

Ici, on crée une iframe ayant comme source le site vulnérable en exécutant du code Javascript grâce à l'événement onload.

On lui envoie et le lab se valide !

On peut tester ce payload localement pour remarquer qu'une fenêtre pop-pup s'ouvre bien.