看到网上有人公开了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. 影响版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
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 扫描探测
1
|
noPac.exe scan -domain redteam.club -user xfeng -pass 123456
|
3.2 直接利用(noPac.exe)
1
2
3
|
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$
|
1
|
psexec.exe \\\\ad01.redteam.club cmd.exe
|
4. 漏洞修复
微软已经发布了安全补丁,具体可以查看链接
检查自己版本的Windows是否安装了对应的安全补丁
5. 参考文章
https://twitter.com/brdpoker/status/1458141826783662084
https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html
https://www.thehacker.recipes/ad/movement/kerberos/samaccountname-spoofing