
Bypass de UAC abusando de RPC y objetos de depuración.
Elevator permite omitir la UAC y lanzar un proceso elevado con privilegios de administrador completos. Esto se logra abusando del comportamiento del servidor RPC que implementa la funcionalidad de UAC, como demostró James Forshaw en su artículo Llamando a servidores RPC locales de Windows desde .NET. La herramienta no requiere colocar un DLL adicional ni escribir en el Registro de Windows (como suele ocurrir con otras técnicas de omisión de UAC), y ha sido probada con éxito en Windows Server 2016, Windows Server 2019, Windows 10 y Windows 11 (probablemente funcione en otras versiones de Windows). Corregido en algún momento alrededor de la compilación 19045.3570).
La herramienta se compone de un stub en C++ que conecta la propia herramienta con el servidor RPC expuesto por el servicio APPINFO, y del proyecto Rust que contiene la lógica principal que permite abusar del fallo y omitir la UAC. El stub en C++ se ha obtenido compilando el archivo IDL que RPC View creó a partir de la interfaz RPC con ID 201ef99a-7fa0-444c-9399-19ba84f12a1a.
El stub RPC en C++ se ha compilado como un dll y su contenido binario se ha cifrado e incrustado en el crate de Rust (consulta la función get_rpc_stub() en el crate rpcclient). Después, el dll se mapea manualmente en tiempo de ejecución usando DInvoke_rs. Si quieres realizar este proceso por tu cuenta (algo que no es necesario para usar la herramienta), simplemente abre el proyecto RPC_Stub en Visual Studio 2019+ y compila el dll. Luego, usa el script.py (Python 2.7) incluido en el repositorio para obtener una cadena hexadecimal a partir del contenido binario del dll, que debe colocarse en la función rppclient::get_rpc_stub().
Válido solo para sistemas x64.
Dado que usamos el plugin LITCRYPT para ofuscar literales de cadena, es necesario configurar la variable de entorno LITCRYPT_ENCRYPT_KEY antes de compilar el código:
C:\Users\User\Desktop\Elevator> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
Después, entra en la carpeta Elevator y simplemente compila el 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