GhostFrame

Web 804 pts

Из всех вводных в таске нам дается только URL. Сначала необходимо найти скрытую страницу, потом выкачать debug-бандл с [ONNX](https://onnx.ai/onnx/intro/)-моделью и метаданными, и потом уже собрать картинку, которая пройдёт все фильтры классификатора. ## Решение Раз на главной пусто, начинаем с банального перебора директорий: ```bash gobuster dir -u http://: \ -w /usr/share/seclists/Discovery/Web-Content/common.txt ``` Всплывает скрытая страница `/backup`, внутри — ссылка на архив `prizrachny_kadr_export.zip`. Скачиваем, распаковываем: | Файл | Назначение | |---|---| | `vision_gate.onnx` | Сам классификатор | | `preprocess.json` | Список признаков и порог | | `memory.log` | Лог прошлых попыток | Самый полезный — `preprocess.json`. Формулы он прямо не раскрывает, но рассказывает, какие признаки модель считает: ```text amber_ratio blue_ratio contrast edge_density filename_signal metadata_signal ``` Точные пороги неизвестны — вытягиваем их через `/api/submit`. После каждой отправки сервис выводит чего именно не хватило. Из подсказок составляем полный набор требований: | Признак | Требование | |---|---| | `filename_signal` | Имя файла содержит `lens`, `prism` или `lattice` | | `metadata_signal` | [PNG `tEXt`](https://www.w3.org/TR/png/#11tEXt) `ghost-signal` начинается с `iris` | | `amber_ratio` | Тёплый янтарный тон | | `blue_ratio` | Заметный синий канал | | `contrast` | Высокий | | `edge_density` | Много резких границ | PNG с шахматным или полосатым паттерном даст и контраст, и кучу граней. Красим его в янтарно-синий микс, называем `lattice-lens.png`, прописываем в метадате `ghost-signal=iris-lane` и отправляем на `/api/submit`. Score перевалил порог — сервис возвращает флаг. Автоматический пайплайн — [`solve/solver.py`](solve/solver.py): ```bash python solve/solver.py http://: ``` ## Флаг `caplag{3409b3f6f9e70dce81617ab19bd3016469b745fb0b9b007ed4967b4b5a3a6486}`