Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cuddlephish — Bewaffneter Browser-in-the-Middle (BitM) für Penetrationstester | Kitploit
Tools/GitHubGitHub/fkasler/cuddlephish
Phishing-ToolsWebanwendungs-ExploitationPhishingPenetrationstestsSocial EngineeringRed Teaming
GitHubfkasler/cuddlephish

cuddlephish

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

Repository anzeigen
67380vor 4 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CuddlePhish

phishy

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.

Schnellstart

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:

root@kitploit:~
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:

root@kitploit:~
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:

root@kitploit:~
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:

root@kitploit:~
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:

root@kitploit:~
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!

root@kitploit:~
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.

Fehlerbehebung ("Ich sehe nur eine leere Seite")

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:

  • Überprüfen Sie, ob der Tab-Titel des Zieldienstes keine Sonderzeichen enthält. Wir verwenden '--auto-select-desktop-capture-source', um unserem automatisierten Browser mitzuteilen, welcher Tab gestreamt werden soll. Diese Option schlägt bei Titeln mit Sonderzeichen fehl. Sie benötigen jedoch nicht den vollständigen Tab-Titel, sondern nur einen ausreichenden Teilstring für eine eindeutige Übereinstimmung.
  • In der gleichen Richtung: Wenn Ihr Zieldienst eine 302 oder ähnliche Weiterleitung an Ihren automatisierten Browser sendet und sich der Tab-Titel ändert, bevor wir die WebRTC-Übertragung an ein Opfer starten, dann wird '--auto-select-desktop-capture-source' fehlschlagen. Sie können sich ansehen, wie add_target.js diese Informationen abruft, und dies in index.js zusammen mit einer console.log()-Anweisung replizieren, um zu sehen, ob sich der Titel geändert hat, bevor WebRTC ausgehandelt wird.
  • Überprüfen Sie, ob das cuddlephish-HTML geladen wird und ob es keine offensichtlichen JavaScript-Fehler in der Entwicklerkonsole auf der Frontend-Seite gibt. Die beispielhafte Caddy-Konfiguration enthält einige grundlegende Sperren für User-Agent-Strings wie curl. Mindestens sollten Sie sehen, dass der Tab-Titel und das Favicon gefälscht werden.
  • Stellen Sie sicher, dass Sie von Ihrem Server aus mit dem beispielhaften STUN-Dienst und Port (stun.l.google.com:19302) interagieren können.
  • Stellen Sie sicher, dass das Netzwerk, von dem aus Sie arbeiten, STUN überhaupt zulässt. STUN funktioniert nur mit 'Full-Cone NAT', 'Address-Restricted-Cone NAT' und 'Port-Restricted-Cone NAT'. Es funktioniert NICHT mit 'Symmetric NAT'.
  • Stellen Sie sicher, dass Sie von Ihrem Test-Opfer-Browser aus mit dem beispielhaften STUN-Dienst und Port (stun.l.google.com:19302) interagieren können. Versuchen Sie es mit https://icetest.info/.
  • Wenn Ihr Netzwerk den beispielhaften STUN-Server nicht erreichen kann, ändern Sie ihn zu einem, den Sie erreichen können. Wenn Ihr Netzwerk STUN nicht zulässt, gibt es eine beispielhafte Konfiguration für einen TURN-Server in den cuddlephish- und broadcast-HTML-Seiten. Sie müssen Ihren eigenen TURN-Server einrichten oder bezahlen. HINWEIS: Ein TURN-Server hat die besten Chancen, Phishing-Opfer mit Ihren Browser-Instanzen zu verbinden.

Auf hoher Ebene bedeutet eine leere Seite auf der Frontend-Seite, dass es eine Unterbrechung in der Datenflusskette gibt: 'Start WebRTC' > 'Wähle Tab zum Broadcasten' > 'ICE mit dem Browser des Opfers aushandeln' > 'Video streamen'. Die obigen Fehlerbehebungsschritte sollen Ihnen helfen, die Daten durch diesen Prozess zu verfolgen. Bei ordnungsgemäßem Betrieb sollten Sie einen Log-Stream auf dem Server sehen, der dem folgenden ähnelt:

troubleshoot

Ich hoffe, das hilft bei Problemen, und wie immer sind ausreichende Informationen zur konsistenten Reproduktion eines Problems Voraussetzung für das Einreichen von Issues zur weiteren Untersuchung.

Admin-Funktionen

Payload senden:

Lösen Sie manuell einen Payload aus, der über JavaScript auf das System des Opfers heruntergeladen wird. Jedes Ziel beginnt mit 'payload.txt' als Test-Payload. Tauschen Sie einfach den Dateipfad in targets.json aus, um einen benutzerdefinierten Payload zu senden.

Benutzer rauswerfen:

Sendet eine window.location-Änderung an das Opfer, um es zum echten Login-Portal zu schicken. Es wird so aussehen, als müssten sie sich nur erneut authentifizieren, und verhindert, dass sie zusehen, wie Sie die Kontrolle übernehmen. Wenn Sie den Code anpassen, könnten Sie mit dieser allgemeinen Technik einige andere ausgefallene Dinge tun ;)

