Перейти к содержимому
← Каталог golang SSRF

Advanced SSTI: Вызов методов и доступ к контексту

Эксплуатация SSTI через вызов методов объектов в контексте шаблона.

mediumgolangPro
Задача
# SSTI: персистентная инъекция в админ-шаблон email-уведомлений ## Сценарий Вы получили доступ в админ-панель **SecureShop** под учётной записью администратора (полученной через предыдущий аудит/тестовый аккаунт). В админке есть «Email Template Designer»: визуальный редактор шаблона email-уведомлений, который рассылается всем покупателям при оформлении заказа. Команда уверена, что фича безопасна — редактор доступен только из admin-панели и предназначен для маркетинговых правок текста. По данным внутреннего аудита, контекст рендеринга email содержит конфиденциальную метку, не предназначенную для отображения; её требуется извлечь. ## Цель 1. Изучите, как именно «Email Template Designer» обрабатывает введённый шаблон: как обычную строку с подстановкой плейсхолдеров или как полноценный шаблонный код. 2. Исследуйте контекст рендеринга email — определите, какие поля доступны для подстановки, в том числе те, которые в стандартном UI editor не видны как разрешённые плейсхолдеры. 3. Извлеките значение секретной метки из контекста и получите флаг — через preview admin-панели или через email-уведомление при оформлении заказа. ## Теория Server-Side Template Injection в админ-инструментах усиливается двумя факторами: (1) администратор имеет доступ ко **многим** ресурсам системы (контекст рендеринга часто богаче, чем у обычного пользователя), и (2) сохранённый шаблон применяется **глобально** — например, к каждому email-уведомлению о заказе. Это превращает single-shot SSTI в **персистентную** инъекцию: атакующий, имеющий админ-доступ один раз (через скомпрометированную учётку, инсайдера, цепочку другой уязвимости), оставляет «закладку», которая исполняется при каждом следующем рендеринге email — и её содержимое уходит конечным пользователям сервиса. **Уязвимый паттерн:** ```go // Шаблон, контролируемый администратором, исполняется при каждом email-рендеринге tmpl, _ := template.New("email").Parse(adminTemplate) tmpl.Execute(&buf, map[string]interface{}{ // богатый контекст с чувствительными значениями }) ``` Особенность Go-шаблонов в админ-сценарии — это контекст в форме `map[string]interface{}`, в который удобно прокидывать любые runtime-значения (env-переменные, секреты, данные текущей сессии). Без явного DTO-слоя в такой контекст легко попадает то, что не должно быть видно через шаблонизатор. ## Точка входа атаки | Параметр | Значение | |----------|----------| | Логин администратора | `admin` / `LabAdmin2024!` | | Эндпоинт настройки шаблона | `POST /admin/email-template` (через UI `GET /admin`) | | Цель | секретная метка из контекста рендеринга email |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru