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

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

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

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

Автор: Hack & Fix
Освоишь: логика вне шаблоновcontext-escapesandbox engine
Легко+30 XP ~25 мин golang
CWE-1336 · A03:2021 Pro
Обложка: Basic SSTI: Кастомное приветствие Обложка: Basic SSTI: Кастомное приветствие
Задача
# Server-Side Template Injection в приветствии профиля ## Сценарий Вы — приглашённый аудитор магазина настольных игр **MeepleCart**. Команда вот-вот выкатит «персональное приветствие»: пользователь пишет текст, и он появляется на странице профиля. Код-ревью фича прошла, но штатный инженер по безопасности попросил проверить её до релиза. Во внутреннем контексте рендеринга страницы живёт служебная метка, которая не должна быть видна обычному пользователю, — проверьте, удастся ли достать её из обычной учётной записи. ## Цель 1. Разберитесь, что сервер делает с полем приветствия: подставляет его как данные или обрабатывает как код шаблона. 2. Исследуйте контекст рендеринга: выведите его целиком и посмотрите, какие поля доступны из пользовательской строки. 3. Извлеките значение служебной метки и получите флаг. ## Теория Server-Side Template Injection — случай, когда ввод пользователя попадает не в данные шаблона, а в сам его исходный код. Если строку отдают парсеру шаблонизатора, она получает права полноценного шаблона: может обращаться к полям контекста, который приложение передало в рендеринг. В Go у атакующего нет рефлексии уровня других языков — но доступны все поля и методы переданной структуры, а в ней часто оказываются и служебные значения. **Уязвимый паттерн:** ```go tmpl, _ := texttemplate.New("greeting").Parse(greetingTpl) tmpl.Execute(&greetingBuf, map[string]interface{}{ /* поля контекста */ }) ``` Приветствие парсится как шаблон и исполняется с контекстом, среди полей которого есть конфиденциальная метка. В языке шаблонов существует идентификатор, выводящий весь контекст разом, — с него удобно начать разведку, а затем обратиться к нужному полю по имени. ## Точка входа атаки `POST /profile/greeting` — форма редактирования приветствия (параметр `greeting_template`); результат рендерится на `GET /profile`. * **Учётные данные:** `demo` / `demo` * **Цель:** служебная метка из контекста рендеринга — её значение и есть флаг

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

другие лабы по этой уязвимости
Обложка лабы: SSTI Email: Инъекция шаблона в email-сообщение Обложка лабы: SSTI Email: Инъекция шаблона в email-сообщение
SSTI

SSTI Email: Инъекция шаблона в email-сообщение

SSTI-уязвимость: пользовательский ввод передаётся в template.Parse(), позволяя читать серверные данные.

+90 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: 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