
Scanner DOM XSS pour les applications monopages
DOMDig est un scanner DOM XSS qui s'exécute dans le navigateur Chromium et peut analyser récursivement les applications monopages (SPA).
Contrairement aux autres scanners, DOMDig peut explorer n'importe quelle application web (y compris Gmail) en suivant les modifications du DOM et les requêtes XHR/fetch/websocket, et peut simuler une interaction utilisateur réelle en déclenchant des événements. Pendant ce processus, des charges utiles XSS sont placées dans les champs de saisie et leur exécution est suivie afin de trouver les points d'injection et les modifications d'URL associées.
Il est basé sur htcrawl, une bibliothèque Node suffisamment puissante pour explorer facilement un compte Gmail.
git clone https://github.com/fcavallarin/domdig.git
cd domdig && npm i && cd ..
node domdig/domdig.js
node domdig.js -c 'foo=bar' -p http:127.0.0.1:8080 https://fcvl.net/htcap/scanme/domxss.php
DOMDig peut effectuer trois vérifications différentes :
La vérification DOM XSS peut être configurée avec différents modes, permettant différents comportements. Par défaut, tous sont activés.
Les modes sont :
Il explore le DOM à la recherche d'endroits où l'utilisateur peut injecter du code JavaScript, par exemple une zone de texte. Il peut découvrir des points d'injection qu'un scanner ne peut pas deviner. Un exemple pourrait être une fonctionnalité de recherche qui prend le texte d'une zone de saisie et, pour déclencher la recherche, le place dans le hachage de l'URL sous forme de chaîne JSON.
Il fuzz l'URL (paramètres de requête et le hachage) pour voir si notre code s'exécute au chargement de la page. Si aucun code ne s'exécute, il explore le DOM en déclenchant des événements HTML dans l'espoir de trouver quelque chose qui exécute notre charge utile.
Il peut également découvrir le classique XSS réfléchi.
Après une vérification DOM XSS, DOMDig explore la même page en attendant l'exécution des charges utiles précédemment utilisées. Si l'une d'elles est trouvée, cela signifie qu'elle peut survivre aux rechargements de page.
Recherche les endroits où les espaces réservés de template (par exemple {var1}) peuvent être évalués en tant que code JavaScript.
Chaque vulnérabilité signalée contient les champs suivants :
domxss, stored ou templateinjDOMDig utilise htcrawl comme moteur d'exploration.
Le diagramme montre le processus d'exploration récursive.
.
La vidéo ci-dessous montre le moteur en train d'explorer Gmail. L'exploration a duré plusieurs heures et environ 3000 requêtes XHR ont été capturées.
Une séquence de connexion (ou séquence initiale) est un objet JSON contenant une liste d'actions à effectuer avant le début de l'analyse. Chaque élément de la liste est un tableau où le premier élément est le nom de l'action à effectuer et les éléments restants sont des « paramètres » de ces actions. Les actions sont :
[
["navigate", "https://target.local/login-page"],
["write", "#username", "demo"],
["write", "#password", "demo"],
["sleep", 2],
["clickToNavigate", "#btn-login"]
]
Les charges utiles peuvent être chargées à partir d'un fichier JSON (option -P) sous forme de tableau de chaînes. Pour créer des charges utiles personnalisées, la chaîne window.___xssSink({0}) doit être utilisée comme fonction à exécuter (au lieu du classique alert(1))
[
';window.___xssSink({0});',
'<img src="https://raw.githubusercontent.com/fcavallarin/domdig/HEAD/a" onerror="window.___xssSink({0})">'
]