Перейти к содержимому

Поиск по платформе

SSTI: User Greeting

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

Автор: Hack & Fix
Освоишь: логика вне шаблоновcontext-escapesandbox engine
Легко+30 XP ~25 мин nodejs
CWE-1336 · A03:2021 Pro
Обложка: SSTI: User Greeting Обложка: SSTI: User Greeting
Задача
# SSTI (Инъекция шаблона Nunjucks) ## Сценарий «ПринтХата» — мастерская персональной печати с онлайн-витриной. Недавно добавили «персональное приветствие»: покупатель пишет произвольную строку, и она показывается ему на странице профиля при каждом входе. Фича выглядит безобидной — строка пользователя возвращается на его же страницу. Но обработчик профиля перед выводом пропускает эту строку через шаблонизатор Nunjucks как исходник шаблона, а не как данные. Ревьюер поднял тревогу, и вам поручили проверить, что из этого можно извлечь: в переменных окружения серверного процесса хранится секрет, и добыть его — цель аудита. ## Цель 1. Авторизуйтесь и найдите поле, ввод которого возвращается на страницу профиля. 2. Докажите, что сервер вычисляет введённый текст как шаблон, а не возвращает его как данные. 3. Через контекст шаблонизатора добейтесь выполнения кода на сервере и прочитайте секретную переменную окружения — в ней флаг. ## Теория Server-Side Template Injection возникает, когда недоверенная строка попадает в шаблонизатор как код шаблона, а не как данные. Nunjucks вычисляет выражения в интерполяции, обращается к свойствам объектов и вызывает методы — всё это выполняется в процессе сервера. Прямые «опасные» глобальные объекты в контексте шаблона обычно не лежат, но у любого объекта есть свойства-конструкторы, и цепочка от встроенного хелпера через конструктор функций приводит к способу выполнить произвольную строку как код. **Уязвимый паттерн:** ```js // Пользовательская строка рендерится как шаблон: greetingRendered = nunjucks.renderString(user.greeting, { name, username }); ``` Механика словами: строка из поля приветствия передаётся движку в роли исходника шаблона, поэтому всё, что записано в синтаксисе выражений, исполняется на сервере. От внутреннего хелпера-функции через свойство-конструктор создаётся новая функция из выбранной строки; внутри неё виден глобальный объект процесса, а в его переменных окружения — секрет с флагом. ## Точка входа атаки `POST /profile/greeting` — форма сохранения приветствия: поле `greeting`. `GET /profile` — страница профиля: рендерит сохранённое приветствие. * **Тестовая учётная запись:** `demo` / `demo`

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: SSTI: внедрение JavaScript-кода в EJS-шаблон Обложка лабы: SSTI: внедрение JavaScript-кода в EJS-шаблон
SSTI

SSTI: внедрение JavaScript-кода в EJS-шаблон

Server-Side Template Injection в Express + EJS: пользовательский ввод используется как сам EJS-шаблон, что позволяет выполнить произвольный JavaScript на сервере и прочитать переменные окружения.

+90 XP
Node.js Pro
Exploit Fix
Обложка лабы: SSTI: Pug Template Engine в Express Обложка лабы: SSTI: Pug Template Engine в Express
SSTI

SSTI: Pug Template Engine в Express

Профиль SecureShop рендерит пользовательское приветствие через pug.render() — SSTI в JavaScript-окружении с чтением секретов и RCE.

+90 XP
Node.js Pro
Exploit Fix
Обложка лабы: Basic SSTI: Кастомное приветствие Обложка лабы: Basic SSTI: Кастомное приветствие
SSTI

Basic SSTI: Кастомное приветствие

Утечка конфиденциальных данных из контекста страницы через небезопасную обработку шаблонов.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: SSTI: Server-Side Template Injection via eval() Обложка лабы: SSTI: Server-Side Template Injection via eval()
SSTI

SSTI: Server-Side Template Injection via eval()

Greeting template executed via eval() allows arbitrary PHP code injection.

+30 XP
PHP Pro
Exploit Fix