域内提权票据篇之剖析经典漏洞MS14-068
字数 1741 2025-08-06 08:34:49

MS14-068漏洞分析与利用:域内提权票据攻击详解

一、背景知识:Kerberos与PAC机制

1. PAC介绍

Kerberos协议最初设计中没有明确区分不同权限用户的访问控制,微软通过引入PAC(Privilege Attribute Certificate)来解决这个问题。

PAC功能

  • 类似"飞机座位等级",通过PAC区分用户权限
  • 包含用户SID、组信息等权限属性

2. PAC实现机制

认证流程

  1. 用户与KDC完成认证后,Client请求服务
  2. Server将Client的User SID等信息传递给KDC验证
  3. KDC通过SID判断用户权限,返回结果给Server
  4. Server比较ACL决定是否提供服务

PAC传输

  • 在KRB_AS_REP阶段由AS放在TGT中加密发送给Client
  • Client转发给TGS验证服务请求

3. PAC安全机制

双重签名

  1. PAC_SERVER_CHECKSUM:用Server端密码HASH加密
  2. PAC_PRIVSVR_CHECKSUM:用KDC密码HASH加密

验证流程

  • TGS解密后验证签名
  • 构造新PAC放入ST返回给客户端
  • 客户端用ST向服务端验证

二、MS14-068漏洞概述

影响范围

  • Windows Server 2008/2003域环境
  • 允许普通域用户提权至域管理员

漏洞本质

  • 通过构造特殊Kerberos票据绕过PAC验证机制

三、漏洞原理深度分析

1. AS-REQ阶段:获取无PAC的TGT

攻击构造

as_req = build_as_req(user_realm, user_name, user_key, current_time, nonce, pac_request=False)

关键点

  • 设置include-pac=False获取无PAC的TGT
  • 使用RC4_HMAC加密算法
  • 用普通用户NTLM哈希加密时间戳通过认证

2. AS-REP阶段:接收无PAC的TGT

响应内容

  • 用户密码加密的session_key
  • 不带PAC的TGT票据

数据处理

as_rep, as_rep_enc = decrypt_as_rep(data, user_key)
session_key = (int(as_rep_enc'key'), str(as_rep_enc'key'))

3. TGS-REQ阶段:伪造高权限PAC

攻击核心

pac = (AD_WIN2K_PAC, build_pac(user_realm, user_name, user_sid, logon_time))

关键突破点

  1. 签名绕过
def checksum(cksumtype, data, key=None):
    if cksumtype == RSA_MD5:
        return MD5.new(data).digest()
    # ...
  • 使用RSA_MD5无需密钥即可生成签名
  • 本应使用HMAC需要密钥的算法
  1. 权限提升
  • 修改用户SID,添加高权限组ID(如512域管理员组)
  • 示例:S-1-5-21-1872928177-2865231364-3848160764-1107 → 添加-512
  1. PAC位置
  • 将伪造PAC放在加密授权数据中而非TGT内
  • 使用subkey加密PAC:
subkey = generate_subkey()  # 16位随机数

请求构造

tgs_req = build_tgs_req(user_realm, 'krbtgt', target_realm, user_realm, 
                       user_name, tgt_a, session_key, subkey, nonce, 
                       current_time, pac, pac_request=False)

4. TGS-REP阶段:获取高权限TGT

KDC处理流程

  1. 用session_key解密获取subkey
  2. 用subkey解密enc-authorization-data获取伪造PAC
  3. 验证签名(因使用MD5无需密钥可通过验证)
  4. 返回包含高权限PAC的新TGT

四、漏洞利用实战

1. 工具准备

  • PyKek:构造恶意票据
  • Mimikatz:票据操作
  • PsExec:远程执行

2. 攻击步骤

  1. 获取普通用户凭证

    • 用户名、密码/NTLM哈希、SID
  2. 生成恶意票据

    python ms14-068.py -u 普通用户@域名 -s SID -d 域控IP
    
  3. 导入票据

    mimikatz # kerberos::ptc 票据文件.ccache
    
  4. 验证权限

    • 访问域控共享:dir \\域控\c$
    • 获取shell:PsExec.exe \\域控 cmd.exe

3. 日志清除

kerberos::purge  # 清除票据缓存

五、防御与检测

1. 防御措施

  • 安装KB3011780补丁
  • 禁用RC4_HMAC加密算法

2. 检测方法

流量检测

  • AS-REQ中包含include-pac:False
  • 异常的TGS请求中包含自定义PAC

