Сканируем сеть и ищем рабочие хосты:
nmap -sn --min-parallelism 300 --min-rate 200 10.10.0.0/16
В результате сканирования замечаем подозрительный HTTP-порт 80/tcp на узле 10.10.1.100. На данном узле обнаруживается кастомный сервис для хранения файлов.
Поле, принимающее путь в сети интернет до файла, уязвимо для SSRF.
Так как мы находимся в одной сети с HTTP-приложением, имеется возможность "попросить" приложение пройти NTLM-авторизацию.
Хорошо, к нам пришёл NetNTLMv2-хеш машинной учетной записи. Сделать downgrade-атаку не удаётся, провести brute-force атаку на хеш машинной учетной записи невозможно, поэтому пробуем Relay-атаку с последующей эксплуатацией Resource Based Constrained Delegation (RBCD) на узле Front. Для эксплуатации RBCD нужно иметь свою машинную учетную запись в домене, поэтому первым шагом добавим её в домен с помощью Relay-атаки.
Запускаем инструмент ntlmrelayx и вынуждаем приложение обратиться к нам по протоколу HTTP.
Теперь у нас есть своя машина в домене - "test$".
Далее проведем эксплуатацию RBCD с использованием машины "test$".
Теперь от машины "test" мы можем запросить TGS-билет для узла Front от пользователя "Administrator" через механизмы S4U2Self и S4U2Proxy.
Далее загружаем в переменную KRB5CCNAME полученный билет и извлекаем NTLM-хеш пароля машинной учетной записи на узле Front.
Мы захватили сервер Front, можем читать флаг.
Используя учетную запись в домене, проводим сбор информации. С помощью скрипта findDelegation.py из Impacket обнаруживаем, что с сервера Front на сервер FileSRV задана ограниченная Kerberos-делегация (any auth).
Имея доступ к NTLM-хешу машинной учетной записи сервера Front можно сразу выписать TGS-билет на сервер FileSRV от пользователя "Admiinistrator" через механизмы S4U2Self/S4U2Proxy.
Далее используем полученный билет для доступа на сервер FileSRV, меняем пароль локального администратора и получаем доступ к хранилищу LSA на сервере FileSRV.
Мы захватили сервер Front, можем читать флаг.
Захватывать контроллер домена мы будем через эксплуатацию Unconstrained Kerberos Delegation. Информацию о Unconstrained delegation мы получили, когда запускали скрипт findDelegation.py из Impacket.
Для эксплуатации воспользуемся набором инструментов исследователя Dirk-jan - https://github.com/dirkjanm/krbrelayx.
Первым шагом нам необходимо добавить DNS-запись в домен, которая позволит определить наш ip-адрес (resolve), так как Kerberos работает только через имена, с ip-адресами Kerberos не работает.
Затем зарегистрируем на машину с Unconstrained Delegation SPN, ссылающийся на наш хост.
Теперь при обращении на bsc.bank.msk любой в домене будет обращаться на наш хост. Более того, при получении TGS-билета для любой SPN на bsc.bank.msk, в TGS-билет, зашифрованный на ключе AES256 машинной учетной записи FileSRV, будет упакован TGT-билет клиента. Таким образом, у нас все готово для атаки и теперь нужно вынудить DC обратиться по SMB к нам и извлечь из TGS TGT-билет контроллера домена.
Запускаем krbrelayx с ключем AES256 машинной учетной записи FileSRV.
И с помощью инструмента printerbug просим DC обратиться к нам.
Теперь мы получили TGT-билет контроллера домена и можем сделать атаку DcSync.
С полученной учетной записи администратора заходим на контроллер домена и забираем последний флаг.