
Bypass de UAC abusando de RPC e objetos de debug.
O Elevator permite contornar o UAC e gerar um processo elevado com privilégios totais de administrador. Isso é feito abusando do comportamento do servidor RPC que implementa o recurso UAC, como demonstrado por James Forshaw em seu artigo Chamando servidores RPC locais do Windows a partir do .NET. A ferramenta não requer a gravação de uma DLL extra ou a escrita no Registro do Windows (como costuma acontecer com outras técnicas de bypass de UAC), e foi testada com sucesso no Windows Server 2016, Windows Server 2019, Windows 10 e Windows 11 (provavelmente funciona em outras versões do Windows). Corrigido em algum momento por volta do build 19045.3570).
A ferramenta é composta por um stub em C++ que conecta a própria ferramenta ao servidor RPC exposto pelo serviço APPINFO, e pelo projeto Rust que contém a lógica principal que permite abusar da falha e contornar o UAC. O stub em C++ foi obtido pela compilação do arquivo IDL que o RPC View criou a partir da interface RPC com ID 201ef99a-7fa0-444c-9399-19ba84f12a1a.
O stub RPC em C++ foi compilado em uma DLL e seu conteúdo binário foi criptografado e embutido no crate Rust (confira a função get_rpc_stub() no crate rpcclient). Em seguida, a DLL é mapeada manualmente em tempo de execução usando DInvoke_rs. Se você quiser executar esse processo por conta própria (o que não é necessário para usar a ferramenta), basta abrir o projeto RPC_Stub no Visual Studio 2019+ e compilar a DLL. Depois disso, use o script.py (Python 2.7) incluído no repositório para obter uma string hex do conteúdo binário da DLL, que deve ser colocada na função rppclient::get_rpc_stub().
Válido apenas para sistemas x64.
Como estamos usando o plugin LITCRYPT para ofuscar literais de string, é necessário definir a variável de ambiente LITCRYPT_ENCRYPT_KEY antes de compilar o código:
C:\Users\User\Desktop\Elevator> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
Depois disso, entre na pasta Elevator e simplesmente compile o código:
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