通过滥用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

 

标签:工具分享, UAC绕过