看到网上有人公开了 CVE-2021-42287/CVE-2021-42278 权限提升漏洞的 EXP,本着学习的目的找了相关资料去研究。
该提权漏洞可以将域内的普通用户提升到域管权限,虽然需要一定条件,但危害还是很严重的。
由于当前对于这个漏洞的资料不是很系统和自己的理解不是很透彻,所以下文的分析不一定很准确。
1. 漏洞原理#
在了解该漏洞原理之前,需要先理解 Kerberos 协议的原理。
简单的理解就是:
Kerberos 协议分为三步
认证步骤 | 认证过程 | 认证结果 |
---|---|---|
AS 认证 | ASREQ & ASREP | 获得 TGT 认购权证 |
TGS 认证 | TGSREQ & TGSREP | 获得 ST 服务票据 |
TGS 认证 | AP-REQ & AP-REP | 客户端将与服务器建立连接 |
认证流程图如下:
CVE-2021-42278:
机器用户的账号形式是在账号名后面加上
$
,因为 DC 没有验证机器用户的账号末尾是否有$
,所以机器用户名被当作普通用户来执行操作。CVE-2021-42287:
与普通用户在获取 TGT 时,通过另一个用户去请求自己的 ST,然后将 TGT 发送给 KDC,因为 TGT 是用另一个用户的信息来获取的,所以 KDC 在数据库中找不到与之相匹配的用户信息,然后 KDC 去寻找机器用户的 ST,最后获得了机器用户的权限。
1.1 漏洞过程:#
- 利用域普通用户新增机器账号(域用户默认可以新增机器账号)
- 清除机器账号 SPN,更改机器名为域控名,并去除末尾的 $
- 以新增的机器账号向域控发起 Kerberos 请求认证获取 TGT(票据授权票据,票据的票据)
- 删除机器账号,用获取到 TGT 请求 ldap 管理员服务权限的 ST(Server Ticket)
- 域控解密 TGT 获取 PAC(Privilege Attribute
Certificate ),发现请求的是 ldap 管理员服务权限,并用 ldap 服务器管理员的 HASH 去加密 ST - ldap 服务器管理员用自身 HASH 解密出 PAC
- 通过 PAC 获取请求用户和被请求用户的信息,判断用户是否有访问服务的权限
- 这个判断过程需要请求域控,域控首先去数据库(活动目录)搜索请求方的相关信息,因为去除了
$
,所以会被当做域用户去搜索,当搜索不到信息时,会去搜索机器账号信息,然后在末尾加上$
- 这个时候,域控得到的信息是:域控机器想去请求 ldap 管理员服务,通过请求,这样只要请求域控就能获取域控权限
1.2 漏洞条件:#
- 低权限域账户可以创建和修改机器账户
- 在 AP_REP 的时候 (而非 TGS_REP) 在搜索不到用户的时候,去搜索机器用户,并在之后添加了 $
- 域控允许委派攻击
- DC 未打补丁 KB5008380 或 KB5008602
2. 影响版本#
CVE-2021-42278
○ Windows Server 2012 R2
○ Windows Server 2012 (Server Core installation)
○ Windows Server 2012
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1(Server Core installation)
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1
○ Windows Server 2008 for x64-based Systems Service Pack 2(Server Core installation)
○ Windows Server 2008 for x64-based Systems Service Pack 2
○ Windows Server 2008 for 32-bit Systems Service Pack 2(Server Core installation)
○ Windows Server 2008 for 32-bit Systems Service Pack 2
○ Windows Server 2016 (Server Core installation)
○ Windows Server 2016
○ Windows Server, version 20H2 (Server Core Installation)
○ Windows Server, version 2004 (Server Core installation)
○ Windows Server 2022 (Server Core installation)
○ Windows Server 2019 (Server Core installation)
○ Windows Server 2022○ Windows Server 2019
○ Windows Server 2012 R2 (Server Core installation)
CVE-2021-42287
○ Windows Server 2012 R2 (Server Core installation)
○ Windows Server 2012 R2
○ Windows Server 2012 (Server Core installation)
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1(Server Core installation)
○ Windows Server 2012
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1
○ Windows Server 2008 for x64-based Systems Service Pack 2(Server Core installation)
○ Windows Server 2008 for x64-based Systems Service Pack 2
○ Windows Server 2008 for 32-bit Systems Service Pack 2(Server Core installation)
○ Windows Server 2008 for 32-bit Systems Service Pack 2
○ Windows Server 2016 (Server Core installation)
○ Windows Server 2016○ Windows Server, version 20H2 (Server Core Installation)
○ Windows Server, version 2004 (Server Core installation)
○ Windows Server 2022 (Server Core installation)
○ Windows Server 2022
○ Windows Server 2019 (Server Core installation)
○ Windows Server 2019
3. 漏洞复现#
工具:
3.1 扫描探测#
noPac.exe scan -domain redteam.club -user xfeng -pass 123456
3.2 直接利用(noPac.exe)#
noPac.exe -domain redteam.club -user test -pass pass@123 /dc ad02.redteam.club /mAccount test123 /mPassword feng /service cifs /ptt
dir \\ad01.redteam.club\c$
psexec.exe \\ad01.redteam.club cmd.exe
4. 漏洞修复#
微软已经发布了安全补丁,具体可以查看链接
检查自己版本的 Windows 是否安装了对应的安全补丁
5. 参考文章#
https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html
https://www.thehacker.recipes/ad/movement/kerberos/samaccountname-spoofing