Разбор задачи Breaking News с FortID CTF 2026

BEBRABLIN0

Автор:

BEBRABLIN0

19 октября 2026

29

19.10.2026

FortID CTF 2026 · Автор задания: ipaljak.

Описание

Another one got caught today, it's all over the papers.

Try to figure out what made this one tick…

Решение

Дано изображение (это, конечно, иронично: на сореве запрещён ИИ, но при этом изображение сгенерировано ИИ).

Газета с исходным заданием

Из него мы получаем следующую инфу: человека зовут Karl Heisenburger, ему 43 года и, со слов соседа, он много знал о Bluesky. Оттуда мы получаем первую зацепку, куда копать.

Страница Карла в Bluesky

В первом же посте есть строка из восьми символов. Судя по контексту поста, это не что иное, как идентификатор пасты в Pastebin, а значит, далее нам нужно перейти по ссылке: https://pastebin.com/BmwCR1aR.

Паста Карла в Pastebin

Там ссылка на архив, в котором лежат файл README и папка .git.

Содержимое архива secret-key

Для начала стоит понять, откуда в целом взята папка .git. Для этого открываем secret-key/.git/config: обычно в нём хранится адрес удалённого репозитория, по которому можно определить его владельца.

Адрес репозитория в файле config

Видим, что репозиторий принадлежит пользователю w4l73r-8l4ck-H4t. Ищем его на GitHub и видим у него только один репозиторий, в котором есть только две программы: для шифрования и дешифрования изображения.

Репозиторий w4l73r-8l4ck-H4t

Так как у нас нет ни ключа, ни самого зашифрованного файла, следует проанализировать страницу в Bluesky полностью. Там мы натыкаемся на пост, в котором показывается, что с помощью диаграммы можно выстроить слова. Забегая наперёд, именно в диаграмме был спрятан ключ шифрования.

Пост о диаграмме в Bluesky
Пример надписи на диаграмме GitHub

Так как для получения ключа у нас пока ничего нет, надо посмотреть историю изменений файла readme.md. Для этого прописываем:

git log --all --name-only --format= | uniq -c

И получаем, что файл попал в 480 коммитов, а это довольно дохуя.

Вывод команды git log

Ну и чтобы получить ключ, надо построить диаграмму. Для этого пишем следующую программу:

import sys, subprocess, datetime as dt
from PIL import Image, ImageDraw
d = {dt.date.fromisoformat(l.split()[0]) for l in subprocess.run(
    ["git", "-C", sys.argv[1], "-c", "core.pager=cat", "log", "--all", "--format=%ai"],
    capture_output=True, text=True).stdout.splitlines() if l}
s = min(d) - dt.timedelta(days=(min(d).weekday() + 1) % 7)
n, W, c = (max(d) - s).days // 7 + 1, 73, 12
img = Image.new("RGB", (W * c + 20, -(-n // W) * (7 * c + 20) + 10), "white")
dr = ImageDraw.Draw(img)
for w in range(n):
    for r in range(7):
        x, y = 10 + (w % W) * c, 10 + (w // W) * (7 * c + 20) + r * c
        dr.rectangle([x, y, x + c - 2, y + c - 2],
                     fill=(33, 110, 57) if s + dt.timedelta(days=w * 7 + r) in d else (235, 237, 240))
img.save("graph.png")

Запускаем и получаем ключ: 14m7h30neWh0Kn0ckzzz.

Ключ на диаграмме коммитов

Но тут проблема: откуда, собственно, брать зашифрованный файл? На GitHub его нет, в Bluesky тоже. Значит, сначала посмотрим профиль в Bluesky через Wayback Machine: может, там что-то есть. И бинго — там оказывается удалённый пост. Мало того что он есть, так там отметился некий Hank, а значит, можно просмотреть его профиль.

Удалённый пост в архиве Wayback Machine

Анализируя @hank-loves-brewing.bsky.social, можно заметить пост с пивом. А точнее, нас интересует монитор, ибо там есть ссылка на Pastebin. Пытаемся прочитать ссылку и путём небольшого перебора (ибо я слепая тетеря) получаем рабочую ссылку: https://pastebin.com/i8AgnpB5.

Страница Хэнка в Bluesky
Ссылка на Pastebin на фотографии с пивом

Там будет ссылка на зашифрованный файл. А так как у нас уже есть ключ расшифровки, берём программу с GitHub и расшифровываем нашу картинку — там и будет флаг.

Изображение с итоговым флагом

Флаг:

FordID{1_d1d_i7_4_m3_._1_l1k3d_it._1_w45G00d_4t_17}
Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Разбор задачи Secret account с UIUCTF 2026

/Разборы задач

Разбор задачи Secret account с UIUCTF 2026

Разбор OSINT-задачи Secret account с UIUCTF 2026: поиск скрытого аккаунта Instagram через подписки, игровой ник и историю имени пользователя.
Прочитать

26

Ветряной насос и здания в Меллиехе — место из задачи Murder

/Разборы задач

Разбор задачи Murder с Securinets CTF Quals 2026

Разбор OSINT-задачи Murder с Securinets CTF Quals 2026: поиск профилей, определение времени по Unix-метке и геолокация места на Мальте.
Прочитать

47