CVE 2021-42278-42287-域内提权

看到网上有人公开了 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. 影响版本

Copy
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. 漏洞复现

工具：

https://github.com/WazeHell/sam-the-admin.git

https://github.com/Ridter/noPac.git

3.1 扫描探测

Copy
noPac.exe scan -domain redteam.club -user xfeng -pass 123456

3.2 直接利用（noPac.exe）

Copy
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$

Copy
psexec.exe \\ad01.redteam.club cmd.exe

4. 漏洞修复

微软已经发布了安全补丁，具体可以查看链接

检查自己版本的 Windows 是否安装了对应的安全补丁

5. 参考文章