
UAC-Bypass durch Ausnutzen von RPC- und Debug-Objekten.
Elevator ermöglicht es, die UAC zu umgehen und einen erhöhten Prozess mit vollen Administratorrechten zu starten. Dies wird erreicht, indem das Verhalten des RPC-Servers ausgenutzt wird, der die UAC-Funktion implementiert, wie von James Forshaw in seinem Artikel Calling Local Windows RPC Servers from .NET demonstriert. Das Tool muss keine zusätzliche DLL ablegen oder in die Windows-Registry schreiben (wie es bei anderen UAC-Bypass-Techniken oft der Fall ist), und es wurde erfolgreich auf Windows Server 2016, Windows Server 2019, Windows 10 und Windows 11 getestet (es funktioniert wahrscheinlich auch auf anderen Windows-Versionen). Irgendwann um Build 19045.3570 herum behoben).
Das Tool besteht aus einem C++-Stub, der das Tool selbst mit dem vom Dienst APPINFO bereitgestellten RPC-Server verbindet, und dem Rust-Projekt, das die Hauptlogik enthält, die es ermöglicht, den Fehler auszunutzen und die UAC zu umgehen. Der C++-Stub wurde durch Kompilieren der IDL-Datei erstellt, die RPC View aus der RPC-Schnittstelle mit der ID 201ef99a-7fa0-444c-9399-19ba84f12a1a erstellt hat.
Der C++-RPC-Stub wurde zu einer DLL kompiliert und sein binärer Inhalt wurde verschlüsselt und in die Rust-Crate hartcodiert (siehe dazu die Funktion get_rpc_stub() in der Crate rpcclient). Anschließend wird die DLL zur Laufzeit manuell mithilfe von DInvoke_rs gemappt. Wenn Sie diesen Prozess selbst durchlaufen möchten (was für die Verwendung des Tools nicht erforderlich ist), öffnen Sie einfach das Projekt RPC_Stub in Visual Studio 2019+ und kompilieren Sie die DLL. Verwenden Sie danach das im Repo enthaltene Skript script.py (Python 2.7), um einen Hex-String aus dem binären Inhalt der DLL zu erhalten, der in der Funktion rppclient::get_rpc_stub() platziert werden sollte.
Nur für x64-Systeme gültig.
Da wir das LITCRYPT-Plugin zur Verschleierung von String-Literalen verwenden, muss die Umgebungsvariable LITCRYPT_ENCRYPT_KEY vor dem Kompilieren des Codes gesetzt werden:
C:\Users\User\Desktop\Elevator> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
Danach wechseln Sie in den Elevator-Ordner und kompilieren Sie den Code einfach:
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