Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Сегодня я продемонстрирую, как обойти фильтрацию пользовательского ввода при инъекции в шаблон (SSTI) и в результате получить возможность удаленно выполнять код на сервере. При повышении привилегий используем возможности группы sudo, для чего нам понадобится найти учетные данные.
Наша цель — получение прав суперпользователя на машине Perfection с учебной площадки Hack The Box. Уровень задания — легкий.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts
:
10.10.11.253 perfection.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
).
Результат работы скрипта
Сканер нашел всего два открытых порта:
Так как с SSH без учетных данных ничего сделать нельзя, переходим к просмотру и тестированию сайта на веб‑сервере.
Главная страница сайта
На сайте находим пометку Powered by, из которой часто можно узнать, какой используется движок. В нашем случае это WEBrick 1.7.0.
Powered by
На странице /weighted-grade
находим несколько полей ввода и веб‑форму.
Содержимое страницы weighted-grade
На странице сказано, что нужно заполнить форму, при этом мы можем использовать значения N/A для Category и ноль для Grade и Weight.
Заполненная веб‑форма
После отправки данных на сервер все введенные значения отображаются на странице.
Содержимое страницы
Если введенные пользователем данные отображаются на странице, значит, стоит поискать возможность проэксплуатировать это, заслав данные, которые заставят сервер выполнить наши команды. Одна из таких возможностей — инъекция команд в шаблон.
Без труда узнаём, что WEBrick написан на Ruby, и пробуем отправить пейлоад, использующий особенности этого языка: <%= 7*7 %>
.
Веб‑форма с данными
Содержимое страницы
В выводе вместо введенной нами строки или результата вычисления получаем сообщение о том, что заблокирован вредоносный ввод. Значит, используется фильтр, который сигнализирует программе, что пользователь ввел что‑то потенциально опасное.
Попробуем перебрать разные символы и последовательности, это даст нам понимание того, на какие из них будет срабатывать фильтр, а какие помогут его обойти. Начинаем со всех возможных символов в кодировке URLEncode.
Источник: xakep.ru