Files
2026-04-22 10:58:32 +03:00

57 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<h1 align="center">GhostFrame</h1>
<p align="center">
<img src="https://img.shields.io/badge/category-Web-blueviolet" alt="Web"/>
<img src="https://img.shields.io/badge/points-804-yellow" alt="804 pts"/>
</p>
Из всех вводных в таске нам дается только URL. Сначала необходимо найти скрытую страницу, потом выкачать debug-бандл с [ONNX](https://onnx.ai/onnx/intro/)-моделью и метаданными, и потом уже собрать картинку, которая пройдёт все фильтры классификатора.
## Решение
Раз на главной пусто, начинаем с банального перебора директорий:
```bash
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`. Формулы он прямо не раскрывает, но рассказывает, какие признаки модель считает:
```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://<ip>:<port>
```
## Флаг
`caplag{3409b3f6f9e70dce81617ab19bd3016469b745fb0b9b007ed4967b4b5a3a6486}`