
Bewaffneter Browser-in-the-Middle (BitM) für Penetrationstester

Einsatzbereites Multi-User Browser-in-the-Middle (BitM) für Penetrationstester. Dieser Angriff kann verwendet werden, um die Multi-Faktor-Authentifizierung auf vielen hochwertigen Webanwendungen zu umgehen. Er funktioniert sogar bei Anwendungen, die keine Sitzungstoken verwenden und daher mit traditionellen Token-Diebstahlangriffen nicht ausnutzbar wären. Dies ist ein Social-Engineering-Tool und nutzt keine technischen Schwachstellen im Zielservice aus.
Dieses Tool ist ein spezialisierter Webserver. Es ist für den Betrieb auf einem Debian 11 (Bullseye) Linux-Server ausgelegt und verlässt sich auf öffentliche IP-Informationen, um die Admin-Funktionalität zu schützen. Erwarten Sie nicht, dass Sie lokal testen können, ohne einige ernsthafte Hürden zu nehmen.
Warnung: Chromium wird auf ARM nicht unterstützt. Obwohl es technisch möglich ist, die Verwendung einer ARM-Chromium-Binärdatei zu erzwingen, verlieren Sie alle zusätzlichen Funktionen/Schutzmaßnahmen von puppeteer-extra.
Dieses Beispiel-Setup verwendet Caddy, um TLS, SNI zu handhaben und ein paar benutzerdefinierte Header wie 'X-Real-IP' zu jeder Anfrage hinzuzufügen. Sie müssen Caddy nicht mit Cuddlephish verwenden, da derselbe Reverse-Proxy mit Nginx, Apache usw. eingerichtet werden kann. Ich mag Caddy einfach, weil es einfach mit Docker zu installieren ist und Plugins zur Verwaltung von Letsencrypt-Zertifikaten für die meisten Domain-Registrare besitzt. Die beispielhafte Caddyfile zeigt, wie man es für Gandi einrichtet. Überprüfen Sie die Dokumentation für Ihren Registrar.
Installieren Sie Docker, Node, XVFB und einige andere Abhängigkeiten:
git clone https://github.com/fkasler/cuddlephish
cd cuddlephish
sudo bash install_deps.sh
Sie können dann Docker verwenden, um Caddy mit einem Wildcard-Zertifikats-Plugin für Ihren Registrar zu erstellen. Das Beispiel ist für Gandi. Überprüfen Sie die Dokumentation hier und die Liste der DNS-Provider-Module hier. Sie können die Dockerfile vor dem Bauen für Ihren Registrar anpassen:
sudo docker build -t caddy .
Ändern Sie nun die Caddyfile, um Ihre Domain und den Gandi (oder anderen Registrar) API-Key auszutauschen, und starten Sie Caddy. Ich empfehle, dies in einem screen- oder tmux-Fenster zu starten, damit Sie den Node-Server gleich in einem anderen Fenster ausführen können:
sudo docker run -p 80:80 -p 443:443 -p 2019:2019 -v $PWD/Caddyfile:/etc/caddy/Caddyfile --network=host caddy:latest
Mit Caddy, das den Datenverkehr für uns auf den Ports 80 und 443 abfängt, können wir endlich das Tool ausführen!
Installieren Sie die Node-Abhängigkeiten:
npm install
Ein paar Konfigurationsanpassungen: KRITISCHER SCHRITT: Stellen Sie sicher, dass Sie die beispielhafte config.json anpassen, um Ihre genehmigte(n) öffentliche(n) IP(s) für den Admin-Zugriff hinzuzufügen. Diese Whitelist von IPs bestimmt den Zugriff auf das "/admin"-Webinterface. Sie sollten auch den Standardschlüssel für den Socket durch etwas Sichereres ersetzen.
Das Tool ist standardmäßig nicht auf Login-Seiten eingestellt, daher müssen Sie einige hinzufügen. Es gibt ein Skript 'add_target.js', das diesen Schritt einfach macht. Führen Sie einfach das Skript aus und fügen Sie die URL des Login-Portals, das Sie anvisieren möchten, ein, wenn Sie dazu aufgefordert werden:
node add_target.js
Dieses Skript holt den Dienstnamen, den Tab-Titel und das Favicon für Sie und fügt einen Eintrag in 'targets.json' hinzu. Sie können dieses Skript mehrmals ausführen, und es wird Ihre neuen Ziele hinzufügen. Das Skript benennt jeden Dienst basierend auf der Domain, ohne die Top-Level-Domain. Für 'https://www.example.com/login.php' würde der Dienst also nur 'example' sein, wenn Sie Ihr Ziel angeben, wenn Sie...
Führen Sie es aus!
node index.js example
Nach ein paar Sekunden sollten Sie eine Meldung in der Konsole sehen, wenn Ihre erste automatisierte Chrome-Instanz über Websockets eingecheckt wird. Jetzt sollten Besucher Ihrer Phishing-Seite das sehen, was wie die Ziel-Login-Seite aussieht, aber tatsächlich ein Video-Feed Ihrer automatisierten Browser-Instanz ist. Sie können auch mit Ihrer Browser-Instanz interagieren und sich für Sie einloggen.
Wenn Sie Ihre Admin-IP(s) korrekt in der config.json konfiguriert haben, sollten Sie in der Lage sein, ein spezielles '/admin'-Webinterface anzuzeigen, um Benutzer zu verfolgen, Tastenprotokolle anzuzeigen, die Kontrolle über eingeloggte Browser-Instanzen zu übernehmen, Cookies zu stehlen und unerwünschte Browser-Instanzen zu löschen.
Hinweis: Sie werden nichts auf der Admin-Seite sehen, bis Sie einige Opfer haben. Sobald Sie ein Opfer haben, sollte dessen Browser-Instanz auf der Admin-Benutzeroberfläche erscheinen.
Ich hatte mehrere Leute, die Issues über eine 'Blank White Page' eröffnet haben, was eher ein Symptom für viele mögliche Probleme ist, und kein Problem an sich. Bitte eröffnen Sie keine Issues unter vagen Symptomnamen. Versuchen Sie stattdessen, wenn Sie auf der Benutzerseite eine leere Seite haben, zunächst Folgendes zu überprüfen: