June 22, 2024

(Write-up) Ломаем машину "Perfection" на платформе HackTheBox

Доброго времени суток , дорогие читатели! Сегодня мы с вами окунемся в дебри SSTI , которая поможет нам получить реверс-шелл, а также побрутим хэш c помощью утилиты hashcat

Разведка

Первым делом просканируем целовой хост на открытые порты:

Сканирование хоста с помощью утилиты "nmap"

Ключ позволяет нам детекить операционную систему, версию, различные сценарии

Далее пофаззим директории с помощью инструмента dirsearch:

Фаззинг директорий с помощью инструмента dirsearch

Ничего интересного фаззинг нам не предоставил, перейдем в каталог /about:

Изучив сайт , перейдем в каталог /weight-grade-calc и увидим следующую картину:

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

Используя BurpSuite получим информацию , что сервер поднят на WEBrick 1.7.0, который, в свою очередь, основан на Ruby 3.0.2. Это все, что нам нужно знать, чтобы начать эксплуатацию.

Получаем User флаг

Изучая информацию про WebRick и Ruby, я наткнулся на то, что существует 3 шаблона Ruby: ERB, HAML и Slim, из которых ERB является более распространенным, так как он устанавливается по умолчанию. В поисках полезных данных о Ruby ERB exploit наткнулся на этот ресурс:

На скриншоте выше представлен перечень полезных нагрузок для проверки на наличие уязвимости SSTI.


SSTI (Server Side Template Injection) - это уявимость, которая может возникнуть в веб-приложениях, когда злоумышленник может внедрить вредоносный код в шаблон на стороне сервера.

Под шаблоном на стороне сервера подразумевается файл или фрагмент кода, который определяет, как веб-приложение будет отображать данные пользователям. Обычно он выполняется на стороне сервера и генерирует динамический контент, который отправляется в браузер пользователя. При атаке SSTI злоумышленник может внедрить свой собственный код в шаблон на стороне сервера, что позволяет ему выполнять произвольный код на сервере, манипулировать данными или получать доступ к конфиденциальной информации.

Пример вредносного HTTP-запроса злоумышленника:

GET /search?q={{import os; os.system('/bin/bash')}} HTTP/1.1
Host: example.com

Подтвердим нашу теорию про наличие SSTI на стороне сервера, перехватив POST HTTP-запрос Бурпом:

Можно заметить , что присутсвует базовая фильтрация ввода, а что если немного поменять полезную нагрузку? Попробовав много вариантов, я нашел обход фильтрации:

Теперь дело за малым , начнем принимать соединения на наш кастомный порт с помощью netcat :

И отправим POST запрос, который позволит получить реверс шелл на нашу машину:

Бинго! Мы внутри. Теперь поизучаем каталоги , для получения нашего юзер флага:

Эскалация привилегий

В результате изучения директорий я наткнулся на каталог /Migration, в которой лежал файл с кредами от базы данных:

Проанализиурем наш хэш с помощью hashid:

При дальнейшем изучении каталогов я нашел письмо со следующим содержанием:

> cat /var/mail/susan

Due to our transition to Jupiter Grades because of the PupilPath data breach, I thought we should also migrate our credentials ('our' including the other students

in our class) to the new platform. I also suggest a new password specification, to make things easier for everyone. The password format is:

{firstname}_{firstname backwards}_{randomly generated integer between 1 and 1,000,000,000}

Note that all letters of the first name should be convered into lowercase.

Please hit me with updates on the migration when you can. I am currently registering our university with the platform.

- Tina, your delightful student'

Данное письмо содержит шаблон создания пароля . Поскольку у нас также есть хэш пароля, мы можем провести атаку по хэш-маске.


hashcat -m 1400 hash.txt -a 3 -d 1 susan_nasus_?d?d?d?d?d?d?d?d?d

Что делает каждая часть:

  • -m 1400: Указывает Hashcat использовать режим 1400, который соответствует алгоритму хеширования SHA-512/256, используемому bcrypt.
  • hash.txt: Это файл, содержащий хешированные пароли
  • -a 3: Устанавливает тип атаки на перебор по маске (атака с использованием настраиваемой маски символов).
  • -d 1: Указывает Hashcat использовать только одно ядро (GPU) в нашей системе.
  • susan_nasus_?d?d?d?d?d?d?d?d?d?d: Это маска, определяющая формат пароля, который мы будем брутить.
    • susan_nasus_ - Фиксированная часть пароля.
    • ?d - Представляет одну цифру (0-9). В маске 11 таких символов, что означает, что Hashcat будет проверять все возможные комбинации 11 цифр после "susan_nasus_".

В результате получаем следующее:

Получаем ROOT флаг

Теперь у нас есть пароль, давайте подключимся по SSH к этой учетке и проверим ее права в системе:

Отлично, запустим нашу root-оболочку

> sudo su

И заберем наш root флаг:

Машина взломана!