Elevator 允许绕过 UAC 并派生一个具有完全管理员权限的提权进程。这是通过滥用实现 UAC 功能的 RPC 服务器的行为来实现的,正如 James Forshaw 在他的文章 Calling Local Windows RPC Servers from .NET 中所演示的那样。该工具不需要释放额外的 DLL 或写入 Windows 注册表(其他 UAC 绕过技术通常需要这样做),并且它已成功在 Windows Server 2016、Windows Server 2019、Windows 10 和 Windows 11 上进行了测试(它可能在其他版本的 Windows 上也能工作)。在 build 19045.3570 左右的某个版本中已被修复。
该工具由一个 C++ 存根组成,该存根将工具本身与 APPINFO 服务暴露的 RPC 服务器连接起来,以及包含主要逻辑的 Rust 项目,该逻辑允许滥用此漏洞并绕过 UAC。C++ 存根是通过编译 RPC View 从 ID 为 201ef99a-7fa0-444c-9399-19ba84f12a1a 的 RPC 接口创建的 IDL 文件而获得的。
C++ RPC 存根已被编译为 dll,其二进制内容已被加密并硬编码到 Rust crate 中(请查看 crate rpcclient 中的 get_rpc_stub() 函数)。然后,该 dll 在运行时使用 DInvoke_rs 手动映射。如果你想自己完成这个过程(使用该工具并不需要这样做),只需在 Visual Studio 2019+ 中打开项目 RPC_Stub 并编译该 dll。之后,使用仓库中包含的 script.py(Python 2.7)从 dll 的二进制内容中获取十六进制字符串,该字符串应放置在函数 rppclient::get_rpc_stub() 中。
仅适用于 x64 系统。
由于我们使用 LITCRYPT 插件来混淆字符串字面量,因此在编译代码之前需要设置环境变量 LITCRYPT_ENCRYPT_KEY:
C:\Users\User\Desktop\Elevator> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
之后,进入 Elevator 文件夹并直接编译代码:
C:\Users\User\Desktop\Elevator\Elevator> cargo build --release
C:\Users\User\Desktop\Elevator\Elevator\target\release> elevator.exe -h
用法:
elevator.exe <COMMAND> [OPTIONS]
参数:
<COMMAND> 要运行的命令行。
选项:
-h, --help 打印帮助信息。
-n, --new-console 为新进程设置 CREATE_NEW_CONSOLE 标志。
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