Potato家族本地提权分析
字数 2816 2025-08-15 21:31:58

Windows本地提权技术:Potato家族深度分析

0x00 前言

Potato家族提权技术是Windows渗透测试中最常用的本地提权方法之一。本文详细分析Potato家族各类提权技术的原理、使用条件和实现细节,帮助安全研究人员深入理解这些技术。

0x01 基本原理

提权前提条件

要利用Potato提权,需要具备以下权限之一:

  • SeImpersonatePrivilege(模拟客户端权限)
  • SeAssignPrimaryTokenPrivilege(分配主令牌权限)

默认拥有SeImpersonatePrivilege权限的用户

  • 本地管理员账户(不包括管理员组普通账户)
  • 本地服务账户
  • 由服务控制管理器(SCM)启动的服务

注意:即使通过本地策略授予管理员组普通用户SeImpersonatePrivilege特权,在cmd.exe中执行whoami /priv也不会显示该特权,且无法利用;而SeAssignPrimaryTokenPrivilege特权则可以正常授予普通用户。

Windows服务账户权限

以下Windows服务登录账户具有高权限:

  • Local System (NT AUTHORITY\SYSTEM)
  • Network Service (NT AUTHORITY\Network Service)
  • Local Service (NT AUTHORITY\Local Service)

Potato提权可以实现:

  • Administrator → SYSTEM
  • Service → SYSTEM

Windows Token机制

Windows token是描述安全上下文的对象,包含:

  • 用户账户的SID
  • 用户所属组的SID
  • 当前登录会话的登录SID
  • 用户或用户组拥有的权限列表
  • 所有者SID
  • 所有者组的SID
  • 访问控制列表
  • 令牌来源
  • 主令牌/模拟令牌
  • 限制SID的可选列表

模拟等级

  • Anonymous:无法模拟或识别客户端
  • Identification:可识别客户端身份和特权,不能模拟
  • Impersonation:可在本地系统模拟
  • Delegation:可在远程系统上模拟

关键API函数

  • CreateProcessWithTokenW:需要SeImpersonatePrivilege特权,以某个Token权限启动新进程
  • CreateProcessAsUserW:需要SeAssignPrimaryTokenPrivilege特权,以Token权限启动新进程

0x02 Potato家族技术详解

1. Hot Potato

GitHub仓库:https://github.com/foxglovesec/Potato

原理

  1. 通过HOST-DNS欺骗使UDP端口耗尽(利用NBNS)
  2. 通过伪造WPAD代理服务器劫持HTTP流量
  3. HTTP到SMB的NTLM Relay(302重定向到本地,响应401触发NTLM认证)

特点

  • 需要等待Windows Update服务触发(可能需要30-60分钟)
  • 当Windows Update服务请求时,命令将以NT AUTHORITY\SYSTEM特权运行

2. Rotten Potato

GitHub仓库:https://github.com/foxglovesec/RottenPotato

原理

  • 通过DCOM调用使服务向攻击者监听的端口发起连接并进行NTLM认证
  • 需要SeImpersonatePrivilege权限

3. Juicy Potato(Rotten Potato增强版)

GitHub仓库:https://github.com/ohpe/juicy-potato

要求

  • 需要SeImpersonate和SeAssignPrimaryToken两个权限
  • 本地支持RPC或远程服务器支持RPC并能成功登录
  • 用户具有SeImpersonate或SeAssignPrimaryToken权限
  • 开启DCOM
  • 可用的COM对象

使用示例

JuicyPotato -p "whoami /priv"

4. Ghost Potato

GitHub仓库:https://github.com/Ridter/GhostPotato

利用漏洞:CVE-2019-1384(Ghost Potato),绕过MS-08068

原理

  1. 主机A向主机B进行SMB认证时,将pszTargetName设置为cifs/B
  2. 在type 2阶段拿到主机B发送的Challenge后,在lsass中缓存(Challenge, cifs/B)
  3. 主机B在拿到主机A的type 3后,会检查lsass中是否有缓存(Challenge, cifs/b)
  4. 如果存在缓存则认证失败
  5. 绕过缓存限制:lsass中的缓存300秒后自动消失,315秒后再发送Type3

5. Pipe Potato

原理

  1. 攻击者通过pipeserver.exe注册名为pipexpipespoolss的恶意命名管道
  2. 等待高权限用户连接以模拟其权限
  3. 通过spoolssClient.exe迫使SYSTEM用户访问恶意命名管道
  4. 模拟SYSTEM用户运行任意应用程序

技术细节

  • 调用CreateNamedPipe()创建命名管道
  • 调用ConnectNamedPipe()接受命名请求连接
  • 迫使高权限进程连接该命名管道并写入数据
  • 调用ImpersonateNamedPipeClient()派生高权限进程的客户端

衍生版本:PrintSpoofer

GitHub仓库:https://github.com/itm4n/PrintSpoofer

特点

  • 利用spoolsv.exe进程的RPC服务器强制Windows主机向其他计算机进行身份验证
  • 需要SeImpersonatePrivilege和SeAssignPrimaryToken权限

6. Sweet Potato

GitHub仓库:https://github.com/CCob/SweetPotato

特点

  • Juicy Potato的重写版
  • 整合COM/WinRM/Spoolsv技术
  • 支持从Windows 7到Windows 10/Windows Server 2019的本地服务到SYSTEM特权升级
  • 相当于Juicy/PrintSpoofer的整合版

0x03 技术本质总结

Potato提权技术的核心原理可以归纳为:

  1. 诱使"SYSTEM"账户通过NTLM向控制的TCP节点进行身份验证
  2. 以本地协商"NT AUTHORITY\SYSTEM"账户的安全令牌进行NTLM Relay
  3. 模拟刚刚协商的令牌,达到提权目的

