Перейти к содержимому
← Каталог nodejs SSRF

SSTI: User Greeting

Пользовательское приветствие в SecureShop рендерится через nunjucks.renderString() — SSTI позволяет выполнять JS и читать переменные окружения.

easynodejsPro
Задача
# Server-Side Template Injection: персональное приветствие ## Сценарий Перед вами Express-приложение интернет-магазина SecureShop на Node.js. На странице профиля пользователю доступна настройка персонального приветствия: он вводит произвольный текст в поле формы, нажимает «Сохранить», и при каждом следующем визите профиля сервер показывает это приветствие. Реализация выглядит безобидно — это же просто строка пользователя, которая отдаётся обратно на его собственную страницу. Но обработчик профиля делает с этой строкой одну операцию, которая в production-коде категорически не должна применяться к недоверенному вводу: пропускает её через машинерию шаблонизатора **как сам шаблон**, а не как данные внутри уже скомпилированного шаблона. Шаблонизатор Nunjucks — мощный язык; он умеет вычислять выражения, ходить по свойствам JavaScript-объектов, вызывать методы — и через цепочку «обычных» свойств приводит к доступу к глобальному конструктору `Function`, через который выполняется произвольный JavaScript-код. А внутри этого кода доступен глобальный объект `process` процесса Node.js — в его поле `env` лежит CTF-флаг. ## Цели 1. Найдите поле ввода произвольного текста, содержимое которого затем отображается на странице — на нём можно проверить, как именно сервер обрабатывает ввод. 2. Эмпирически подтвердите, что сервер не просто показывает текст «как есть», а **выполняет** его (простейший детектор — арифметическое выражение, которое вернётся вычисленным). 3. Через цепочку доступа к свойствам JavaScript-объектов в шаблонном контексте дотянитесь до конструктора `Function`, выполните произвольный код и прочитайте `process.env.LAB_FLAG`. ## Данные | Параметр | Значение | |----------|----------| | Обычный пользователь | `demo` / `demo` |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru