首先,感谢 @splinter_code 和 @decoder_it 开发了 RoguePotato,因为此代码大量基于它。
这只是另一个利用 SeImpersonate 权限获取 SYSTEM 权限的 Potao。但与其它 Potao 不同的是:
CreateProcessWithTokenW 来生成新进程。你可以选择 CreateProcessWithTokenW、CreateProcessAsUserW、CreateUser 和 BindShell。因此,该项目能够打开一个命名管道服务器,模拟任何连接到它的用户,然后执行上述选项之一。如果将来发布了任何新的 SYSTEM 身份验证触发机制,这个工具仍然可以用于提升权限——你只需在这种情况下使用另一个管道名称。
示例:
c:\temp\MultiPotato> MultiPotato.exe -t CreateUser
默认情况下,你有 60 秒(可通过 THREAD_TIMEOUT 更改)等待 SYSTEM 帐户或任何其他帐户进行身份验证。这可以通过例如未修补的 MS-EFSRPC 函数实现。默认情况下,MultiPotato 监听管道名称 \\.\pipe\pwned/pipe/srvsvc,用于配合 MS-EFSRPC 使用。对于其他 SYSTEM 身份验证触发机制,你可以通过 -p 参数调整此值。
c:\temp\MultiPotato> PetitPotamModified.exe localhost/pipe/pwned localhost
当然,也可以从远程系统使用 PetitPotam.py 作为触发机制,使用有效的低权限用户。
c:\temp\MultiPotato> MultiPotato.exe -t CreateProcessAsUserW -p "pwned\pipe\spoolss" -e "C:\temp\stage2.exe"
并通过以下方式触发:
c:\temp\MultiPotato>MS-RPRN.exe \\192.168.100.150 \\192.168.100.150/pipe/pwned
重要提示:在我的测试中,对于 MS-RPRN,我不能使用 localhost 或 127.0.0.1 作为目标,必须使用网络 IP 地址或 FQDN。此外,需要启用打印机服务才能使其工作。
c:\temp\MultiPotato> MultiPotato.exe -t BindShell -p "pwned\pipe\spoolss"
最近我进行了一次渗透测试,通过 SQL 注入和 XP_CMDShell 成功攻陷了一台 MSSQL 服务器。但在这个目标系统上,所有公开的 Potao 都无法将服务账户权限提升到 SYSTEM。系统身份验证触发机制不是问题——实际上 CreateProcessWithTokenW 一直失败,返回 NTSTATUS 代码 5 —— 访问被拒绝。这对我来说不太合理,可能是一个边缘情况。可能的原因是本地端点保护在模拟 SYSTEM 后阻止了进程创建。
因此,我寻找了替代方案——并在 Twitter 上询问了一些人。再次感谢 @splinter_code 向我解释了如何通过 CreateProcessAsUserW 实现(在攻陷的 MSSQL 服务器上运行良好,获得了 SYSTEM C2 回调)。