
Contournement de l'UAC en abusant des objets RPC et de débogage.
Elevator permet de contourner l'UAC et de lancer un processus élevé avec les privilèges administrateur complets. Cela est réalisé en abusant du comportement du serveur RPC qui implémente la fonctionnalité UAC, comme démontré par James Forshaw dans son article Appeler des serveurs RPC Windows locaux depuis .NET. L'outil ne nécessite pas de déposer une DLL supplémentaire ni d'écrire dans le registre Windows (comme c'est souvent le cas avec d'autres techniques de contournement de l'UAC), et il a été testé avec succès sur Windows Server 2016, Windows Server 2019, Windows 10 et Windows 11 (il fonctionne probablement sur d'autres versions de Windows). Corrigé à un moment donné autour du build 19045.3570).
L'outil est composé d'un stub C++ qui connecte l'outil lui-même au serveur RPC exposé par le service APPINFO, et du projet Rust qui contient la logique principale permettant d'exploiter le bug et de contourner l'UAC. Le stub C++ a été obtenu en compilant le fichier IDL que RPC View a créé à partir de l'interface RPC portant l'ID 201ef99a-7fa0-444c-9399-19ba84f12a1a.
Le stub RPC C++ a été compilé en une dll et son contenu binaire a été chiffré et intégré en dur dans la crate Rust (voir la fonction get_rpc_stub() dans la crate rpcclient). Ensuite, la dll est mappée manuellement à l'exécution en utilisant DInvoke_rs. Si vous souhaitez effectuer ce processus vous-même (ce qui n'est pas nécessaire pour utiliser l'outil), ouvrez simplement le projet RPC_Stub dans Visual Studio 2019+ et compilez la dll. Ensuite, utilisez le script.py (Python 2.7) inclus dans le dépôt pour obtenir une chaîne hexadécimale à partir du contenu binaire de la dll, qui doit être placée dans la fonction rppclient::get_rpc_stub().
Valide uniquement pour les systèmes x64.
Étant donné que nous utilisons le plugin LITCRYPT pour obscurcir les littéraux de chaînes, il est nécessaire de définir la variable d'environnement LITCRYPT_ENCRYPT_KEY avant de compiler le code :
C:\Users\User\Desktop\Elevator> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
Après cela, placez-vous dans le dossier Elevator et compilez simplement le code :
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