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

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

SSTI: User Greeting

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

Автор: Hack & Fix
Освоишь: логика вне шаблоновcontext-escapesandbox engine
Легко+30 XP ~25 мин python
CWE-1336 · A03:2021 Pro
Обложка: SSTI: User Greeting Обложка: SSTI: User Greeting
Задача
# Server-Side Template Injection (персональное приветствие) ## Сценарий Вы — специалист службы безопасности **BitMerch**, магазина мерча для разработчиков. На прошлой неделе команда запустила персональные профили: покупатель задаёт в личном кабинете текст-приветствие, и сервер показывает его при каждом визите. Руководитель попросил проверить новую механику до рекламной рассылки по базе клиентов: его смущает, что текст покупателя каким-то образом «оформляется» на странице. Каталог и заказы в этой проверке не интересуют — речь только о новой фиче. ## Цель 1. Войдите под учётной записью обычного покупателя и найдите поле, текст из которого сервер затем отображает на вашей странице. 2. Подтвердите, что сервер не возвращает текст «как есть», а исполняет его как шаблон: классический индикатор — арифметическое выражение, которое возвращается вычисленным. 3. Через цепочку внутренних атрибутов Python-объектов доберитесь из шаблонного контекста до переменных окружения процесса и прочитайте CTF-флаг. ## Теория Server-Side Template Injection возникает, когда приложение передаёт пользовательский ввод не как данные, а как исходный код шаблона. Язык шаблонов — полноценный язык выражений: он вычисляет арифметику, обращается к атрибутам объектов и вызывает методы, поэтому «безобидная строка» превращается в код, исполняемый на сервере с правами приложения. **Уязвимый паттерн:** ```python greeting_rendered = render_template_string(user['greeting'], name=user['fullname'], username=user['username']) ``` Приветствие из профиля передано в функцию, которая компилирует произвольную строку как шаблон и тут же исполняет её. В Python по цепочке специальных атрибутов почти любого объекта можно дойти до модуля работы с операционной системой, а у него — до маппинга переменных окружения, где среди прочего лежит флаг. ## Точка входа атаки `POST /profile/greeting` — форма в личном кабинете, поле `greeting` (вместе с CSRF-токеном страницы профиля). Результат отображается на `GET /profile`. * **Обычный пользователь:** `demo` / `demo`

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

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

SSTI: Format String Injection

Форма восстановления пароля использует str.format() с пользовательским шаблоном — атакующий может читать атрибуты объектов через {username.__class__.__init__.__globals__}.

+30 XP
Python Pro
Exploit Fix
Обложка лабы: Blind SSTI: Notification Templates Обложка лабы: Blind SSTI: Notification Templates
SSTI

Blind SSTI: Notification Templates

Админ-шаблон email-уведомлений рендерится через render_template_string() — слепая SSTI через time-based payload.

+60 XP
Python Pro
Exploit Fix
Обложка лабы: SSTI: Report Template RCE Обложка лабы: SSTI: Report Template RCE
SSTI

SSTI: Report Template RCE

Пользовательский шаблон отчёта рендерится через render_template_string() — SSTI позволяет выполнить произвольный код через цепочку __subclasses__.

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

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

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

+30 XP
Go Pro
Exploit Fix