土豆家族提权原理分析
字数 3117 2025-08-30 06:50:11

Windows 土豆家族提权漏洞分析与防御指南

概述

土豆家族(Tatoo Family)是一系列Windows提权漏洞的统称,这些漏洞利用Windows认证机制中的缺陷,通过NTLM中继、COM/DCOM组件滥用等技术实现从低权限账户(如IIS用户、服务账户)到SYSTEM权限的提权。本文将对Hot Potato、Rotten Potato、Juicy Potato、Rogue Potato、PrintSpoofer、PrintNotifyPotato/JuicyPotatoNG和GodPotato等漏洞进行详细分析。

1. Hot Potato (热土豆)

1.1 漏洞原理

Hot Potato是最初的土豆提权漏洞,由@breenmachine在2016年披露,利用流程如下:

  1. NBNS欺骗:当DNS解析失败时,Windows会尝试NBNS解析主机名
  2. 构造本地HTTP,响应WPAD:劫持WPAD后返回自定义PAC文件
  3. HTTP-SMB NTLM Relay:截获认证过程并转发
  4. 等待高权限进程访问:利用Windows更新服务(wuauserv)的SYSTEM权限

1.2 利用过程

NBNS欺骗

  • 使用UDP端口耗尽技术使DNS解析失败
  • 暴力匹配NBNS查询包中的TXID字段(2字节)
  • 构造虚假数据包响应WPAD查询

WPAD代理设置

返回的PAC文件示例:

function FindProxyForURL(url, host) {
    return "PROXY attacker_ip:80";
}

NTLM中继攻击

  • 当SYSTEM权限的wuauserv服务检查更新时
  • 流量被代理到攻击者机器
  • 截获NTLM认证并中继

1.3 防御措施

  • MS16-075补丁修复跨协议中继
  • CVE-2016-3213修复WPAD解析
  • CVE-2016-3236使请求PAC文件时不发送凭据

2. Rotten Potato (烂土豆)

2.1 漏洞原理

Rotten Potato同样由@breenmachine在2016年披露,优点是不需要等待触发,利用DCOM激活服务实现立即提权。

关键知识

  • AcceptSecurityContext API处理NTLM服务端流程
  • DCOM远程连接时使用SYSTEM权限(如BITS服务)
  • LocalService默认具有SeImpersonateSeAssignPrimaryToken权限

2.2 利用过程

  1. CoGetInstanceFromIStorage调用

    • 使用BITS服务的CLSID:{4991d34b-80a1-4291-83b6-3328366b9097}
    • 指定恶意代理地址激活COM对象
  2. DCOM发送NTLM协商包

    • SYSTEM进程连接时发起NTLM_NEGOTIATE
  3. 代理转发与令牌模拟

    • 调用AcceptSecurityContext处理NTLM_NEGOTIATE
    • 将协商包发送到本地135端口获取NTLM_CHALLENGE
    • 替换CHALLENGE值并返回给DCOM
    • 使用ImpersonateSecurityContext获取SYSTEM令牌

2.3 防御措施

Windows 10 1809和Windows Server 2019后失效,因DCOM和OXID解析器补丁。

3. Juicy Potato

3.1 改进点

在Rotten Potato基础上改进:

  1. CLSID扩展:发现多个可滥用的COM服务器CLSID
    • 需满足:可被当前用户实例化、实现IMarshal接口、以高权限运行
  2. 进程创建优化
    • SeImpersonate权限时使用CreateProcessWithToken
    • SeAssignPrimaryToken权限时使用CreateProcessAsUser

3.2 防御措施

同Rotten Potato,因微软修复OXID解析器相关漏洞。

4. Rogue Potato

4.1 背景

针对Windows Server 2019和Win10 1809后版本,JuicyPotato失效后的改进方案。

关键知识

  • RPCSS服务:COM/DCOM的服务控制管理器
  • OXID解析:客户端通过OXID查询获取DCOM服务器绑定信息
  • ResolveOxid2函数:解析OXID查询请求

4.2 利用过程

  1. 触发COM服务连接远程135端口

    • 指定远程OXID解析器IP
    • 使用CoGetInstanceFromIStorage触发DCOM激活
  2. 伪造ResolveOxid2响应

    • 远程135端口转发到恶意OXID解析服务
    • 返回篡改的绑定信息:ncacn_np:localhost/pipe/roguepotato[\pipe\epmapper]
  3. 身份模拟

    • 创建命名管道\\.\pipe\roguepotato\pipe\epmapper
    • RPCSS连接后调用ImpersonateNamedPipeClient
  4. 令牌窃取

    • 模拟RPCSS服务身份
    • 枚举进程句柄找到SYSTEM令牌
    • 使用CreateProcessAsUser创建高权限进程

