HTB Skyfall
Добываем ключ SSH из HashiCorp Vault
Наша цель — получение прав суперпользователя на машине Skyfall с учебной площадки Hack The Box. Уровень ее сложности — «безумный».
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.254 skyfall.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).

Сканер нашел всего два открытых порта:
- 22 — служба OpenSSH 8.9p1;
- 80 — веб‑сервер Nginx 1.18.0.
Сразу проверяем, что нам покажет веб‑сервер, и видим главную страницу сайта.

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

Прежде чем смотреть этот сайт, сначала обновим запись в /
:
10.10.11.254 skyfall.htb demo.skyfall.htb
На найденном сайте нас встречает форма авторизации.

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

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

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


В представленной таблице видим minio_endpoint_url
. Поскольку мы нашли еще один поддомен, добавим и его в /
.
10.10.11.254 skyfall.htb demo.skyfall.htb prd23-s3-backend.skyfall.htb
А теперь посмотрим, что там.

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

Для работы с 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

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

Чтобы не просматривать каждый каталог отдельно, можно выполнить рекурсивный вывод содержимого.
./mc ls --recursive --versions myminio

В каталоге askyy
есть три версии архива home_backup.
. Конечно же, скачаем их на локальный хост.
./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.
.
grep -iR skyfall.htb ./home_backup_*/

В итоге находим еще один новый ресурс — prd23-vault-internal.
. Добавим в /
и его.
10.10.11.254 skyfall.htb demo.skyfall.htb prd23-s3-backend.skyfall.htb prd23-vault-internal.skyfall.htb
Просматриваем файл .
и находим там еще и VAULT_TOKEN
.

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

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

А теперь подключаемся по 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
Файл /
в Linux содержит списки команд, которые разные группы пользователей могут выполнять от имени администратора системы. Можно просмотреть его как напрямую, так и при помощи команды sudo
.
Пользователь может выполнить следующую команду от имени 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.
, но доступа к нему у нас нет.

Что если попробовать создать этот файл заранее? Трюк сработал: запись в файл происходит, но при этом право доступа не изменилось.
rm -rf debug.log
touch debug.log
sudo /root/vault/vault-unseal -c /etc/vault-unseal.yaml -d

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

Как и в прошлый раз пройдем аутентификацию Vault и запросим роли.
export VAULT_ADDR="http://prd23-vault-internal.skyfall.htb/"export VAULT_TOKEN="hvs.I0ewVsmaKU1SwVZAKR3T0mmG"./vault login

./vault list ssh/roles

А теперь подключаемся по SSH от имени пользователя root
, указывая роль admin_otp_key_role
, и забираем последний флаг.
./vault ssh -role admin_otp_key_role -mode otp root@10.10.11.254

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