(Write-up) Ломаем машину "Perfection" на платформе HackTheBox
Доброго времени суток , дорогие читатели! Сегодня мы с вами окунемся в дебри SSTI , которая поможет нам получить реверс-шелл, а также побрутим хэш c помощью утилиты hashcat
Разведка
Первым делом просканируем целовой хост на открытые порты:
Ключ -А позволяет нам детекить операционную систему, версию, различные сценарии
Далее пофаззим директории с помощью инструмента 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: Это маска, определяющая формат пароля, который мы будем брутить.
В результате получаем следующее:
Получаем ROOT флаг
Теперь у нас есть пароль, давайте подключимся по SSH к этой учетке и проверим ее права в системе:
Отлично, запустим нашу root-оболочку
> sudo su