Web Security Academy

Cross-site scripting - Lab : DOM XSS using web messages

Objectif :

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

On regarde le code source et du code Javascript nous interpelle :

L'objet window attend de recevoir des données ( par la fonction postMessage() ) et ensuite les affiche avec l'utilisation de la propriété innerHTML de l'élément ads.

On peut noter qu'aucune vérification n'est faite par rapport à l'origine du message qui va être reçu.

On sait que l'on peut exécuter du script à partir du DOM avec la propriété innerHTML.

Une fonctionnalité du lab permet de simuler l'envoi de code à une victime qu'elle va exécuter.

On choisi de lui envoyer cela:

<iframe src="https://ac351f381e9bff63807d2078006b0025.web-security-academy.net/" onload="this.contentWindow.postMessage('<img src=1 onerror=alert(document.cookie)>','*')">

On crée une iframe avec comme source le site vulnérable en exécutant du code Javascript grâce à l'événement HTML onload.

On envoie le payload à la victime et le lab est validé (on peut exécuter le payload nous-même pour s'assurer qu'il fonctionne et on s'aperçoit bien qu'une fenêtre alert() s'affiche).

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