Übernehmen:

Ermöglicht es Ihnen, direkt vom Admin-Portal aus die Kontrolle über eine Browser-Instanz zu übernehmen. Um die Steuerung der Instanz zu beenden, drücken Sie die ESCAPE-Taste. Hinweis: Dies entzieht dem Phishing-Opfer die Kontrolle, und es wird Ihre Bewegungen sehen können, wenn Sie es nicht zuerst rauswerfen. Sie sind gewarnt.

Kontrolle zurückgeben:

Ermöglicht es Ihnen, dem Benutzer manuell die Kontrolle über die automatisierte Browser-Instanz zurückzugeben. Dies könnte in einigen Social-Engineering-Szenarien nützlich sein, wenn Sie die IT-Abteilung vorspielen. Sie können dem Benutzer sagen, dass Sie eine Hilfssitzung starten, die Kontrolle übernehmen und zum Zieldienst navigieren, die Kontrolle zurückgeben und ihn einloggen lassen, die Kontrolle wieder übernehmen usw.

Cookies holen:

Extrahiert alle Cookie- und Local-Storage-Elemente aus der Browser-Instanz und lädt sie als JSON-Datei herunter. Um dieses Anmeldeinformationsmaterial wieder in eine auf Ihrem lokalen System laufende Browser-Instanz einzuschleusen, gibt es ein Skript im Projekt namens 'stealer.js'. Es ist für die Ausführung auf Ihrem Rechner gedacht, nicht auf dem Server. Um es zu verwenden, müssen Sie auch die Node-Komponenten des Projekts auf Ihrem System installieren.

root@kitploit:~
node stealer.js ~/Downloads/cuddle_asdf1234.json

Instanz entfernen:

Beendet eine Browser-Instanz, wenn Sie sie nicht mehr benötigen. Manchmal loggen Benutzer Sie nicht vollständig ein. Manchmal schlägt die WebRTC-Verbindung fehl. Manchmal läuft eine Sitzung ab, bevor Sie sie nutzen können. In diesen Fällen kann dieser Button Ihnen helfen, nutzlose Browser-Instanzen über das Admin-Portal zu bereinigen.

Eine Anmerkung zu Tastenprotokollen und Benutzerdaten:

Jeder Browser wird mit einer eigenen zufälligen 'Browser-ID' und einem passenden Benutzerdatenverzeichnis im 'user_data'-Ordner des Projekts gestartet. In einigen Fällen, in denen 'stealer.js' nicht funktioniert, müssen Sie möglicherweise auch die Benutzerdaten für diese Instanz replizieren. Dies kann in Fällen nützlich sein, in denen Dienste mit einer 'Diesen Browser merken'-Funktion anvisiert werden, abhängig davon, wie diese Funktion implementiert ist.

Es gibt auch eine keylog.txt in jedem Benutzerdatenverzeichnis mit einem vollständigen Tastenprotokoll des Opfer-Benutzers. Das allgemeine Tastenprotokoll im Admin-Portal versucht, Dinge wie Rücktasten zu berücksichtigen, während diese keylog.txt alle aufgezeichneten Tastenanschläge enthält.

Phishmonger-Integration

Beispiel pm.json:

root@kitploit:~
{
  "tacking_id": "id",
  "logging_endpoint": "https://www.phishmongerserver.com/create_event",
  "admin_cookie": "admin_cookie=s3cret",
  "post_url_search": "ppsecure"
}

Unter der Haube

Dieses Tool funktioniert, indem es Besucher der Phishing-Seite mit einem automatisierten Chrome-Browser koppelt, der auf dem Phishing-Server läuft. Ein Videofeed der vom Angreifer kontrollierten Chrome-Instanz wird dann über WebRTC an das Phishing-Opfer gestreamt, und alle vom Benutzer bereitgestellten Mausbewegungen und Tastatureingaben werden vom Browser des Opfers an die zugehörige Chrome-Instanz weitergeleitet. Der Server verwendet Websockets, um Opfer zu verfolgen, sie mit Browsern zu paaren, WebRTC-Videostreams zu vermitteln und Benutzereingaben mitzulesen. Für jeden neuen Besucher erzeugt der Server eine neue Chrome-Instanz. Da wir das Chrome Devtools Protocol (CDP) verwenden, um jede Chrome-Instanz zu steuern, können wir APIs wie 'Storage.getCookie' nutzen, um Sitzungscookies für Zielseiten zu extrahieren, sobald sich der Benutzer für uns eingeloggt hat. Wir können auch jederzeit eingreifen und jede Chrome-Instanz direkt steuern, wobei wir dieselbe Methode verwenden, mit der wir Opfern überhaupt erst die Fernsteuerung ermöglichen.

