
Navegador en el Medio (BitM) Armado para Probadores de Penetración

Browser-in-the-middle (BitM) multi-usuario armado para probadores de penetración. Este ataque puede usarse para eludir la autenticación multifactor en muchas aplicaciones web de alto valor. Incluso funciona para aplicaciones que no usan tokens de sesión y, por lo tanto, no serían explotables mediante ataques tradicionales de robo de tokens. Esta es una herramienta de ingeniería social y no explota ninguna falla técnica en el servicio objetivo.
Esta herramienta es un servidor web especializado. Está diseñada para ejecutarse en un servidor Linux Debian 11 (Bullseye) y depende de información de IP pública para proteger la funcionalidad de administración. No esperes poder probar localmente sin saltar algunos obstáculos serios.
Advertencia: Chromium no es compatible con ARM. Aunque técnicamente es posible forzar el uso de un binario ARM de Chromium, perderás todas las funciones/protecciones adicionales de puppeteer-extra.
Esta configuración de ejemplo utiliza Caddy para manejar TLS, SNI y agregar un par de encabezados personalizados como 'X-Real-IP' a cada solicitud. No tienes que usar Caddy con Cuddlephish, ya que el mismo proxy inverso se puede configurar usando Nginx, Apache, etc. Simplemente me gusta Caddy porque es fácil de instalar con Docker y tiene complementos para administrar certificados de Letsencrypt para la mayoría de los registradores de dominios. El Caddyfile de ejemplo muestra cómo lo configurarías para Gandi. Consulta la documentación de tu registrador.
Instala Docker, Node, XVFB y algunas otras dependencias:
git clone https://github.com/fkasler/cuddlephish
cd cuddlephish
sudo bash install_deps.sh
Luego puedes usar Docker para construir Caddy con un complemento de certificado comodín para tu registrador. El ejemplo es para Gandi. Consulta la documentación aquí y la lista de módulos de proveedores DNS aquí. Puedes modificar el Dockerfile para tu registrador antes de construir:
sudo docker build -t caddy .
Ahora modifica el Caddyfile para cambiar tu dominio y la clave API de Gandi (u otro registrador), e inicia Caddy. Recomiendo iniciar esto en una ventana de screen o tmux para que puedas ejecutar el servidor Node en otra ventana en un momento:
sudo docker run -p 80:80 -p 443:443 -p 2019:2019 -v $PWD/Caddyfile:/etc/caddy/Caddyfile --network=host caddy:latest
Con Caddy manejando el tráfico por nosotros en los puertos 80 y 443, ¡finalmente podemos ejecutar la herramienta!
Instala las dependencias de Node:
npm install
Algunos ajustes de configuración: PASO CRÍTICO: Asegúrate de modificar el config.json de ejemplo para agregar tus IP(s) públicas aprobadas para acceso de administrador. Esta lista blanca de IPs es lo que dicta el acceso a la interfaz web "/admin". También deberías cambiar la clave de socket predeterminada por algo más seguro.
La herramienta no está configurada para apuntar a ningún inicio de sesión de forma predeterminada, por lo que deberás agregar algunos. Hay un script 'add_target.js' para facilitar este paso. Simplemente ejecuta el script y pega la URL del portal de inicio de sesión que deseas apuntar cuando se te solicite:
node add_target.js
Esto obtendrá el nombre del servicio, el título de la pestaña y el favicon por ti y agregará una entrada a 'targets.json'. Puedes ejecutar este script varias veces y añadirá tus nuevos objetivos. El script nombrará cada servicio según el dominio, sin el nivel superior. Entonces, para 'https://www.example.com/login.php', el servicio sería solo 'example' al especificar tu objetivo cuando tú...
¡Ejecútalo!
node index.js example
Después de unos segundos, deberías ver un mensaje en la consola cuando tu primera instancia automatizada de Chrome se registre a través de websockets. Ahora los visitantes de tu sitio de phishing deberían ver lo que parece ser la página de inicio de sesión objetivo, pero en realidad es una transmisión de video de tu instancia de navegador automatizada. También pueden interactuar con tu instancia de navegador e iniciar sesión por ti.
Si configuraste correctamente tus IP(s) de administrador en config.json, deberías poder ver una interfaz web especial '/admin' para rastrear usuarios, ver registros clave, tomar el control de instancias de navegador conectadas, robar cookies y eliminar instancias de navegador no deseadas.
Nota: No verás nada en la página de administración hasta que tengas algunas víctimas. Una vez que tengas una víctima, su instancia de navegador debería aparecer en la interfaz de administración.
He tenido varias personas que abren problemas sobre una "Página Blanca en Blanco", que es más un síntoma de muchos problemas posibles, y no un problema en sí mismo. No abras problemas bajo nombres de síntomas vagos. En su lugar, si tienes una página en blanco en el lado del usuario, primero intenta revisar lo siguiente:
A alto nivel, si solo ves una página en blanco en el front-end, significa que hay una interrupción en la cadena de flujo de datos desde "Iniciar WebRTC" > "Seleccionar pestaña para transmitir" > "Negociar ICE con el navegador de la víctima" > "Transmitir video". Los pasos de solución de problemas anteriores están destinados a ayudarte a seguir los datos a través de este proceso. Cuando funcione correctamente, deberías ver un flujo de registros en el servidor similar al siguiente: