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

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

SSTI: Server-Side Template Injection via eval()

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

Автор: Hack & Fix
Освоишь: логика вне шаблоновcontext-escapesandbox engine
Легко+30 XP ~25 мин php
CWE-1336 · A03:2021 Pro
Обложка: SSTI: Server-Side Template Injection via eval() Обложка: SSTI: Server-Side Template Injection via eval()
Задача
# Инъекция серверного кода: исполняемое приветствие профиля ## Сценарий Интернет-магазин товаров для творчества **ArtKram** позволяет покупателю настроить персональное приветствие в кабинете: произвольный текст в поле формы, который затем показывается на странице профиля при каждом входе. Идея кажется безобидной — строка пользователя выводится на его же страницу. Но при подготовке к аудиту выяснилось, что обработчик профиля пропускает эту строку через исполнитель кода как фрагмент программы, а не выводит как данные. Команда считает это «внутренней механикой шаблонов» — вам предстоит проверить, чем это грозит. ## Цель 1. Найдите поле ввода, содержимое которого отображается в кабинете, и по реакции страницы определите, как именно сервер обрабатывает введённый текст. 2. Подтвердите, что сервер не только показывает текст, а исполняет его: стандартный детектор — вычислительное выражение в тегах-разделителях языка, принятых в любом учебнике по нему. Если вместо введённой строки на странице появится результат вычисления — ввод исполняется как код. 3. Средствами рантайма языка прочитайте переменную окружения процесса, в которой хранится флаг, — результат отрисуется в области приветствия. ## Теория **Server-Side Template Injection (SSTI)** возникает, когда недоверенный ввод попадает в механизм, исполняющий текст как программу, а не выводящий его как данные. В PHP граница между «текстом» и «кодом» проходит по тегам-разделителям, поэтому любая точка, где пользовательская строка передаётся встроенному интерпретатору, превращается в полноценную точку входа для произвольного кода: у такого фрагмента есть доступ ко всему рантайму — файловой системе, запуску внешних команд и переменным окружения процесса. **Уязвимый паттерн:** ```php // Приветствие пользователя исполняется как PHP-код eval("?>" . $template); ``` От инъекции в SQL это отличается масштабом последствий: атакующему не нужны синтаксические ухищрения — он пишет обычный код, и сервер выполняет его в контексте своего процесса с правами веб-сервера. В production это уже не «утечка данных», а удалённое выполнение кода. ## Точка входа атаки `POST /profile/greeting` — сохранение приветствия (поле `greeting_template`, требуется CSRF-токен из формы профиля); результат отображается на `GET /profile`. * **Обычный пользователь:** `demo` / `demo` * **Флаг:** переменная окружения процесса веб-сервера

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

другие лабы по этой уязвимости
Обложка лабы: SSTI: Twig createTemplate() Injection Обложка лабы: SSTI: Twig createTemplate() Injection
SSTI

SSTI: Twig createTemplate() Injection

Пользовательский ввод передаётся в Twig createTemplate(), что позволяет выполнить произвольный код на сервере.

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

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

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

+30 XP
Go Pro
Exploit Fix
Обложка лабы: SSTI: User Greeting Обложка лабы: SSTI: User Greeting
SSTI

SSTI: User Greeting

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

+30 XP
Node.js Pro
Exploit Fix
Обложка лабы: SSTI: User Greeting Обложка лабы: SSTI: User Greeting
SSTI

SSTI: User Greeting

Пользовательское приветствие рендерится через render_template_string() — SSTI позволяет читать секреты и выполнять код.

+30 XP
Python Pro
Exploit Fix