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 !