Der Node-Server führt Folgendes aus:

  • Startet einen neuen Browser ('leeres Phishbowl') mit einer xvfb-Instanz als virtuellem Bildschirm und navigiert einen Tab zur Ziel-Login-Seite
  • Lädt eine benutzerdefinierte Webseite, broadcast.html, mit WebRTC-Setup-Skript in einem neuen Tab des automatisierten Browsers
  • Browser checkt über Websockets ein
  • Opfer besucht die Seite und checkt über Websockets ein
  • Paart Opfer mit Browser, vermittelt WebRTC-Videostream über Websockets und startet einen neuen Browser für das nächste Opfer
  • Browser werden durch eine zufällige ID verfolgt, um Admins zu ermöglichen, eine Browser-Instanz zu 'übernehmen' oder Anmeldeinformationen aus einer Instanz zu extrahieren.

Fragen und Antworten

Warum würden Sie so etwas Gefährliches veröffentlichen? (Auch bekannt als die Frage, die meine Mutter jedes Mal stellt, wenn ich auf der Black Hat spreche)

Nach meinem Verständnis wurde diese Technik seit mehreren Jahren theoretisiert und sogar bewaffnet (siehe Danksagungen). Während Bedrohungsakteure diese Technik nutzen können und dies wahrscheinlich auch schon seit einiger Zeit tun, hatten offensive Sicherheitsexperten keine einfache Möglichkeit, diese Technik zu replizieren, und sind sich ihrer Existenz möglicherweise nicht einmal bewusst. Meine Absicht bei der Veröffentlichung des Tools ist es, Penetrationstestern und Red Teamern zu ermöglichen, BitM in Operationen einzusetzen, um seine potenziellen Auswirkungen zu demonstrieren und Netzwerkverteidigern zu helfen, sich auf echte Bedrohungen vorzubereiten.

Wie schütze ich meinen Dienst vor dieser Art von Angriff?

Zunächst einmal verstehen Sie, dass dieser Angriff auf Social Engineering beruht, bei dem ein Benutzer dazu gebracht wird, eine bösartige Website zu besuchen. Domain-Whitelisting würde viel dazu beitragen, dies und andere Arten von Social Engineering zu verhindern. Wenn wir uns darauf verlassen, dass Benutzer 100 % der Anmeldedaten (Passwort, OTP, SMS, PhoneFactor, Push-Benachrichtigung usw.) für einen Webdienst verwalten, sind wir potenziell anfällig für diesen Angriff. Um diesen Angriff zu vereiteln, müssen wir daher Anmeldedaten nutzen, die Benutzer nicht verwalten. Beispielsweise können Client-TLS-Zertifikate an Client-Geräte ausgestellt werden und sind nur für den echten Webdienst gültig. Das Zertifikat wird vom Browser und Betriebssystem verwaltet, und es gibt keine Möglichkeit für den Server eines Angreifers, eine Kopie des TLS-Zertifikats des Opfers zu erhalten. Eine weitere Möglichkeit ist die Verwendung von U2F oder FIDO2 mit Hardware wie einem YubiKey, um einen Teil der erforderlichen Anmeldedaten zu verwalten. Es gibt keine Möglichkeit für die Website eines Hackers, mit einem YubiKey zu interagieren, der an den Computer eines Opfers angeschlossen ist.

Sie verwenden Docker für Caddy, aber nicht für den Node-Server. Was soll das?

Ich bin noch kein Docker-Experte. Wenn Sie ein einfaches Docker-Setup entwickeln können, würde ich mich über einen Pull-Request sehr freuen.

Was hat es mit dem albernen Namen auf sich?

Es ist ein Wortspiel aus Cuttlefish (einem knallharten Meerestier, das sich seiner Umgebung anpassen kann), Phishing (weil es Social Engineering erfordert, um den Angriff durchzuführen) und absichtlich falsch geschrieben, um einzigartig, verspielt und albern zu sein. Es macht mich glücklich zu denken, dass dieser lustige Toolname in Pentest-Berichten neben kritischen Risikobewertungen erwähnt wird.

Danksagungen

Obwohl ich diese Technik und Implementierung unabhängig entwickelt habe, habe ich inzwischen erfahren, dass ein paar andere Forscher mir bei der Entdeckung zuvorgekommen sind. Sie haben jeweils einen Ansatz mit webbasierten VNC-Clients verwendet, um ein ähnliches Ergebnis zu erzielen. Es ist ein intuitiver Ansatz und könnte auch für MitM-Angriffe gegen andere Software als Browser anwendbar sein (VPN-im-Browser vielleicht?). Auf jeden Fall einen Blick wert:

Franco Tommasi, Christian Catalano & Ivan Taurino https://link.springer.com/article/10.1007/s10207-021-00548-5

@mrd0x https://mrd0x.com/bypass-2fa-using-novnc/

Auch:

Shoutout to Daniel Aaron @majordmg for helping with the early stages of WebRTC proof-of-concept.

Huge thanks to RJ Stallkamp @Z3rO-C00L for fixing and styling the admin interface, and the sweet new logo.

Tool herunterladen