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

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

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

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

Автор: Hack & Fix
Освоишь: логика вне шаблоновcontext-escapesandbox engine
Сложно+90 XP ~70 мин golang
CWE-1336 · A03:2021 Pro
Обложка: SSTI Email: Инъекция шаблона в email-сообщение Обложка: SSTI Email: Инъекция шаблона в email-сообщение
Задача
# SSTI в письме восстановления пароля ## Сценарий Вы участвуете в программе bug bounty кофейного сервиса подписок **BrewBean**. Другой исследователь обронил в отчёте, что «в письмах восстановления пароля что-то исполняется», и координатор отправил вас проверять. Форма позволяет задать собственный текст письма: в нём заявлены плейсхолдеры имени и ссылки сброса, сервер подставляет значения и возвращает предпросмотр готового письма. В контексте подстановки хранится конфиденциальная метка — извлеките её, располагая обычной учётной записью. ## Цель 1. Проверьте, как сервер обрабатывает поле шаблона письма: буквальная замена плейсхолдеров или полноценный шаблонизатор. 2. Выведите контекст подстановки целиком и найдите незаявленные поля. 3. Извлеките значение конфиденциальной метки через предпросмотр письма. ## Теория SSTI часто живёт в механизмах писем и уведомлений: разработчик даёт пользователю настраивать текст с плейсхолдерами, но вместо буквальной замены подключает шаблонизатор. Любая директива в пользовательском тексте становится исполняемым кодом с доступом к контексту подстановки. Форма восстановления пароля — частая жертва: она открыта без авторизации, а в контексте письма традиционно крутятся токены и другие чувствительные значения. **Уязвимый паттерн:** ```go tmpl, _ := texttemplate.New("email").Parse(messageTemplate) ``` Текст из формы парсится как шаблон и исполняется со структурой данных письма: имя пользователя, ссылка сброса, имя приложения — и конфиденциальная метка, не заявленная в списке плейсхолдеров. Предпросмотр в ответе формы сразу показывает результат рендеринга, так что канал чтения — мгновенный. ## Точка входа атаки `POST /forgot-password` — форма восстановления пароля (поля `username` и `message_template`); предпросмотр письма возвращается в ответе. * **Учётные данные:** `demo` / `demo` * **Цель:** конфиденциальная метка из контекста подстановки письма

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

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

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

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

+30 XP
Go Pro
Exploit Fix
Обложка лабы: 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