Райтап на задачу «Слив флагов»

Fderious

Автор:

Fderious

7 ноября 2026

8

07.11.2026
Слив флагов
Категория:

Forensic

Задача «Слив флагов»

3T0T_FL4G_1MB4

Автор:

3T0T_FL4G_1MB4

Первая кровь:
velvetway
Сложность:
easy
Дата публикации:
13.12.2025
Решений:
100
Рейтинг:
5/5
Ссылка:
Решать

Итак, перед нами файл flags.wim. Для начала узнаем про него чуть больше:

file flags.wim

OUTPUT:

flags.wim: Windows imaging (WIM) image v1.13, reparse point fixup

Гуглим, что это за формат и как с ним работать: Вот здесь узнаем, что это формат образов диска. Далее гуглим:

WIM Linux utils

Находим основную утилиту для работы с данным форматом: wimlib-imagexУстанавливаем (Debian/Ubuntu):

sudo apt install wimtools

Тут или просто в man (man wimlib-imagex) читаем информацию по использованию утилиты.

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

wimlib-imagex extract flags.wim
cd flags
cat * | tail
ls -la | head -5

OUTPUT:

итого 4044
drwxr-xr-x 2 fderios fderios 36864 дек 11  2025 .
drwxrwxr-x 3 fderios fderios  4096 дек 11  2025 ..
-rw-r--r-- 1 fderios fderios    45 дек 11  2025 flag_001.txt
-rw-r--r-- 1 fderios fderios    45 дек 11  2025 flag_002.txt

Посмотрим, что у нас лежит в файлах:

awk 1 * | head  -5

OUTPUT:

ZWVlMWNjMDA0NTI2NzM3MTY5NzRlNzk2ZjdhOGZhNGM4=
ODBlYzU5ZGEyZjc3ZjI1YjFiMDE1MzVmM2Y0Mzc2ZDdp=
ZDJiZTI5ZDU0OWJkZGE0NTQyYWMzYzA2NmRiNTc5OGJm=
YTcyMzcxNzQ1YzcwZTg2MmU1N2IxZDk5M2QxZDA5ZDMw=
YTA3ZDQwNTE4NjM3MDUzMzY2NTczOGE2ODFhYjY0Y2VP=

Видим, что перед нами Base64-кодированные строки, раскодируем:

awk 1 * | head  -1 | base64 -d

OUTPUT:

eee1cc00452673716974e796f7a8fa4c8

В самом первом файле флага нет. Попробуем перебрать остальные:

for f in *; do base64 -d "$f" 2>/dev/null | grep -a "BugCTF{"; done

Увы, но вывод пустой. Вероятно, нам не просто так дали именно файл в формате WIM, а не, например, ZIP. Скорее всего, где-то скрыты ещё какие-то данные, попробуем провзаимодействовать с данными до распаковки. Найдём префикс флага в base64:

echo "BugCTF{" | base64
echo "BugCTF" | base64

OUTPUT:

QnVnQ1RGewo=
QnVnQ1RGCg==

Берём общую часть обоих выводов и без паддинга — QnVnQ1RG. А теперь воспользуемся старым добрым grep’ом:

grep -aoE 'QnVnQ1RG[A-Za-z0-9+/=]+' flags.wim | base64 -d

Вуаля! В выводе получаем флаг!

Однако на этой точке можно было пойти и другим путём — продолжить использовать wimtools.

Нам нужно чуть больше почитать про формат WIM и тогда мы узнаем, что в нём все данные хранятся в таких единицах, как blobs. Вытащим всё в виде блобсов:

wimlib-imagex info flags.wim --blobs > blobs.txt

Откроем файл и заметим, что все объекты, которые мы распаковывали, имеют размер 45 байт, есть ещё метадата с отличающимся размером, а ещё мы можем предположить, что и размер зашифрованного флага также будет различаться от 45. Попробуем найти этот blob:

grep "^Uncompressed size" blobs.txt | sort | uniq -c

OUTPUT:

1 Uncompressed size = 136352 bytes
1000 Uncompressed size = 45 bytes
1 Uncompressed size = 47 bytes

Так, в первой строке метаданные, потом наши 1000 псевдофлагов, а что это такое с размером в 47 байт? Проверим:

grep -A4 -B1 "47 bytes" blobs.txt

OUTPUT:

Hash              = 0x9fc464666c7ac34b432899c3f32af11c53f8626f
Uncompressed size = 47 bytes
Compressed size   = 47 bytes
Offset in WIM     = 18433 bytes
Part Number       = 1
Reference Count   = 1
Flags             = 

А теперь вытянем необходимые данные по этому блобу:

dd if=flags.wim bs=1 skip=18433 count=47 status=none

OUTPUT:

QnVnQ1RGe0gxREQzTl9TVFIzNE1fRjBSX01ZX0ZMNEd9=

Попробуем декодировать:

echo "QnVnQ1RGe0gxREQzTl9TVFIzNE1fRjBSX01ZX0ZMNEd9=" | base64 -d

В выводе снова получаем флаг — таска решена!

Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

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

Райтап на задачу «CTF-ер, который смог»

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

Райтап на задачу «CTF-ер, который смог»

Находим параметры сжатого потока в повреждённом ZIP и восстанавливаем JPEG из raw DEFLATE с помощью короткого Python-скрипта.
Прочитать

11

Райтап на задачу «Слив флагов»

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

Райтап на задачу «Слив флагов»

Исследуем WIM-образ через 7-Zip, находим альтернативный поток flag_404.txt и декодируем спрятанную строку Base64.
Прочитать

19