
Обход UAC путём злоупотребления RPC и объектами отладки.
Elevator позволяет обойти UAC и запустить процесс с полными правами администратора. Это достигается за счет злоупотребления поведением RPC-сервера, который реализует функцию UAC, как продемонстрировал Джеймс Форшоу в своей статье Calling Local Windows RPC Servers from .NET. Инструменту не требуется сбрасывать дополнительную DLL или писать в реестр Windows (как это часто бывает с другими методами обхода UAC), и он был успешно протестирован на Windows Server 2016, Windows Server 2019, Windows 10 и Windows 11 (вероятно, он работает и на других версиях Windows). Исправлено в какой-то момент примерно в сборке 19045.3570).
Инструмент состоит из C++-заглушки, которая соединяет сам инструмент с RPC-сервером, предоставляемым службой APPINFO, и Rust-проекта, содержащего основную логику, позволяющую злоупотребить этой ошибкой и обойти UAC. C++-заглушка была получена путем компиляции IDL-файла, который RPC View создал из RPC-интерфейса с ID 201ef99a-7fa0-444c-9399-19ba84f12a1a.
C++ RPC-заглушка скомпилирована в DLL, и её бинарное содержимое зашифровано и вшито в Rust-крейт (см. функцию get_rpc_stub() в крейте rpcclient). Затем DLL вручную отображается в памяти во время выполнения с помощью DInvoke_rs. Если вы хотите пройти этот процесс самостоятельно (для использования инструмента это не требуется), просто откройте проект RPC_Stub в Visual Studio 2019+ и скомпилируйте DLL. После этого используйте скрипт script.py (Python 2.7) из репозитория, чтобы получить шестнадцатеричную строку из бинарного содержимого DLL, которую следует поместить в функцию rppclient::get_rpc_stub().
Действительно только для систем x64.
Поскольку для обфускации строковых литералов используется плагин LITCRYPT, перед компиляцией кода необходимо задать переменную окружения LITCRYPT_ENCRYPT_KEY:
C:\Users\User\Desktop\Elevator> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
После этого перейдите в папку Elevator и просто скомпилируйте код:
C:\Users\User\Desktop\Elevator\Elevator> cargo build --release
C:\Users\User\Desktop\Elevator\Elevator\target\release> elevator.exe -h
USAGE:
elevator.exe <COMMAND> [OPTIONS]
ARGS:
<COMMAND> Command line to run.
OPTIONS:
-h, --help Print help information.
-n, --new-console Set CREATE_NEW_CONSOLE flag for the new process.
C:\Temp> elevator.exe c:\windows\system32\cmd.exe --new-console
C:\Temp> elevator.exe "c:\windows\system32\cmd.exe /C whoami /groups > file.txt" --new-console