0x04 参考链接

  1. Potato提权技术分析
  2. Windows提权技术研究
  3. Potato技术文档
Windows本地提权技术:Potato家族深度分析 0x00 前言 Potato家族提权技术是Windows渗透测试中最常用的本地提权方法之一。本文详细分析Potato家族各类提权技术的原理、使用条件和实现细节,帮助安全研究人员深入理解这些技术。 0x01 基本原理 提权前提条件 要利用Potato提权,需要具备以下权限之一: SeImpersonatePrivilege (模拟客户端权限) SeAssignPrimaryTokenPrivilege (分配主令牌权限) 默认拥有SeImpersonatePrivilege权限的用户 : 本地管理员账户(不包括管理员组普通账户) 本地服务账户 由服务控制管理器(SCM)启动的服务 注意 :即使通过本地策略授予管理员组普通用户SeImpersonatePrivilege特权,在cmd.exe中执行 whoami /priv 也不会显示该特权,且无法利用;而SeAssignPrimaryTokenPrivilege特权则可以正常授予普通用户。 Windows服务账户权限 以下Windows服务登录账户具有高权限: Local System ( NT AUTHORITY\SYSTEM ) Network Service ( NT AUTHORITY\Network Service ) Local Service ( NT AUTHORITY\Local Service ) Potato提权可以实现: Administrator → SYSTEM Service → SYSTEM Windows Token机制 Windows token是描述安全上下文的对象,包含: 用户账户的SID 用户所属组的SID 当前登录会话的登录SID 用户或用户组拥有的权限列表 所有者SID 所有者组的SID 访问控制列表 令牌来源 主令牌/模拟令牌 限制SID的可选列表 模拟等级 : Anonymous :无法模拟或识别客户端 Identification :可识别客户端身份和特权,不能模拟 Impersonation :可在本地系统模拟 Delegation :可在远程系统上模拟 关键API函数 CreateProcessWithTokenW :需要SeImpersonatePrivilege特权,以某个Token权限启动新进程 CreateProcessAsUserW :需要SeAssignPrimaryTokenPrivilege特权,以Token权限启动新进程 0x02 Potato家族技术详解 1. Hot Potato GitHub仓库 :https://github.com/foxglovesec/Potato 原理 : 通过HOST-DNS欺骗使UDP端口耗尽(利用NBNS) 通过伪造WPAD代理服务器劫持HTTP流量 HTTP到SMB的NTLM Relay(302重定向到本地,响应401触发NTLM认证) 特点 : 需要等待Windows Update服务触发(可能需要30-60分钟) 当Windows Update服务请求时,命令将以 NT AUTHORITY\SYSTEM 特权运行 2. Rotten Potato GitHub仓库 :https://github.com/foxglovesec/RottenPotato 原理 : 通过DCOM调用使服务向攻击者监听的端口发起连接并进行NTLM认证 需要SeImpersonatePrivilege权限 3. Juicy Potato(Rotten Potato增强版) GitHub仓库 :https://github.com/ohpe/juicy-potato 要求 : 需要SeImpersonate和SeAssignPrimaryToken两个权限 本地支持RPC或远程服务器支持RPC并能成功登录 用户具有SeImpersonate或SeAssignPrimaryToken权限 开启DCOM 可用的COM对象 使用示例 : 4. Ghost Potato GitHub仓库 :https://github.com/Ridter/GhostPotato 利用漏洞 :CVE-2019-1384(Ghost Potato),绕过MS-08068 原理 : 主机A向主机B进行SMB认证时,将pszTargetName设置为cifs/B 在type 2阶段拿到主机B发送的Challenge后,在lsass中缓存(Challenge, cifs/B) 主机B在拿到主机A的type 3后,会检查lsass中是否有缓存(Challenge, cifs/b) 如果存在缓存则认证失败 绕过缓存限制:lsass中的缓存300秒后自动消失,315秒后再发送Type3 5. Pipe Potato 原理 : 攻击者通过pipeserver.exe注册名为 pipexpipespoolss 的恶意命名管道 等待高权限用户连接以模拟其权限 通过spoolssClient.exe迫使SYSTEM用户访问恶意命名管道 模拟SYSTEM用户运行任意应用程序 技术细节 : 调用 CreateNamedPipe() 创建命名管道 调用 ConnectNamedPipe() 接受命名请求连接 迫使高权限进程连接该命名管道并写入数据 调用 ImpersonateNamedPipeClient() 派生高权限进程的客户端 衍生版本 :PrintSpoofer GitHub仓库 :https://github.com/itm4n/PrintSpoofer 特点 : 利用spoolsv.exe进程的RPC服务器强制Windows主机向其他计算机进行身份验证 需要SeImpersonatePrivilege和SeAssignPrimaryToken权限 6. Sweet Potato GitHub仓库 :https://github.com/CCob/SweetPotato 特点 : Juicy Potato的重写版 整合COM/WinRM/Spoolsv技术 支持从Windows 7到Windows 10/Windows Server 2019的本地服务到SYSTEM特权升级 相当于Juicy/PrintSpoofer的整合版 0x03 技术本质总结 Potato提权技术的核心原理可以归纳为: 诱使"SYSTEM"账户通过NTLM向控制的TCP节点进行身份验证 以本地协商"NT AUTHORITY\SYSTEM"账户的安全令牌进行NTLM Relay 模拟刚刚协商的令牌,达到提权目的 0x04 参考链接 Potato提权技术分析 Windows提权技术研究 Potato技术文档