Files
Tajna-tretej-stolicy/web-ghostframe/WRITEUP.md
2026-04-22 10:58:32 +03:00

2.9 KiB
Raw Blame History

GhostFrame

Web 804 pts

Из всех вводных в таске нам дается только URL. Сначала необходимо найти скрытую страницу, потом выкачать debug-бандл с ONNX-моделью и метаданными, и потом уже собрать картинку, которая пройдёт все фильтры классификатора.

Решение

Раз на главной пусто, начинаем с банального перебора директорий:

gobuster dir -u http://<ip>:<port> \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt

Всплывает скрытая страница /backup, внутри — ссылка на архив prizrachny_kadr_export.zip. Скачиваем, распаковываем:

Файл Назначение
vision_gate.onnx Сам классификатор
preprocess.json Список признаков и порог
memory.log Лог прошлых попыток

Самый полезный — preprocess.json. Формулы он прямо не раскрывает, но рассказывает, какие признаки модель считает:

amber_ratio
blue_ratio
contrast
edge_density
filename_signal
metadata_signal

Точные пороги неизвестны — вытягиваем их через /api/submit. После каждой отправки сервис выводит чего именно не хватило. Из подсказок составляем полный набор требований:

Признак Требование
filename_signal Имя файла содержит lens, prism или lattice
metadata_signal PNG tEXt ghost-signal начинается с iris
amber_ratio Тёплый янтарный тон
blue_ratio Заметный синий канал
contrast Высокий
edge_density Много резких границ

PNG с шахматным или полосатым паттерном даст и контраст, и кучу граней. Красим его в янтарно-синий микс, называем lattice-lens.png, прописываем в метадате ghost-signal=iris-lane и отправляем на /api/submit. Score перевалил порог — сервис возвращает флаг. Автоматический пайплайн — solve/solver.py:

python solve/solver.py http://<ip>:<port>

Флаг

caplag{3409b3f6f9e70dce81617ab19bd3016469b745fb0b9b007ed4967b4b5a3a6486}