Когда веб-приложение обрабатывает пользовательский ввод как часть шаблона, можно использовать встроенные функции шаблонизатора для отображения пользовательских данных, доступа к секретам, чтения локальных файлов и даже удаленного выполнения кода.
Но перед этим важно идентифицировать потенциальную уязвимость SSTI. Один из способов — преднамеренно вызвать ошибку с использованием различных спецсимволов:
{
}
$
#
@
%)
"
'
|
{{
}}
${
<%
<%=
%>Как только мы подтвердим точку инъекции, переходим к следующему этапу — отправке различных пэйлоадов для инъекций в шаблон и наблюдению за тем, какие из них были обработаны.
Этот этап критичен, так как он поможет определить используемый движок шаблонов и создать эффективный пэйлоад для эксплуатации.
Все движки шаблонов используют различный синтаксис, но некоторые элементы могут быть схожи. Несколько часто используемых движков шаблонов рассмотрено в недавнем гайде от Intigriti:
▪️Python: Jinja2, Mako
▪️PHP: Twig, Smarty
▪️JavaScript: EJS, Handlebars, Pug
▪️Java: Thymeleaf, FreeMarker, Pebble
▪️C#: Razor
▪️Ruby: ERB, HAML, Slim