主机日志检测

  • 事件ID 4768:异常的TGT请求
  • 事件ID 4769:异常的TGS请求
  • 事件ID 4624:异常账户登录
  • 事件ID 5140:非常规用户访问敏感共享

六、技术总结

漏洞根源

  1. include-pac标志可设置为False获取无PAC的TGT
  2. PAC签名算法可被指定为无需密钥的MD5
  3. PAC可被放置在非标准位置仍能被KDC解析

攻击本质
通过构造"合法"的高权限PAC,利用Kerberos协议实现中的验证缺陷,使KDC误认为请求来自高权限用户。

七、参考资源

MS14-068漏洞分析与利用:域内提权票据攻击详解 一、背景知识:Kerberos与PAC机制 1. PAC介绍 Kerberos协议最初设计中没有明确区分不同权限用户的访问控制,微软通过引入PAC(Privilege Attribute Certificate)来解决这个问题。 PAC功能 : 类似"飞机座位等级",通过PAC区分用户权限 包含用户SID、组信息等权限属性 2. PAC实现机制 认证流程 : 用户与KDC完成认证后,Client请求服务 Server将Client的User SID等信息传递给KDC验证 KDC通过SID判断用户权限,返回结果给Server Server比较ACL决定是否提供服务 PAC传输 : 在KRB_ AS_ REP阶段由AS放在TGT中加密发送给Client Client转发给TGS验证服务请求 3. PAC安全机制 双重签名 : PAC_ SERVER_ CHECKSUM:用Server端密码HASH加密 PAC_ PRIVSVR_ CHECKSUM:用KDC密码HASH加密 验证流程 : TGS解密后验证签名 构造新PAC放入ST返回给客户端 客户端用ST向服务端验证 二、MS14-068漏洞概述 影响范围 : Windows Server 2008/2003域环境 允许普通域用户提权至域管理员 漏洞本质 : 通过构造特殊Kerberos票据绕过PAC验证机制 三、漏洞原理深度分析 1. AS-REQ阶段:获取无PAC的TGT 攻击构造 : 关键点 : 设置 include-pac=False 获取无PAC的TGT 使用RC4_ HMAC加密算法 用普通用户NTLM哈希加密时间戳通过认证 2. AS-REP阶段:接收无PAC的TGT 响应内容 : 用户密码加密的session_ key 不带PAC的TGT票据 数据处理 : 3. TGS-REQ阶段:伪造高权限PAC 攻击核心 : 关键突破点 : 签名绕过 : 使用RSA_ MD5无需密钥即可生成签名 本应使用HMAC需要密钥的算法 权限提升 : 修改用户SID,添加高权限组ID(如512域管理员组) 示例: S-1-5-21-1872928177-2865231364-3848160764-1107 → 添加 -512 PAC位置 : 将伪造PAC放在加密授权数据中而非TGT内 使用subkey加密PAC: 请求构造 : 4. TGS-REP阶段:获取高权限TGT KDC处理流程 : 用session_ key解密获取subkey 用subkey解密enc-authorization-data获取伪造PAC 验证签名(因使用MD5无需密钥可通过验证) 返回包含高权限PAC的新TGT 四、漏洞利用实战 1. 工具准备 PyKek:构造恶意票据 Mimikatz:票据操作 PsExec:远程执行 2. 攻击步骤 获取普通用户凭证 : 用户名、密码/NTLM哈希、SID 生成恶意票据 : 导入票据 : 验证权限 : 访问域控共享: dir \\域控\c$ 获取shell: PsExec.exe \\域控 cmd.exe 3. 日志清除 五、防御与检测 1. 防御措施 安装KB3011780补丁 禁用RC4_ HMAC加密算法 2. 检测方法 流量检测 : AS-REQ中包含 include-pac:False 异常的TGS请求中包含自定义PAC 主机日志检测 : 事件ID 4768:异常的TGT请求 事件ID 4769:异常的TGS请求 事件ID 4624:异常账户登录 事件ID 5140:非常规用户访问敏感共享 六、技术总结 漏洞根源 : include-pac 标志可设置为False获取无PAC的TGT PAC签名算法可被指定为无需密钥的MD5 PAC可被放置在非标准位置仍能被KDC解析 攻击本质 : 通过构造"合法"的高权限PAC,利用Kerberos协议实现中的验证缺陷,使KDC误认为请求来自高权限用户。 七、参考资源 Microsoft Kerberos Protocol Extensions PyKek工具源码