← Каталог / nodejs / SSTI Профиль SecureShop рендерит пользовательское приветствие через pug.render() — SSTI в JavaScript-окружении с чтением секретов и RCE.
hardnodejsPro
Задача
# Server-Side Template Injection: персональное приветствие
## Сценарий
Перед вами Node.js-приложение интернет-магазина SecureShop, написанное на Express. На странице профиля пользователю доступна настройка персонального приветствия: он вводит произвольный текст в поле формы, нажимает «Сохранить», и при каждом следующем визите профиля сервер показывает это приветствие.
Реализация выглядит безобидно — это же просто строка пользователя, которая отдаётся обратно на его собственную страницу. Но обработчик профиля делает с этой строкой одну операцию, которая в production-коде категорически не должна применяться к недоверенному вводу: пропускает её через машинерию шаблонизатора **как сам шаблон**, а не как данные внутри уже скомпилированного шаблона. Шаблонизатор Pug — мощный язык; он умеет вычислять JavaScript-выражения внутри интерполяции `#{...}`, выполнять блоки кода через директиву `- ...`, обращаться к глобальным объектам Node.js — и через стандартный объект `process` приводит к доступу к переменным окружения, а через `require('child_process')` — к выполнению произвольных системных команд. А именно в переменных окружения хранится CTF-флаг.
## Цели
1. Найдите поле ввода произвольного текста, содержимое которого затем отображается на странице — на нём можно проверить, как именно сервер обрабатывает ввод.
2. Эмпирически подтвердите, что сервер не просто показывает текст «как есть», а **выполняет** его (простейший детектор — арифметическое выражение, которое вернётся вычисленным).
3. Через стандартные глобальные объекты Node.js дотянитесь до переменных окружения процесса и извлеките CTF-флаг.
## Данные
| Параметр | Значение |
|----------|----------|
| Обычный пользователь | `demo` / `demo` |
Похожие лабораторные
Ещё лабораторные по этому типу уязвимости
Пользовательское приветствие в SecureShop рендерится через nunjucks.renderString() — SSTI позволяет выполнять JS и читать переменные окружения.
nodejseasyPro
Exploit Fix
Server-Side Template Injection в Express + EJS: пользовательский ввод используется как сам EJS-шаблон, что позволяет выполнить произвольный JavaScript на сервере и прочитать переменные окружения.
nodejshardPro
Exploit Fix
Утечка конфиденциальных данных из контекста страницы через небезопасную обработку шаблонов.
golangeasyPro
Exploit Fix
Greeting template executed via eval() allows arbitrary PHP code injection.
phpeasyPro
Exploit Fix
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы —
support@hackandfix.ru