4.3 防御措施

目前仍然有效。

5. PrintSpoofer (PipePotato/BadPotato)

5.1 漏洞原理

利用spoolsv.exe服务的RpcRemoteFindFirstPrinterChangeNotificationEx函数,通过命名管道模拟获取SYSTEM令牌。

关键技巧

  • 传递\\127.0.0.1/pipe/foo时路径标准化为\\127.0.0.1\pipe\foo\pipe\spoolss
  • 注册该命名管道窃取token

5.2 防御措施

使用CreateFile打开命名管道时添加SECURITY_IDENTIFICATION flag,但目前无官方补丁。

6. PrintNotifyPotato/JuicyPotatoNG

6.1 改进点

  • 使用PrintNotify服务的CLSID(Impersonation level为impersonation)
  • 通过LogonUser函数使用LogonNewCredentials添加INTERACTIVE组
  • 本地利用需结合James Forshaw的DCOM认证中继技术

7. GodPotato

7.1 利用过程

  1. 初始化与RPC接口定位

    • 定位18f70770-8e64-11cf-9af1-0020af6e72f4接口GUID
    • 解析_UseProtSeq函数
  2. 关键函数挂钩

    • 创建_UseProtSeq代理函数
    • 修改RPC调度表函数指针
  3. RPC重定向

    • 创建命名管道\\.\pipe\GodPotato\pipe\epmapper
    • 重定向RPC调用到命名管道
  4. 身份模拟与提权

    • 调用ImpersonateNamedPipeClient
    • 获取SYSTEM令牌并创建进程

防御建议

  1. 通用防御措施

    • 禁用不必要的服务账户的SeImpersonateSeAssignPrimaryToken权限
    • 启用SMB签名和LDAP签名
    • 限制命名管道访问权限
  2. 针对特定漏洞

    • 安装最新安全补丁
    • 监控异常进程创建和令牌模拟行为
    • 限制DCOM和RPC通信
  3. 检测与响应

    • 监控异常OXID解析请求
    • 检测异常的命名管道创建和连接
    • 分析可疑的NTLM认证流量

总结

土豆家族漏洞展示了Windows认证和授权机制中的深层次问题,从最初的Hot Potato到最新的GodPotato,攻击技术不断演进以绕过微软的防御措施。理解这些漏洞的原理对于有效防御权限提升攻击至关重要。

