October 8, 2022

Shoppy Hack The Box WriteUp by artrone

*ЕСЛИ ВЫ УВИДЕЛИ ОШИБКУ ИЛИ НЕТОЧНОСТЬ- ПОЖАЛУЙСТА, ПОПРАВЬТЕ В КОММЕНТАРИЯХ*

Приветствую вас, господа и дамы. Сегодня мы разберем тачку с уровнем easy на платформе HTB - Shoppy. Прорешав её, я могу сказать, что машина само по себе легкая, но есть моменты, где нужно прям посидеть подумать. Так-с, предлагаю начать разбор:

Первым делом, сканим наш ip-шник с помощью nmap. Думаю, синтаксис более чем понятен и не требует разъяснений:

Оп, увидели открытый 80-й порт, славно. Давайте перейдем на сайт:

Нас встречает сайт shoppy.htb, красивый фон гор и обратный отсчет, круто. А что дальше?

Давайте попробуем найти директории сайта с помощью dirbuster'a и субдомены с помощью gobuster'a:

Ага! Нам удалось найти страницу авторизации /login, /admin и субдомен mattermost.

ВАЖНО! Для доступа к сайту shoppy.htb и mattermost.shoppy.htb их нужно добавить в /etc/hosts

Славно, теперь вернемся к нашей теме- перейдем на страницу авторизации:

На данном этапе пришлось попотеть- долго не мог понять какая бд стоит, какую инъекцию использовать. Перепробовал кучу вариантов, короче. В итоге, ответ оказался таким: сайт использует MongoDB NoSQL. Что это? Это кроссплатформенная программа баз данных, ориентированная на документооборот. Классифицированный как программа базы данных NoSQL, MongoDB использует JSON-подобные документы с дополнительными схемами. MongoDB разработан компанией MongoDB Inc. и лицензирован по публичной лицензии на стороне сервера (SSPL).

Но можно ли использовать инъекции в таком случае? Конечно можно!

Используем такую команду: admin'||'1==1 и вуаля!

Подробнее про MongoDB NoSQL инъекции: https://nullsweep.com/a-nosql-injection-primer-with-mongo/ и https://habr.com/ru/company/xakep/blog/143909/

После нажатия на кнопку "Авторизоваться", мы попадаем на страницу приложений.

У нас есть одна единственная кнопка- Поиск пользователей.

Так-с, предлагаю начать с "admin":

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

Нам выдало логин и хэш пароля. Но, как я полагаю, не может быть такого, что у нас всего 1 пользователь и это admin. А что если использовать нашу инъекцию в поиске пользователей? Хм, интересно.

Что-ж, была не была)

Вот оно! Получили учётку с ником "josh" и хэшем пароля. Уже есть какой-никакой успех. Предлагаю сразу воспользоваться hashcat'ом и получить пароль.

Решил использовать стандартный словарь rockyou.txt. Думаю, с синтаксисом не возникнет проблем, ведь всегда можно погуглить)

Добавлю, что файл hash.txt - это текстовик с хэшем, который мы получили.

Бинго! Пароль успешно получен. И что теперь? Напомню, что мы нашли субдомен mattermost.shoppy.htb. Давайте перейдем туда:

Нас опять встречает страница авторизации. Имея пароль, интуитивно понятно, что нам нужно зайти под пользователем "josh":

Попадаем на какую-то приборную доску. Исследовав сайт, мы находим раздел "deploy machine", в котором видим, что некий jaeger скинул нам свою учетку. Спасибо, jaeger! Полетели в ssh:

Ну тут все до боли понятно: вводим данные jaeger'а, пишем ls и получаем user-flag. Поздравляю, мы на финишной прямой! А что мы вообще можем делать под этим пользователем? Давайте глянем:

Опа! Можем запустить некий менеджер паролей. Ну давайте запустим его командой: sudo -u deploy /home/deploy/password-manager

Нас встречает окно аутентификации, в котором нужно ввести пароль. Можете, конечно, подобрать его самостоятельно, но я решить просмотреть код этого менеджера паролей:

Это было легко. Но ладно, расслабляться рано, двигаемся дальше. Давайте введем этот пароль в скрипт:

Получилось! Мы получили новую учётку пользователя. Заходим еще раз в ssh, но теперь с новыми данными:

И снова успех! Тут я решил открыть credts.txt, ничего серьезного, просто данные акка, с которого мы зашли. А что теперь делать? Воспользуемся Docker'ом. Что такое Докер? Простыми словами, Докер это инструмент, который позволяет разработчикам, системными администраторам и другим специалистам деплоить их приложения в песочнице (которые называются контейнерами), для запуска на целевой операционной системе, например, Linux. Ключевое преимущество Докера в том, что он позволяет пользователям упаковать приложение со всеми его зависимостями в стандартизированный модуль для разработки. В отличие от виртуальных машин, контейнеры не создают такой дополнительной нагрузки, поэтому с ними можно использовать систему и ресурсы более эффективно. Пишем команду:

docker run -v /:/mnt --rm -it alpine chroot /mnt sh

Подробнее о Докерах: https://gtfobins.github.io/gtfobins/docker/

Бум! Теперь мы root. Дело сделано, флаг получен.

P.S. Ребята, это мой первый райтап, поэтому не судите строго. Я очень старался написать как можно подробнее и понятнее. Если я где-то ошибся- поправьте меня в комментариях. Удачки!