
На первом PicoCTF я потратил 40 минут, тупо пялясь на файл без расширения. Открывал в текстовом редакторе — каша символов. Переименовал в .jpg — не открылось. Закинул в Google — бесполезно. Задачу решила одна команда file за три секунды: внутри лежал JPEG, а флаг сидел в поле Comment метаданных. С тех пор прошло два года и больше сотни решённых forensics-тасков. Этот гайд — тот ресурс, который я хотел иметь перед стартом: пошаговый алгоритм от «скачал непонятный файл» до извлечения флага, с конкретными командами и объяснением, зачем каждая из них нужна.
Forensics на CTF — это не расследование инцидентов в корпоративной сети. Согласно Trail of Bits CTF Field Guide, задачи этой категории включают анализ форматов файлов, стеганографию, разбор дампов памяти и анализ сетевого трафика. Суть одна: вытащить скрытую информацию из статических данных.
В реальном мире цифровая криминалистика — поиск следов атакующего в логах, реестре, памяти и файловых системах. На CTF всё проще и игровее: вам дают файл (или несколько), а вы ищете строку-флаг. Задачи нередко напоминают матрёшку — файл внутри файла внутри файла, и для каждого слоя нужен свой инструмент.
Основные типы задач на соревнованиях:
Для начинающих forensics — одна из самых дружелюбных категорий. Как отмечает Trail of Bits, здесь не нужны дорогие коммерческие инструменты вроде IDA Pro, которые дают преимущество в reverse engineering. Для форензики хватает набора бесплатных утилит командной строки. Поле выровнено для всех.
Категория требует трёх навыков: базового Python, умения работать с данными на уровне байтов и способности распознавать форматы и кодировки. Первые два прокачиваются вне CTF, третий — только на практике. Эта статья даст старт по всем трём направлениям.
Перед решением задач подготовьте рабочую среду.
ОС: Linux (Kali Linux 2024+, Parrot OS, Ubuntu 22.04+). MacOS подходит с оговорками — часть open-source инструментов может не скомпилироваться. Windows — через WSL2 с Ubuntu, но Wireshark лучше ставить нативно.
RAM: минимум 4 ГБ для базовых задач (file, strings, binwalk). Рекомендуется 8 ГБ — для крупных PCAP-файлов в Wireshark и дампов памяти через Volatility.
Диск: 20 ГБ свободного пространства — извлечённые файлы из binwalk и foremost иногда занимают неожиданно много.
Минимальный набор инструментов:
| Инструмент | Назначение | Установка (Kali/Ubuntu) |
|---|---|---|
| file | Определение типа файла по magic bytes | Предустановлен |
| exiftool | Анализ метаданных файлов | sudo apt install libimage-exiftool-perl |
| strings | Поиск текстовых строк в бинарных данных | Предустановлен (пакет binutils) |
| xxd | Создание hex-дампа | Предустановлен |
| binwalk | Анализ и извлечение вложенных файлов | sudo apt install binwalk |
| steghide | Стеганография в JPEG/WAV/BMP/AU | sudo apt install steghide |
| zsteg | LSB-стеганография в PNG/BMP | gem install zsteg |
| foremost | Восстановление файлов по сигнатурам | sudo apt install foremost |
| Wireshark | Анализ сетевого трафика (PCAP) | sudo apt install wireshark |
В Kali большинство инструментов предустановлено. На чистом Ubuntu весь набор ставится за пару минут. Дополнительно пригодится hexedit для ручного редактирования байтов — sudo apt install hexedit.
Универсального рецепта нет — каждый таск уникален. Но есть последовательность, которая работает в подавляющем большинстве случаев. Я прогоняю её на каждом CTF:
fileexiftoolstringsxxd или hexdump -Cbinwalksteghide, zsteg, stegsolve)Алгоритм циклический. Извлекли вложенный файл через binwalk — начинаете сначала: определяете тип, смотрите метаданные, ищете строки. Повторяете, пока не найдёте флаг. Именно эту стратегию описывает «Курс молодого CTF бойца» на cybber.ru: «Что за объект мы имеем? Какие особенности? Какие отличия от эталонного типа? Какие методы решения существуют?» — и цикл до победного конца.
Первое действие с любым файлом на CTF — выяснить, что это. Расширение часто отсутствует или намеренно изменено — это часть задачи.
Команда file использует библиотеку libmagic для идентификации по «магическим байтам» — уникальным последовательностям в заголовке файла. Каждый формат имеет свою сигнатуру: PNG начинается с 89 50 4E 47 (в ASCII — .PNG), JPEG — с FF D8 FF, ZIP — с 50 4B 03 04, PDF — с 25 50 44 46 (%PDF).
$ file mystery_challenge
mystery_challenge: PNG image data, 1920 x 1080, 8-bit/color RGBA, non-interlaced
$ file another_file
another_file: Zip archive data, at least v2.0 to extract
$ file broken_file
broken_file: data
Первый файл — PNG, второй — ZIP-архив, третий — «data», то есть формат не определён. Результат «data» — сигнал к ручному анализу через hex-дамп.
Ограничение file: утилита работает по эвристике и легко обманывается. Если организаторы CTF подменили первые байты заголовка, file покажет неверный результат. Тогда нужно руками смотреть hex через xxd mystery_file | head -5 и сравнивать первые байты с таблицей известных сигнатур.
Для более точной идентификации есть TrID — утилита с расширенной базой форматов, которая показывает вероятность определения в процентах. Особенно полезна для проприетарных и экзотических форматов.
Реальный пример: на PlaidCTF 2015 участники получили файл, который file определил как «LaTeX document, ASCII text». Открытие в LaTeX-редакторе ничего не дало. Но текстовый редактор показал строку \begindata{raster,1} — поиск по ней привёл к описанию формата ATK raster images (.CMU) из Andrew User Interface System. Переименование в .CMU и открытие в XnView дало изображение с флагом. Вот почему после file всегда стоит заглядывать в содержимое текстовым редактором или hex-дампом — file не всеведущ.
Метаданные — первое место, где организаторы CTF прячут подсказки или сам флаг. Утилита exiftool читает метаданные из десятков форматов: JPEG, PNG, PDF, DOCX, MP3, MP4 и многих других.
Запуск: exiftool suspicious_image.jpg. В выводе обращайте внимание на:
В реальных расследованиях анализ метаданных помогает установить автора документа, время создания, устройство съёмки. На CTF — это быстрый способ получить флаг без глубокого анализа. Злоумышленники в реальном мире используют технику Timestomp (T1070.006 по MITRE ATT&CK) для подмены временных меток — понимание структуры метаданных помогает обнаруживать такие манипуляции.
Ограничения exiftool: не работает с сильно повреждёнными файлами, не извлекает стеганографически скрытые данные и не анализирует содержимое файла за пределами метаданных. Метаданные пусты или очищены — переходите к следующему шагу.
Утилита strings вытаскивает все читаемые текстовые последовательности из бинарного файла. Метод грубый, но удивительно результативный — флаг нередко лежит прямо в теле файла в открытом виде.
$ strings -n 8 -o challenge.png
1234 flag{h1dd3n_1n_pl41n_s1ght}
5678 Created with GIMP
12890 iCCPICC Profile
45230 aHR0cHM6Ly9leGFtcGxlLmNvbQ==
Флаг -n 8 устанавливает минимальную длину строки в 8 символов (по умолчанию 4 — слишком много мусора). Флаг -o показывает смещение каждой строки в файле — пригодится для ручного извлечения.
Что искать в выводе strings:
flag{...}, CTF{...}, picoCTF{...} — прямой флаг= в конце) — декодировать через echo "строка" | base64 -d. В примере выше aHR0cHM6Ly9leGFtcGxlLmNvbQ== — это base64.txt, .pdf, .zip) — указание на вложенные данныеДля побайтового анализа — xxd (hex-дамп) или hexdump -C. Просмотр первых строк: xxd challenge.png | head -20. Hex-редактор hexedit позволяет не только смотреть, но и редактировать байты — это критично, когда организаторы намеренно испортили заголовок файла.
Типичная задача: файл не открывается ничем, file говорит «data». Смотрите первые байты через xxd и видите, что вместо 89 50 4E 47 (корректная сигнатура PNG) стоит 89 50 4E 00 — испорчен один байт. Исправляете 00 на 47 в hexedit, сохраняете — файл открывается, внутри изображение с флагом. Такие задачи встречаются на каждом втором CTF для новичков, и решаются они за минуту, если знаешь, куда смотреть.
Ограничения strings: находит только ASCII и Unicode (с флагом -e l для UTF-16 little-endian или -e b для big-endian). Если данные закодированы XOR-шифром, сжаты или обфусцированы — strings бесполезен. Тут нужна деобфускация через скрипт на Python. Trail of Bits CTF Field Guide подробно описывает работу с бинарными данными через bytearray — чтение файла в массив байтов, посимвольный XOR с ключом, реверс последовательности.
File carving — извлечение файла, вложенного внутрь другого. Классический приём в forensics CTF заданиях: внутри PNG прячется ZIP-архив, внутри архива — текстовый файл с флагом. Binwalk — главный инструмент для этого.
Анализ без извлечения: binwalk challenge.png — покажет список найденных сигнатур с их смещениями. Если binwalk нашёл ZIP-архив на смещении 0x145A0, следующий шаг — извлечение.
Извлечение: binwalk --extract challenge.png — создаст директорию _challenge.png.extracted со всеми найденными вложенными файлами. После извлечения запускаете цикл алгоритма заново: file на каждом извлечённом файле, затем exiftool, strings и далее по списку.
Для ручного извлечения по известному смещению — dd: dd if=challenge.png of=hidden.zip bs=1 skip=83360. Здесь skip — смещение в байтах, которое binwalk показал в анализе. Ручной способ полезен, когда автоматическое извлечение binwalk ломает структуру файла (а такое бывает).
Альтернатива — foremost: foremost -i challenge.png -o output_dir. Работает по тому же принципу (поиск по сигнатурам), но иногда находит то, что binwalk пропустил. Если один инструмент не дал результата — попробуйте другой. Это не лень, это метод.
Ограничения binwalk:
dd надёжнееСтеганография — сокрытие данных внутри других данных так, чтобы сам факт сокрытия не был очевиден. На CTF это одна из самых частых подкатегорий forensics-задач.
steghide работает с JPEG, BMP, WAV и AU. Извлечение: steghide extract -sf image.jpg. Если данные защищены паролем, steghide запросит его. Пустой пароль (просто Enter) срабатывает удивительно часто на начальных задачах — всегда пробуйте первым. Для брутфорса паролей есть stegseek — быстрый перебор по словарю.
zsteg специализируется на PNG и BMP, ищет данные в младших битах пикселей (LSB — Least Significant Bit). Запуск: zsteg image.png. Выводит все потенциальные скрытые данные по разным битовым каналам и кодировкам. Работает быстро, результат сразу.
stegsolve — Java-приложение для визуального анализа. Позволяет переключать цветовые каналы, применять фильтры, просматривать отдельные битовые плоскости. Нужен, когда данные спрятаны визуально — текст, написанный цветом, отличающимся от фона на один бит. Глазами не видно, но при фильтрации проступает.
Критично: steghide не работает с PNG, zsteg не работает с JPEG. Это самая частая ошибка новичков — запускают не тот инструмент под формат. Таблица совместимости:
| Инструмент | JPEG | PNG | BMP | WAV | Метод |
|---|---|---|---|---|---|
| steghide | Да | Нет | Да | Да | Встраивание с паролем |
| zsteg | Нет | Да | Да | Нет | LSB-анализ |
| stegsolve | Да | Да | Да | Нет | Визуальный анализ битовых плоскостей |
Запомните эту таблицу — она сэкономит кучу времени на соревнованиях.
Данные в аудиофайлах часто прячут в спектрограмме. Откройте файл в Audacity (или Sonic Visualiser) и переключитесь в режим спектрограммы. Нередко на ней виден текст или QR-код, нарисованный частотами — классический приём для начальных CTF-задач. Выглядит как магия, когда видишь в первый раз.
Отдельного упоминания заслуживает Aperi'Solve — онлайн-сервис, который автоматически прогоняет загруженный файл через strings, file, zsteg, binwalk, foremost и другие утилиты одновременно. Один сервис заменяет первые пять шагов алгоритма. StegOnline позволяет анализировать битовые плоскости изображений в браузере без установки Java для stegsolve. Стеганография по-настоящему ощущается только когда сам разбираешь реальные файлы с вложениями. Готовый стенд для практики есть на HackerLab.pro — российская CTF-платформа с категориями forensics, stego, crypto и другими. Нужна регистрация, после неё доступны задачи разных уровней сложности.
PCAP-файлы — запись сетевого трафика. В CTF-заданиях по форензике внутри обычно скрыты переданные файлы, учётные данные или текстовые сообщения.
Базовый алгоритм работы с PCAP:
wireshark capture.pcaphttp (только HTTP), dns (DNS-запросы), ftp-data (FTP-передачи), tcp.port == 4444 (конкретный порт)Что искать: HTTP-ответы с подозрительными файлами или base64-данными, DNS-запросы к нестандартным доменам (DNS-туннелирование — данные закодированы в поддоменах), FTP-сессии с передачей файлов, нешифрованные credentials в HTTP Basic Auth.
Ограничение: если трафик зашифрован TLS, Wireshark покажет только факт соединения, но не содержимое. На CTF обычно дают либо нешифрованный трафик, либо TLS-ключи отдельным файлом для дешифровки.
Вместо того чтобы запускать всё подряд, используйте таблицу:
| Ситуация | Первый инструмент | Следующий шаг |
|---|---|---|
| Файл без расширения | file |
По результату — соответствующий инструмент |
| JPEG-изображение | exiftool → strings → steghide |
Если пусто — binwalk |
| PNG-изображение | exiftool → strings → zsteg |
Если пусто — binwalk, stegsolve |
| Архив или бинарный файл | strings → binwalk --extract |
Анализ извлечённых файлов |
| Аудиофайл (WAV/MP3) | strings → спектрограмма в Audacity |
steghide (для WAV) |
| PCAP-файл | Wireshark → Export Objects | Follow TCP Stream |
| file говорит «data» | xxd — проверить magic bytes |
Починить заголовок в hexedit |
| Ничего не находится | Aperi'Solve (онлайн) | Пересмотр подхода, проверка подсказок |
Сводная таблица для быстрого выбора с учётом ограничений:
| Инструмент | Преимущества | Ограничения | Когда НЕ использовать |
|---|---|---|---|
| file | Мгновенный результат, предустановлен | Обманывается подменой magic bytes | Заголовок намеренно повреждён |
| exiftool | Поддержка сотен форматов | Не находит стего-данные | Файл сильно повреждён |
| strings | Быстрый поиск текста в любом файле | Не находит закодированные данные | XOR/шифрованные данные |
| binwalk | Автоматическое извлечение вложений | Ложные срабатывания, ломает структуру | LSB-стеганография |
| steghide | Извлечение с паролем | Только JPEG, BMP, WAV, AU | PNG-файлы |
| zsteg | Быстрый LSB-анализ | Только PNG и BMP | JPEG, аудио |
| foremost | Восстановление по сигнатурам | Медленнее binwalk на больших файлах | Задачи без вложенных файлов |
Самая частая ошибка — запустить один инструмент, не получить результата и сдаться. Forensics CTF задания часто требуют цепочки из 3-5 инструментов последовательно: сначала binwalk извлекает ZIP, потом strings находит base64 внутри текстового файла, потом base64 -d раскодирует его в ещё один файл. Вторая ошибка — игнорировать «скучный» вывод strings: флаг может быть среди сотен мусорных строк, и без grep его легко пропустить.
Ещё грабли, на которые наступают регулярно:
--extract — сначала запускайте без флага (анализ), потом с флагом (извлечение). Автоматическое извлечение создаёт десятки мусорных файлов, если запустить сразуstrings -e l (little-endian) или strings -e b (big-endian)strings challenge.png | grep -i "flag" или strings challenge.png | grep -i "ctf" часто решает задачу за секундуФорензика на CTF — это прежде всего методичность. Не интуиция, не везение, а последовательное прохождение алгоритма с каждым файлом, который встретился на пути. Я видел, как новички решают сложные стего-задачи быстрее опытных игроков — просто потому, что проходят чеклист шаг за шагом, не пропуская «очевидные» пункты. Опытные участники иногда перепрыгивают через базовые проверки и упускают флаг, лежащий в поле Comment метаданных. CTF writeup-разборы на CTFtime подтверждают это раз за разом: победители чаще всего использовали не какой-то хитрый инструмент, а стандартный набор file → exiftool → strings → binwalk — просто делали это дисциплинированно.
Проверьте себя: скачайте любой forensics-таск с picoCTF или HackerLab и прогоните через весь алгоритм от начала до конца. Если хочется разобраться глубже и с наставником — на codeby.school в курсе IB Basics эту цепочку проходят на реальных файлах без «вы должны знать Linux на уровне X» в качестве входного барьера.
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...