2.9 KiB
GhostFrame
Из всех вводных в таске нам дается только 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}