Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.156 late.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).

Находим всего два открытых порта:
- 22 — служба OpenSSH 7.6p1;
- 80 — веб‑сервер Nginx 1.14.0.
Брутить SSH смысла нет, поэтому начинаем исследование с веб‑сервера.
Справка: брутфорс учеток
Поскольку вначале у нас нет учетных данных, нет и смысла изучать службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы можем делать здесь, — это перебирать пароли брутфорсом, но машины с HTB почти всегда можно пройти по‑другому. В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социальной инженерии.
Заглянем на сайт через браузер.

Точка входа
На сайте видим всего две страницы: Home (текущая) и Contact. Попробуем поискать скрытый контент.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-
-w
— словарь (я использую словари из набора SecLists); -
-t
— количество потоков; -
-u
— URL; -
-fc
— исключить из результата ответы с кодом 403.
Запускаем ffuf:
ffuf -u 'http://late.htb/FUZZ' -t 256 -w directory_2.3_medium_lowercase.txt

Снова ничего интересного. Тогда перейдем к сканированию файлов HTML (ведь нас встретили именно такие статические страницы):
ffuf -u 'http://late.htb/FUZZ.html' -t 256 -w directory_2.3_medium_lowercase.txt

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


Найденный поддомен добавим в файл /
и заглянем на расположенный там сайт.
10.10.11.156 late.htb images.late.htb

Нас встречает преобразователь изображений в текст, написанный с использованием Flask, а это значит, что нужно сразу проверить наличие уязвимостей SSTI.
Точка опоры
Я решил отправить первое попавшееся под руку изображение, чтобы посмотреть, как работает этот конвертер, и в ответ получил запрос на сохранение файла. Файл содержал весь текст с отправленного изображения, заключенный в тег <
.

От SSTI к RCE
Раз мы можем управлять кодом на странице, попробуем проэксплуатировать SSTI.
Справка: server-side template injection
Server-side template injection (SSTI), или инъекция шаблонов на стороне сервера, — это механизм атаки, при котором злоумышленник внедряет в шаблон вредоносный код. Шаблоны нужны веб‑разработчикам, чтобы можно было настраивать внешний вид сайта только в одном месте и затем не копировать вручную. По сути, шаблон — это документ HTML, где в нужных местах отмечены переменные и команды, которые при генерации итоговой страницы будут заменены данными. В том числе это могут быть и данные, полученные от посетителя сайта.
Атака затрагивает момент, когда присланная информация объединяется с шаблоном. Злоумышленник формирует строку таким образом, чтобы она не просто подставилась в шаблон, но была интерпретирована как код. Если это возможно, то он добавит свои директивы, с помощью которых выполнит эксфильтрацию данных или даже захват веб‑сервера.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее