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
原理:
- 通过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对象
使用示例:
JuicyPotato -p "whoami /priv"
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
- 模拟刚刚协商的令牌,达到提权目的