Web Security Academy

Cross-site scripting - Lab: Reflected XSS into HTML context with all tags blocked except custom ones

Objectif :

  • Invoquer la fonction alert() ( en Javascript ) chez une victime en injectant du script dans le site web, en contournant le WAF mis en place.

Solution :

En lançant le lab, on arrive sur un blog avec plusieurs posts publiés.

Une barre de recherche est mis à disposition.

Lorsqu'on recherche un mot, il apparaît de façon directe dans le body de la réponse comme dans l'exemple qui suit avec la recherche du mot 'livre" :

On va donc essayer d'effectuer une attaque du type XSS réfléchi ( ou non permanent ) dans le paramètre search de la requête GET.

Si on essaye d'injecter dans la barre de recherche un tag de type "img", on s'aperçoit dans la réponse du serveur qu'il est filtré.

En effet dans l'énoncé du lab, il est expliqué que tous les tags HTML sont filtrés sauf ceux qui sont personnalisés.

On va construire un payload à partir de ces informations.

Ce qui donne :

<xss id=x onfocus=alert(document.cookie) tabindex=1>#x

Le code Javascript est exécuté avec l'événement onfocus.

Il suffit maintenant dans le lab de cliquer "Go to exploit server" pour simuler l'envoi d'une réponse depuis le serveur à la victime en construisant un lien vers notre XSS depuis le site web du lab :

Le lab est désormais validé !