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

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

SSTI: Format String Injection

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

Автор: Hack & Fix
Освоишь: логика вне шаблоновcontext-escapesandbox engine
Легко+30 XP ~25 мин python
CWE-1336 · A03:2021 Pro
Обложка: SSTI: Format String Injection Обложка: SSTI: Format String Injection
Задача
# Server-Side Template Injection через механизм форматирования строк ## Сценарий Вы — AppSec-инженер **ChipCargo**, магазина электроники с экспресс-доставкой. Текст письма восстановления пароля редактируется в админ-панели и хранится в настройках приложения; при каждом запросе сброса в него подставляются имя пользователя и ссылка, а готовое письмо падает во внутреннюю почту получателя. Подрядчик, собиравший этот механизм, уже завершил контракт, и перед включением рассылки на всех клиентов вас попросили проверить, как именно работает подстановка. ## Цель 1. Войдите администратором и найдите шаблон письма восстановления пароля в настройках. 2. Разберитесь, какой встроенный механизм Python использован для подстановки значений и что он умеет помимо «вставить значение по имени». 3. Скомпонуйте шаблон, который через лишние возможности механизма раскроет секретные данные приложения, и получите CTF-флаг: запросите сброс пароля для обычного пользователя и откройте письмо в его внутренней почте. ## Теория В стандартной библиотеке Python подстановка значений в строку — это не одна функция, а целый мини-язык форматирования. Кроме вставки по имени он умеет обращаться по точке к атрибутам переданных объектов и по квадратным скобкам к элементам словарей. Если шаблон строки недоверенный, эти возможности превращаются в SSTI: «подстановка имени» становится чтением внутренних структур процесса. **Уязвимый паттерн:** ```python body = message_template.format( username=username, reset_link=reset_link, user=user, config=app_config) ``` В подстановку переданы не только строки, но и объект пользователя и словарь конфигурации — до них можно «дотянуться» прямо из шаблона. Через специальные атрибуты любого объекта выстраивается цепочка к окружению процесса, а в конфигурации приложения лежат и секретные значения, включая флаг. ## Точка входа атаки `POST /admin/settings` — сохранение шаблона, поле `reset_template`. Триггер рендеринга — `POST /forgot-password` с полем `username`; результат читается во внутренней почте получателя на `GET /email`. * **Администратор:** `admin` / `SuperSecret` * **Обычный пользователь:** `demo` / `demo`

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

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

SSTI: User Greeting

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

+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