
Bypass di UAC abusando di RPC e oggetti di debug.
Elevator consente di bypassare l'UAC e generare un processo elevato con privilegi di amministratore completo. Ciò viene fatto abusando del comportamento del server RPC che implementa la funzionalità UAC, come dimostrato da James Forshaw nel suo articolo Calling Local Windows RPC Servers from .NET. Lo strumento non richiede di rilasciare una DLL aggiuntiva o di scrivere nel Registro di Windows (come spesso accade con altre tecniche di bypass UAC), ed è stato testato con successo su Windows Server 2016, Windows Server 2019, Windows 10 e Windows 11 (probabilmente funziona su altre versioni di Windows). Corretto in qualche punto intorno alla build 19045.3570).
Lo strumento è composto da uno stub C++ che collega lo strumento stesso con il server RPC esposto dal servizio APPINFO, e dal progetto Rust che contiene la logica principale che consente di abusare del bug e bypassare l'UAC. Lo stub C++ è stato ottenuto compilando il file IDL che RPC View ha creato dall'interfaccia RPC con ID 201ef99a-7fa0-444c-9399-19ba84f12a1a.
Lo stub RPC C++ è stato compilato in una dll e il suo contenuto binario è stato crittografato e integrato direttamente nel crate Rust (controlla la funzione get_rpc_stub() nel crate rpcclient). Quindi, la dll viene mappata manualmente in runtime usando DInvoke_rs. Se vuoi eseguire questo processo da solo (non necessario per usare lo strumento), basta aprire il progetto RPC_Stub su Visual Studio 2019+ e compilare la dll. Dopodiché, usa lo script.py (Python 2.7) incluso nella repo per ottenere una stringa esadecimale dal contenuto binario della dll, che deve essere inserita nella funzione rppclient::get_rpc_stub().
Valido solo per sistemi x64.
Poiché stiamo usando il plugin LITCRYPT per offuscare le stringhe letterali, è necessario impostare la variabile d'ambiente LITCRYPT_ENCRYPT_KEY prima di compilare il codice:
C:\Users\User\Desktop\Elevator> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
Dopodiché, spostati nella cartella Elevator e compila semplicemente il codice:
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