Windows 土豆家族提权漏洞分析与防御指南 概述 土豆家族(Tatoo Family)是一系列Windows提权漏洞的统称,这些漏洞利用Windows认证机制中的缺陷,通过NTLM中继、COM/DCOM组件滥用等技术实现从低权限账户(如IIS用户、服务账户)到SYSTEM权限的提权。本文将对Hot Potato、Rotten Potato、Juicy Potato、Rogue Potato、PrintSpoofer、PrintNotifyPotato/JuicyPotatoNG和GodPotato等漏洞进行详细分析。 1. Hot Potato (热土豆) 1.1 漏洞原理 Hot Potato是最初的土豆提权漏洞,由@breenmachine在2016年披露,利用流程如下: NBNS欺骗 :当DNS解析失败时,Windows会尝试NBNS解析主机名 构造本地HTTP,响应WPAD :劫持WPAD后返回自定义PAC文件 HTTP-SMB NTLM Relay :截获认证过程并转发 等待高权限进程访问 :利用Windows更新服务(wuauserv)的SYSTEM权限 1.2 利用过程 NBNS欺骗 使用UDP端口耗尽技术使DNS解析失败 暴力匹配NBNS查询包中的TXID字段(2字节) 构造虚假数据包响应WPAD查询 WPAD代理设置 返回的PAC文件示例: NTLM中继攻击 当SYSTEM权限的wuauserv服务检查更新时 流量被代理到攻击者机器 截获NTLM认证并中继 1.3 防御措施 MS16-075补丁修复跨协议中继 CVE-2016-3213修复WPAD解析 CVE-2016-3236使请求PAC文件时不发送凭据 2. Rotten Potato (烂土豆) 2.1 漏洞原理 Rotten Potato同样由@breenmachine在2016年披露,优点是不需要等待触发,利用DCOM激活服务实现立即提权。 关键知识 AcceptSecurityContext API处理NTLM服务端流程 DCOM远程连接时使用SYSTEM权限(如BITS服务) LocalService默认具有 SeImpersonate 和 SeAssignPrimaryToken 权限 2.2 利用过程 CoGetInstanceFromIStorage调用 使用BITS服务的CLSID: {4991d34b-80a1-4291-83b6-3328366b9097} 指定恶意代理地址激活COM对象 DCOM发送NTLM协商包 SYSTEM进程连接时发起NTLM_ NEGOTIATE 代理转发与令牌模拟 调用 AcceptSecurityContext 处理NTLM_ NEGOTIATE 将协商包发送到本地135端口获取NTLM_ CHALLENGE 替换CHALLENGE值并返回给DCOM 使用 ImpersonateSecurityContext 获取SYSTEM令牌 2.3 防御措施 Windows 10 1809和Windows Server 2019后失效,因DCOM和OXID解析器补丁。 3. Juicy Potato 3.1 改进点 在Rotten Potato基础上改进: CLSID扩展 :发现多个可滥用的COM服务器CLSID 需满足:可被当前用户实例化、实现IMarshal接口、以高权限运行 进程创建优化 : SeImpersonate 权限时使用 CreateProcessWithToken SeAssignPrimaryToken 权限时使用 CreateProcessAsUser 3.2 防御措施 同Rotten Potato,因微软修复OXID解析器相关漏洞。 4. Rogue Potato 4.1 背景 针对Windows Server 2019和Win10 1809后版本,JuicyPotato失效后的改进方案。 关键知识 RPCSS服务 :COM/DCOM的服务控制管理器 OXID解析 :客户端通过OXID查询获取DCOM服务器绑定信息 ResolveOxid2函数 :解析OXID查询请求 4.2 利用过程 触发COM服务连接远程135端口 指定远程OXID解析器IP 使用 CoGetInstanceFromIStorage 触发DCOM激活 伪造ResolveOxid2响应 远程135端口转发到恶意OXID解析服务 返回篡改的绑定信息: ncacn_np:localhost/pipe/roguepotato[\pipe\epmapper] 身份模拟 创建命名管道 \\.\pipe\roguepotato\pipe\epmapper RPCSS连接后调用 ImpersonateNamedPipeClient 令牌窃取 模拟RPCSS服务身份 枚举进程句柄找到SYSTEM令牌 使用 CreateProcessAsUser 创建高权限进程 4.3 防御措施 目前仍然有效。 5. PrintSpoofer (PipePotato/BadPotato) 5.1 漏洞原理 利用 spoolsv.exe 服务的 RpcRemoteFindFirstPrinterChangeNotificationEx 函数,通过命名管道模拟获取SYSTEM令牌。 关键技巧 传递 \\127.0.0.1/pipe/foo 时路径标准化为 \\127.0.0.1\pipe\foo\pipe\spoolss 注册该命名管道窃取token 5.2 防御措施 使用 CreateFile 打开命名管道时添加 SECURITY_IDENTIFICATION flag,但目前无官方补丁。 6. PrintNotifyPotato/JuicyPotatoNG 6.1 改进点 使用 PrintNotify 服务的CLSID(Impersonation level为impersonation) 通过 LogonUser 函数使用 LogonNewCredentials 添加INTERACTIVE组 本地利用需结合James Forshaw的DCOM认证中继技术 7. GodPotato 7.1 利用过程 初始化与RPC接口定位 定位 18f70770-8e64-11cf-9af1-0020af6e72f4 接口GUID 解析 _UseProtSeq 函数 关键函数挂钩 创建 _UseProtSeq 代理函数 修改RPC调度表函数指针 RPC重定向 创建命名管道 \\.\pipe\GodPotato\pipe\epmapper 重定向RPC调用到命名管道 身份模拟与提权 调用 ImpersonateNamedPipeClient 获取SYSTEM令牌并创建进程 防御建议 通用防御措施 : 禁用不必要的服务账户的 SeImpersonate 和 SeAssignPrimaryToken 权限 启用SMB签名和LDAP签名 限制命名管道访问权限 针对特定漏洞 : 安装最新安全补丁 监控异常进程创建和令牌模拟行为 限制DCOM和RPC通信 检测与响应 : 监控异常OXID解析请求 检测异常的命名管道创建和连接 分析可疑的NTLM认证流量 总结 土豆家族漏洞展示了Windows认证和授权机制中的深层次问题,从最初的Hot Potato到最新的GodPotato,攻击技术不断演进以绕过微软的防御措施。理解这些漏洞的原理对于有效防御权限提升攻击至关重要。