SSTI (Server Side Template Injection) уязвимость позволяет внедрить вредоносный код в шаблон на сайте для дальнейшего выполнения на сервере. Для обнаружения используют фаззинг, перебирая данные со специальными символами, используемых в выражениях шаблона, таких как ${{<%[%'"}}%\, чтобы получить выполнение кода или ошибку. Типичный пример проверки это выполнение математических операций в шаблоне.
Чем опасно.
Внедрение вредоносного кода может повлечь за собой такие последствия как:
- Раскрытие внутренних файлов на сервере.
- Получение полного контроля над сервером
- Утечка конфиденциальной информации, доступ к БД и т.д
Пример реализации на платформе Hack the box.
Входной точкой атаки является форма ввода данных, которые возвращаются в ответе. Пример - таск «Neonify». В центре сайта форма для ввода данных. Результат, высвечиваются под формой.
Нетрудно было догадаться, что на сайте используется ЯП Ruby. Попробуем подготовить такую полезную нагрузку
<%=3*7%>.
Закодируем текст кодировщиком URL.
%3C%25=3*7%25%3E
Если в таске вставить запрос в форму, вылетит ошибка. Надо ее обойти.
Главная задача отправить POST запрос с полезной нагрузкой на сервер. В данной статье используем средства браузера. Откроем вкладку «Сеть» в панели разработчика в браузере. Отправим в форму слово «сyber» и увидим POST запрос, которые создается при отправке данных.
Повторим POST запрос, изменив тело запроса на полезную нагрузку. Видно, что запрос прошел успешно.
Для выполнения таска создадим запрос на вывод файла «flag.txt»:
<%= File.open('flag.txt').read %>
Перекодируем.
%3C%25%3D%20File.open%28%27flag.txt%27%29.read%20%25%3E
Что и даст ответ на таск!