January 20, 2023

Stocker Hack The Box WriteUp by artrone

Разведка

На повестке дня тачка Stocker с уровнем "Easy". Начать стоит с того, что машинка интересная, поскольку заставляет хорошо подумать на определенном этапе, который будет озвучен позже.
Предлагаю начать процесс. Как и всегда, начинаем наш путь со скана:

Ничего интересного я не увидел, лишь 22й и 80й открытый порт. Давайте перейдем по адресу на веб страницу, предварительно изменив /etc/hosts:

Красивый сайт, который прямо таки просит прошерстить его интересные директории)))

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

Ага, то то и оно. Опять редачим /etc/hosts и залетаем на сайт:

Нас встречает страница авторизации, которую нам нужно обойти. Стоит отметить, что Redis, MongoDB или memcached являются возможными вариантами СУБД на данной тачке. Выясним это попозже.

Поиск точки входа

Я перебирал стандартные NOSQL инъекции, что-то вроде такого:

Ничего не получалось, и я стал гуглить. Нашел просто прекрасную статью по NOSQL инъекциям, которую вы обязательно должны изучить.
Статья: https://book.hacktricks.xyz/pentesting-web/nosql-injection#basic-authentication-bypass
Итак, что мы имеем? Мы имеем возможность использовать инъекцию для обхода аутентификации:

Я использовал 3 запроса из данной статьи, 2 из которых оказались рабочими.

ВАЖНО: в запросе Content-Type нужно изменить на Content-Type: application/json, поскольку мы используем синтаксис json.

Славно, теперь мы имеем доступ к странице, обойдя аутентификацию.
Но как мы это поняли? Посмотрите на респонс в двух случаях: говорится, что пользователь найден и нас перенаправляет на "основную" страницу нашего поддомена:

Тут по сути нет ничего интересного, поэтому давайте поступим по "сценарию сайта"- добавим в корзину какой-нибудь товар и составим ордер:

Так, открылся pdf-файл, показывающий нам наш заказ. Ага, хорошо, но давайте мы перехватим запрос открытия этого документа и изучим его:

Как мы видим, "success":true, "orderId":"номер ордера", что говорит о корректном исполнении запроса.
А как можно использовать этот факт для личных целей?

Так как идет отправка заказа через API в расширение "json" (видно в запросе), а также в файле pdf столбец "Item" выдает нам строку из запроса "title":"Cup", то, я так думаю, можно изменить запрос нужным нам образом, используя тег <iframe></iframe>:

Минутка пояснений: <iframe></iframe> является контейнером, содержание которого игнорируется браузерами, не поддерживающими данный тег. Для таких браузеров можно указать альтернативный текст, который увидят пользователи.

Используя "title": "<iframe src=file:///etc/passwd></iframe>", мы получили положительный ответ, который мы откроем в браузере командой http://dev.stocker.htb/api/po/*ваш ордер айди* и проверим результат:

Отлично, мы успешно открыли файл "passwd", что дает нам возможность обнаружить пользователя angoose и понять, что можно сгенерировать новый запрос:

P.S. для корректного отображения нашей полезной нагрузки, я рекомендую добавить в запросе "title": "<iframe src=file:///etc/passwd height:800px width: 800px></iframe>"

Получение юзер флага

Так, теперь нужно определиться с дальнейшим ходом вещей. Так как на сайте используется Node.Js (чекаем wappalyzer), то и есть файл index.js, который мы вызовем:

Внимательно изучив документ, мы находим замечательную для нас строку и видим, что используется mongoDB:

Это ничто иное, как пароль для учетки с ником angoose.

Летим в ssh и забираем юзер флаг:

Повышение привелегий

Давайте стандартным образом посмотрим наши права:

Как мы можем видеть, у нас есть право запускать js скрипты от имена root'a, указывая путь /usr/bin/node.

Отлично, ведь это значит, что мы без проблем можем создать полезный js документ для буста)))

Будем использовать обход каталога и порождение дочернего процесса.

Подробнее: https://stackoverflow.com/questions/30134236/use-child-process-execsync-but-keep-output-in-console и https://nodejsdev.ru/api/child_process/

Далее "устанавливаем" bash и гордимся собой с +30 поинтами)))

Наш уютный ТГ-канал: https://t.me/hackerblog