HTB Shared. Повышаем привилегии через уязвимость в Redis
the Matrix
Тренироваться будем на средней по сложности машине Shared с площадки Hack The Box.
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts:
И запускаем сканирование портов.
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Видим всего два открытых порта:
Начнем с сайта. Порт 80 нас перекидывает на 443. В результатах скана находим поле сертификата commonName, он действителен для любого поддомена shared.htb.

Это сайт какого‑то интернет‑магазина. Попробуем совершить покупку.

При попытке перейти к оплате нас кидает на другой поддомен.

Добавим его в /etc/hosts и повторим действия.

В Burp History при анализе запросов мы видим название параметра Cookie PrestaShop. PrestaShop — это опенсорсный движок для интернет‑магазинов. Он написан на PHP и фреймворке Symfony, для шаблонов используется Twig, для хранения данных — MySQL.

Я нашел в интернете несколько готовых эксплоитов, но в данном случае они неприменимы. Поэтому я решил обратить внимание на то, что данные между двумя сайтами — магазином и платежным сервисом — передаются в заголовке Cookie.

Я попробовал несколько разных нагрузок и определил, что здесь возможна SQL-инъекция. Отправляем запрос, условие которого всегда истина, и получаем товар в чеке.

Давай теперь проэксплуатируем SQL-инъекцию. Сначала определим число столбцов. Для этого используем UNION с переменным количеством столбцов. Так, при объединении с таблицей, имеющей один или два столбца, будет ошибка, а при трех столбцах — внятный вывод.

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

Затем выводим текущую базу данных, что дает нам возможность с помощью служебной базы information_schema и таблицы tables получить названия таблиц. Чтобы вывести несколько строк в одну, нам нужно их объединить с помощью функции group_concat.

Теперь логично получить названия столбцов. Запросим записи из таблицы columns базы information_schema.

Имя пользователя и пароль — как и заказывали. В group_concat объединим учетные данные через символ :.

Есть хеш, а значит, отправляемся к онлайновой базе CrackStation, которая поможет нам сбрутить пароль.

С полученной парой из логина и пароля можем попробовать авторизоваться по SSH.

Получилось!
Теперь, когда мы получили доступ к хосту, нам нужно собрать информацию. Я для этого использую скрипты PEASS.
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов, которые проверяют систему на автомате.
Загрузим на локальный хост скрипт для Linux, дадим право на выполнение chmod +x linpeas.sh и выполним. В выводе будет много информации, но меня заинтересовало то, что есть файл, доступный для записи группе разработчиков, в которой мы состоим.

Ничего полезного тут нет, поэтому продолжим разведку и отследим запускаемые процессы. Для этого я рекомендую pspy64. Загрузим его на хост тем же способом, что и linpeas, а потом выполним. В выводе отмечаем запуск ipython из найденного ранее каталога. Что более интересно, он запускается в контексте пользователя с UID 1001.

Определить целевого пользователя можно через файл /etc/passwd. Это dan_smith.

Порывшись в интернете, я нашел эксплоит для IPython! Он произвольно выполняет в текущем каталоге файл profile_default/startup/foo.py.
Создадим его по нужному пути:
И положим внутрь такую строчку:
Так мы попробуем сохранить приватный ключ пользователя в файл /dev/shm/key. Периодически проверяем, не появился ли он, и через какое‑то время получаем ключ.

Подключаемся по SSH и забираем первый флаг.

Снова используем PEASS и с его помощью обнаруживаем следующее.


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

Скопируем файл на локальный хост с помощью SSH.
Затем откроем листенер на порте 6379, чтобы отобразить полученные данные. А когда все будет готово, запустим приложение.


В последней строке логов видим пароль для подключения к Redis.
Redis — резидентная система управления базами данных класса NoSQL с открытым исходным кодом, работающая со структурами данных типа «ключ — значение». Используется как для баз данных, так и для реализации кешей, брокеров сообщений. Из последних уязвимостей я вспомнил CVE-2022-0543. Дело в том, что из‑за проблемы с упаковкой СУБД Redis подвержена выходу из песочницы Lua, а это может привести к удаленному выполнению кода (RCE). В данном случае еще и с высокими привилегиями.
Подключимся к Redis и авторизуемся:
Теперь попробуем с помощью следующей нагрузки выполнить команду id.

Команда выполнена, и, как мы видим, в контексте пользователя root. Теперь запустим реверс‑шелл:
Я записал его в файл /dev/shm/r.sh.
Перед выполнением активируем листенер: pwncat_cs -lp 4321.

Машина захвачена!
Источник
Наши проекты:
- Кибер новости: the Matrix
- Хакинг: /me Hacker
- Кодинг: Minor Code
👁 Пробить человека? Легко через нашего бота: Мистер Пробиватор