Niveau "High"
Dernière mise à jour
Dernière mise à jour
Le niveau "High" permet de résoudre une opération mathématique grâce à un appel JSONP :
La méthode de callback se nomme solveSum()
:
Et la réponse permet de résoudre l'opération :
Dans un premier temps, j'ai intercepté la requête du callback afin d'y injecter un bout de JS :
Cela semble fonctionner :
Le problème est qu'il n'est pas possible de soumettre notre payload à la victime car le Content-Type
de la réponse est de type application/json
et donc non exploitable en l'état :
Etant bloqué mais voulant aller plus loin, je suis allé voir ce que d'autres personnes avaient réussi à faire. Je suis tombé sur ce writeup qui suit la démarche suivante :
Analyser les sources du challenge permet d'identifier un endpoint de type POST
autorisant d'inclure une donnée dans le page csp :
La requête suivante devient donc possible :
Attention à ne pas oublier le Content-Type pour la requête POST
Et en effet, le script est bien exécuté :
Le problème ici est que pour connaitre ce endpoint en POST
il fallait regarder les sources (ou le deviner). En général je préfère ne regarder les sources qu'après avoir terminé le challenge.
Bien que l'auteur du writeup n'indique pas comment, il faut maintenant trouver un vecteur d'attaque contre la victime. J'utilise à nouveau l'exploitation de la faille CSRF, présente également sur ce niveau, en hébergeant le script malicieux suivant sur mon serveur :
Attention à l'encodage de certains caractères spéciaux au niveau de la valeur à envoyer
Lorsque la victime (authentifiée) visite ma page malicieuse, je subtilise son jeton de session :