通过滥用RPC和调试对象绕过UAC——Elevator
作者:Sec-Labs | 发布时间:
工具介绍
Elevator允许绕过UAC并生成一个具有完全管理员权限的提升进程。这是通过滥用实现UAC功能的RPC服务器的行为来实现的,正如James Forshaw在他的文章《从.NET调用本地Windows RPC服务器》中所证明的那样。该工具不需要丢弃一个额外的DLL或写入Windows注册表(就像其他UAC绕过技术经常出现的情况一样),它已经在Windows Server 2016、Windows Server 2019和Windows 10上成功测试(它可能在其他版本的Windows上工作)。
该工具由一个C++存根组成,它将工具本身与APPINFO服务所暴露的RPC服务器连接起来,而Rust项目则包含允许滥用该漏洞和绕过UAC的主要逻辑。C++存根是通过编译RPC View从ID为201ef99a-7fa0-444c-9399-19ba84f12a1a的RPC接口创建的IDL文件获得的。
C++ RPC存根已经被编译成一个dll文件,它的二进制内容已经被加密,并被harcdoded到Rust crate中(请查看crate rpcclient中的函数get_rpc_stub())。然后,在运行时使用DInvoke_rs对dll进行手动映射。如果你想自己完成这个过程(为了使用这个工具不需要),只需在Visual Studio 2019+上打开项目RPC_Stub并编译dll。之后,使用repo中包含的script.py(Python 2.7)从dll的二进制内容中获得一个十六进制字符串,该字符串应该放在函数rppclient::get_rpc_stub()中。
只对x64系统有效。
工具地址
https://github.com/Kudaes/Elevator
编译
由于我们使用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
使用方法
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