Перейти к содержимому

Как найти флаг в картинке ctf

  • автор:

Практическая стеганография. Скрытие информации в изображениях PNG

На хакерских конкурсах и играх CTF (Capture The Flag) иногда попадаются задачки на стеганографию: вам дают картинку, в которой нужно найти скрытое сообщение. Наверное, самый простой способ спрятать текст в картинке PNG — прописать его в одном из цветовых каналов или в альфа-канале (канал прозрачности). Для выявления подобных «закладок» есть специальные инструменты, такие как stegsolve, pngcheck и stegdetect, иногда конкурсантам приходится вручную повозиться с фильтрами в GIMP или Photoshop.

Однако прогресс не стоит на месте — и в последнее время всё чаще используются другие способы скрытия данных, например, PNG-наполнение. Посмотрим, как это делается.

Начнём с небольшого теоретического введения по «невидимым» частям PNG.

Альфа-канал

На экране компьютера при отображении картинки цвета создаются сочетанием красного, зелёного и синего компонентов. Эти три цветовые плоскости называются каналами. Обычно они записываются как RGB.

Кроме этих трёх каналов, в PNG может быть ещё четвёртый канал, называемый альфа (обозначается буквой А) для определения уровня прозрачности. Полученное изображение RGBA определяет видимые цвета и степень прозрачности.

В большинстве графических форматов альфа-канал является значением от 0% до 100% (или от 0 до 255 в байтах). Значение 0% (чёрный) обозначает место на изображении, где должна быть полная прозрачность — тут значение RGB игнорируется, и полностью виден фон под картинкой. Значение альфа-канала 100% (белый) означает, что каналы RGB полностью непрозрачны. Промежуточные значения определяют, насколько нужно смешать фон со значением RGB-пикселя.

Альфа-градиент в PNG

Значения альфа-градиента обычно используются для наложения изображения на другое изображение или на веб-страницу. Альфа-градиенты есть в PNG, WebP, ICO, ICN и других растровых форматах. Формат GIF поддерживает только логическое значение (пиксель либо прозрачен, либо нет).

Альфа-канал — только один из вариантов для размещения скрытого текста. Переходим к PNG-наполнению (padding) для прямой записи данных в бинарный файл.

PNG-наполнение по столбцам

Формат PNG достаточно прост. Каждый файл начинается с восьми стандартных байт подписи, вот её десятичные значения: 137 80 78 71 13 10 26 10 . Первый байт выбран за пределами ASCII, чтобы никакой редактор случайно не принял изображение за текстовый файл. Следующие три байта соответствуют буквам P, N, G. Затем разрыв строки DOS (13 10), маркер DOS окончания файла (26), чтобы программа type не выдавала весь бинарный мусор, и маркер Unix новой строки.

После заголовка начинаются блоки данных (chunks) со стандартной структурой. Сначала идёт блок IHDR с указанием ширины и высоты изображения, цветового пространства, количества бит на пиксель, методом сжатия, методом фильтрации и указанием наличия/отсутствия чересстрочного кодирования. Для ширины и высоты выделено по четыре байта, для остальных параметров — по одному байту.

Затем следует опциональный блок tEXt с текстовыми метаданными, например, с названием программы, которая сгенерировала данный файл PNG. В текстовые блоки можно записывать текстовую информацию в открытом виде.

За IHDR и tEXt следуют блоки IDAT со сжатыми значениями RGB или RGBA для растровых пикселей. При рендеринге PNG обрабатывается IHDR, выделяется буфер в памяти для изображения, данные извлекаются из сжатого формата и попиксельно записываются в буфер. Файл PNG завершается блоком IEND.

В конце каждого блока записана контрольная сумма CRC для этого блока, которая вычисляется по стандартному алгоритму.

Обычно изображения PNG содержат 8 или 16 бит информации на каждый канал RGB или RGBA, то есть выходит от трёх до восьми байт на пиксель. В таком формате все байты заняты полезной информацией о цвете и прозрачности, так что в конце каждой строки графического изображения у нас нет места для записи произвольных данных.

Но для задач стеганографии нужно знать, что PNG поддерживает и меньшую глубину цвета: 1 бит (2 цвета), 2 бита (4 цвета) и 4 бита (16 цветов). В такой ситуации получается, что в одном байте хранится информация о нескольких пикселях. Вот здесь и появляется теоретическая возможность для «горизонтального» наполнения PNG посторонними данными. Если ширина картинки в пикселях не кратна восьми, то в последнем байте строки остаётся неиспользуемые биты, которые все вместе формируют целый неиспользуемый «столбец пикселей».

В случае 1-битного изображения в конце каждой строки может остаться до 7 свободных бит, которые не будут обработаны парсером. В случае 2-битного изображения в последнем байте остаётся до 3 свободных бит. Онлайновый инструмент FotoForensics находит такие неиспользуемые «столбцы пикселей» в изображениях PNG.

Впрочем, PNG-картинки с малой глубиной цвета встречаются очень редко, поэтому и данный метод стеганографии можно считать экзотикой. Если вам попалось PNG-изображение с 2, 4 или 16 цветами, один этот факт уже вызывает подозрение и может инициировать проверку PNG-наполнения по столбцам.

Совсем другое дело — PNG-наполнение за границами картинки. Это более простой метод стеганографии, который позволяет спрятать в изображении гораздо больше информации.

PNG-наполнение за границами картинки

PNG-наполнение за границами картинки (post-pixel padding) часто используется в различных играх, головоломках и конкурсах, не только хакерских. Вот как работает этот метод:

    Берём изображение PNG (с любой глубиной цвета).


Вставляем секретную информацию в нижнюю часть картинки.

  • Сохраняем PNG, не используя чересстрочное кодирование.
  • Открываем файл в hex-редакторе.
  • Находим блок IHDR. Он располагается в начале файла после восьми обязательных байт подписи и помечен как IHDR.


    Первые четыре байта после метки IHDR — это ширина файла, следующие четыре байта — высота. Уменьшаем это значение c 00 00 01 9D (413 пикселей), например, до 00 00 01 7E (382 пикселя).


    Не забудьте пересчитать четыре байта CRC (в формате PNG вычисляется значение CRC для каждого блока данных, в том числе для IHDR), которые записаны в конце блока. Если вы не можете посчитать CRC самостоятельно, посмотрите это значение в любом PNG-файле с аналогичными значениями блока IHDR.

    Обратите внимание, что секретные данные остались в нижней части изображения. Размер файла не изменился: 335 906 байт. Просто парсер теперь не обрабатывает эти пиксели — и нижняя часть картинки не демонстрируется на экране.

    Несложно догадаться, что в «секретной» части картинки можно спрятать не только текстовую надпись, но и произвольные данные. Например, мы можем записать туда запароленный архив RAR. Картинка с секретным посланием может быть опубликована на Habrastorage или любом другом общедоступном хостинге. Послание получит только тот человек, с которым вы заранее договорились о способе передачи информации и согласовали пароль. Таким способом вредоносные программы могут передавать полезную нагрузку через Хабр и другие общедоступные хостинги.

    На правах рекламы

    VDS для размещения сайтов — это про наши эпичные! Все серверы «из коробки» защищены от DDoS-атак, автоматическая установка удобной панели управления VestaCP. Лучше один раз попробовать 😉

    Введение в CTF¶

    task-based ctf (jeopardy) — игрокам предоставляется набор заданий (тасков), к которым требуется найти ответ. Ответом является флаг — набор символов или произвольная фраза. Каждое задание оценивается различным количеством очков, в зависимости от сложности. Обычно выделяются следующие категории:

    • admin — задачи на администрирование.
    • joy — различные развлекательные задачи вроде коллективной фотографии или мини-игры.
    • ctb — задачи на аудит удалённых машин (crack the box).
    • reverse — исследование программ без исходного кода (реверс-инжиниринг).
    • stegano — стеганография.
    • ppc — задачи на программирование (professional programming and coding).
    • crypto — криптография.
    • web — задачи на веб-уязвимости, такие как SQL injection, XSS и другие.
    • forensics — одна из сложных категорий заданий, сравнимая с PWN.

    Рекомендации¶

    • Обращайте внимание на текст задания, название, адрес. Там могут быть подсказки.
    • Активно используйте интеренет, некоторые таски специально сделаны с расчетом на это.
    • Гуглите все, что вам кажется подсказкой.

    Описание категорий и способы решения¶

    admin¶

    • Обычно задания, связанные с работой сисадмина : восстановление данных, виртуальные машины и т.д. Скорее всего, вам нужно будет просто погуглить, как делается та или инная вещь.

    Joy¶

    • Обычно какая-то игра , в которой нужно найти флаг. Например, пройти карту в какой-нибудь Half-Life.

    Reverse¶

    • Достаточно сложная категория. Обычно приходится дизассемблерировать, затем редактровать код на ассемблере.
    • Но бывают и более простые задания. Сперва следует обратить внимание на формат файла , что он из себя представляет. Затем открыть бинарник в текстовом редакторе и пробежать по нему глазами в поисках чего-то интересного. В этом может помочь перевод в hex. В vim это делается командой :%!xxd , обратно: :%!xxd -r .

    Stegano¶

    • Стеганография — это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи.
    • Чаще всего вам дается изображения в котором скрыт флаг. В самом простом случае он находится на картинке, но его не видно. Тут можно либо пробежаться по каналам, либо сделать XOR с оригинальным изображением, если оно есть. Программа для этого указана ниже .
    • В более сложных случаях в изображении зашит не просто флаг, а какая-то другая информация, которую нужно дальше преобразовать в него.
    • Первым делом при решении открываем Stegsolve (см. здесь).
    • Так же есть стега с аудио-файлами, такие задания достаточно сложные.

    PPC¶

    • Это категория должна вам понравиться! Ничего искать не надо, просто напишите программу для автоматизации ваших действий.
    • Обычно эти таски решаются на python , так как это самый удобный язык для прототипирования.
    • Если вам необходимо делать POST и GET запросы используйте встроенную библиотеку requests в python . Если вам нужно куда-то подключаться используйте сокеты .

    Crypto¶

    • Ознакомьтесь с базовыми алгоритмами шифрования тут. Поймите, какой подходит вам. Это пригодится!
    • Так же бывают таски с эзотерическими языкми . Погуглите этот язык и перевидите программу на нормальный для дальнейшего решения.
    • Если вам дан код программы и выходные данные, просто разберитесь в коде и напишите декодер.

    Web¶

    • Внимательно осмотрите весь html код .
    • Обратите внимание, какие cookie передаются.
    • Посмотрите, что происходит при работе с сайтом: что отправляется и что примается. Используйте встроенный в браузер отладчик .
    • Проверьте сайт на наличие известных папок. Например, /phpmyadmin или /admin .
    • Проверьте сайт на наличие sql-injection .
    • Если вам необходимо отправить POST запрос с вашими параметрами или cookies, будет удобно использовать библиотеку requests в python .

    Forensics¶

    • Каких-либо универсальных методов решения тасков категории forensic нет. Никогда не знаешь, что тебе за инцидент попадется и как с ним справляться.
    • Чаще всего таски решаются использованием binwalk .
    • Получить подробную информацию о содержании файла и распаковать все, что внутри: binwalk -e file .

    © Copyright 2019, Школа 9 им А. С. Пушкина

    Built with Sphinx using a theme provided by Read the Docs.

    Всё о CTF в России

    В прошлый понедельник мы запустили в telegram-боте один из финальных тасков — «Lot of stuff», категория Misc t.me/ctfnewsbot. Задание было оценено в рекордные 300 поинтов, суть проста и невероятна одновременно — найти флаг любой ценой. Подсказки от авторов помогли мало, и с решением справился только один человек — kazgeek. Пришло время разбираться, что нужно было сделать. Публикуем два разбора: один — от нашего подписчика Юрия Михайлова, второй — от автора.

    Спойлер: авторский разбор — более краток 🙂

    Разбор задания от Юрия Михайлова, подписчика CTF News:

    1) В изначальном файле идет картинка с медведем, далее в этом же файле по смещению 0x9856. 0x9a69 находится фрагмент, который пока назовем «заначка», а после «заначки» идёт rar-архив, который назовем «rar1».

    2) В «rar1» находятся три файла — 1.doc (в файле 1.doc написано в частности: «Если вы подумали что это конец — вынужден вас огорчить», потому что это ещё не конец задания); картинка с медведем и картинка с собаками. В файле картинки с собаками находится еще и gimp-файл.

    3) Открываем gimp, там картинка в 4 слоя. Просматриваем все 4 картинки и находим:

    • на картинке с орками, правый верхний угол — строка «Rar!»
    • на картинке с мариком — строка «WTF!»
    • на последней картинке — строка «fun_or_die?».

    4) Возвращаемся к «заначке» — там 500 с небольшим байт, сигнатур нет, однако замечаем первые 3 байта 5e5f5e. Берем подсказку с картинки орков, меняем эти три байта на Rar.

    5) Итак, эта «заначка» — еще один архив. Разархивируем, там спрашивает пароль, пароль составляем из строк с картинок = «WTF!fun_or_die?».

    6) Всё, в архиве находится файл 3.txt, в нем — сообщение об успешном решении задания.

    Но это ещё не всё (разбор от авторов).

    Всем, кто добрался до финала, а также в группу CTF News ВКонтакте мы выкладывали подсказку, а автор задания дал ещё одно напутствие:

    Введите описание изображения

    Если бы вы открыли .txt файлом любым doc-редактором (платным Word, бесплатным OpenOffice, онлайн Google Docs), то сразу в глаза бросаются подчёркнутые слова. Смотрим в словарь — слово написано правильно, но что-то всё равно выдаёт ошибку.

    Введите описание изображения

    Здесь нам поможет студенческая смекалка по повышению процента оригинальности рефератов при прохождении через проверку на Антиплагиат (автор этого никогда не делал и вам не советует). Мы поменяли кириллицу на латиницу. Ведь буква a и а (и так далее) — выглядят одинаково, хотя написаны на разных раскладках клавиатуры.

    Собираем полученные буквы, оборачиваем в CTF<>, и в итоге наш флаг — CTF .

    ПОЛНОЕ РЕШЕНИЕ ОТ АВТОРА:
    1. Открываем хексом — видим картинку.
    2. Картинка пуста, ищем дальше — находим под ней архив.
    3. Копаем архив, в нем из полезного только картинка с псами и исходным изображением.
    4. Сверяем наш файл с исходным изображением — находим неизвестный кусок.
    5. Картинка с псами имеет под собой гимповский файл — вырезаем его и смотрим.
    6. Обнаруживаем под картинкой слои — смотрим. Первый скрытый слой дает нам «Rar!» (находится под кончиком стрелы у первого орка);
    7. Понимаем, что неизвестный кусок является раровским файлом, но он оказывается под паролем…
    8. Смотрим другие два слоя, находим на них картинки с фразами «WTF!» и «fun_or_die?». Методом ручного брута обнаруживаем, что это, черт возьми, и есть наш пароль от архива «WTF!fun_or_die?»!
    9. Смотрим наш новенький запароленный архив и . читаем текст, ничего (в авторском варианте было другое слово — прим. ред.) не понимаем. Думаем: дай-ка проверим на орфографию в ворде. хм. что-то за ошибки…
    10. Находим секретные буквы — получаем ответ «OaopyXKoEHcoMPaHy».

    Не забываем обернуть ответ в наш любимый CTF<. >.

    «Облачный» партнёр нашего контеста — компания «ИТ-ГРАД», первый сервис-провайдер VMware в России и СНГ.

    P.S. Cегодня в группе Летней школы CTF будет опубликован ещё один таск. На этот раз финальный 🙂

    CTF Основы стеганографии в «capture the flag»

    Недавно образовалась команда новичков по ctf нашего любимого форума, в связи с этим своей статьей хотел бы начать обмен опытом, так сказать, по решению тасков той или иной направленности. Ведь всегда есть некий алгоритм, которому вы следуете при решении тасков, который приводит, на легком и среднем уровне, к найденному флагу. Это тот уровень, который находится между «пфф, изипизи» и тем, когда вы начинаете видеть заговоры иллюминатов во всех хинтах и файлах.

    И так, я попробую рассказать вам основы стеганографии. Точнее сказать, основы в моем представлении. Приятного чтения

    1. Область применения

    Что такое стеганография рассказывать не буду, дабы не захламлять статью. Просто поясню, что это метод сокрытия информации в объектах(картинка, музыка, видео, кожа головыJ(это не шутка) и т.д.) в которых непосвященный человек не сможет разглядеть ничего подозрительного.

    В ctf чаще всего встречается стего в следующих типах файлов:
    —-> Картинки – bmp, png, jpg, tiff, gif
    —-> Звуковые файлы – wav, mp3, midi
    —-> Видео файлы – mp4, avi
    И для каждой области файлов свои инструменты обнаружения стего.

    2. Инструменты
    Ниже будут приведены тулзы для определения стеганографии разделенные по операционным системам. Я их выделил две: Linux и Windows.

    Картинки:
    Linux:
    —-> File – консольная утилита для определения типа файла
    —-> Strings – консольная утилита для вывода строк файла
    —-> Exiftool – консольная утилита для чтения мета-данных
    —-> Binwalk — инструмент для поиска файлов и исполняемого кода в данном двоичном образе
    —-> Stegsolve — open source решение для анализа структуры файлов
    —-> Steghide — консольная C++ утилита позволяющая скрывать информацию методом стеганографии в графических или аудио файлах
    Windows:
    —-> PentestBox — портативная сборка популярных security утилит
    —-> Stegsolve — open source решение для анализа структуры файлов
    Web ресурсы:
    —->

    Ссылка скрыта от гостей
    — аналог exiftool
    —->
    Ссылка скрыта от гостей
    — определения геоданных в картинке
    —->
    Ссылка скрыта от гостей

    — дешифровка стего зашифрованных с помощью метода lsb(если скрытая часть является то же картинкой)
    —->

    Ссылка скрыта от гостей
    — декодирование стего картинки если в ней зашифрован текст
    —->
    Ссылка скрыта от гостей

    — аналог предыдущего
    Python библиотеки:
    —-> from PIL import Image
    img = Image.open(‘steg.png’, ‘r’)
    for i in range(128): #цикл по высоте (допустим ширина 128 пикселей)
    for j in range(128): #цикл по ширине(допустим ширина 128 пикселей)
    r,g,b = img.getpixel((j,i)) #чтение каждого цвета одного пикселя

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

    Звуковые файлы:
    Со звуковыми файлами нет необходимости разделения по операционным система т.к. софт и там и там одинаков. За исключения основных утилит: file, strings exiftool и их аналогов в Windows, которые я описал выше.

    —-> Sonic Visualiser – это приложение для просмотра и анализа содержимого музыкальных аудио-файлов
    —-> Audacity — свободный многоплатформенный аудиоредактор звуковых файлов, ориентированный на работу с несколькими дорожками
    —-> Python:
    —-> from scipy.io.wavfile import read
    rate, samples = read(‘steg.wav’) #чтение рейтов и массива семплов для их анализа
    —->

    Ссылка скрыта от гостей

    — декодер стего файлов

    Видео файлы:
    —-> ffmpeg — набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах
    Я извинтиляюсь за такой скудный набор тулз для стего видео файлов, но это связано с моим скудным опытов в ctf. И все задачи которые я решал по стего, которые были связаны с видео файлами, сходились к тому, что бы разбить видео ряд на кадры и уже с ними продолжать работу.

    Что же, инструменты даны. Теперь я бы хотел показать вам как я с этими инструментами работа при решении тасков.

    Картинки:
    Windows:
    —-> PentestBox
    Первым делом качаем

    Ссылка скрыта от гостей

    . Он нам необходим для возможности использовать утилиты Linux (file, strings, grep).
    После установки и запуская вы должны будете увидеть консольку, в которой можно использовать некоторые unix команды.
    —-> Утилита file
    Вот смотрите, допустим у нас есть файл steg.txt

    1.png

    Давай те посмотрим на него через утилиту file

    2.png

    и вы только посмотрите какой хитрец подлец. Оказывается это bmp файл. Картинка.
    —-> Утилита strings
    Далее, снова имеем в наличии файл steg.bmp. Давайте попробуем использовать утилиту strings. Мы там увидим много чего(неполезного), а вот что бы увидеть полезное давайте немного подружим strings с grep и вот что мы получим:

    3.png

    «Изипизи» как говорится. Ессесно слово flag замените на любое другое по которому вы его будете искать.

    Этот метод, кстати, будет бесполезен если вы получите данные картинки, в виде одной строки. Например после манипуляций с python. Т.к. утилита strings, как следует из названия, читает файл по строкам. Ну вы понимаете конечно, что если искать вхождение какой нибудь подстроки в большой строке, то тут можно получить только один тип информации. А именно есть эта подстрока в этой строке или нет.
    —-> Stegsolve
    ООооочень полезная утилите для стего. Качаем прогу

    Ссылка скрыта от гостей

    . Это исполняем jar файл, по этому для запуска необходим предустановленный jdk или jre.
    И так программа имеет следующий интерфейс

    4.png

    —-> #1 File format – выдает информацию вида

    5.png

    Очень полезен для определения спрятанных сообщений и даже картинок и файлов внутри исследуемой картинки.
    —-> #2 Data extract – то же очень полезная возможность программы позволяющая выявить lsb стего. Виде интерфейса меню такой

    6.png

    Выбрав некоторые биты цветов(как показано на картинке) stegsolve прочтет только те биты которые вы отметили и выдаст результат в форме.
    Главная проблема заключается в том, что бы понять, в какие биты были использованы для стего.
    —-> #3 Stereogram Solver – накладывает друг на друга одно и то же изображение, после чего есть возможность двигать один из слоев. Выглядит все это примерно так

    7.png

    Далее покажу на нормальном пример и вы увидите его полезность.
    —-> #4 Frame browser –позволяет нам просматривать гиф по кадрам. По моему опыту еще ни разу не использовал эту часть.
    —-> #5 Image combainer – позволяет нам накладывать два изображения друг на друг(как в режиме stereogram solver, но картинки разные) благодаря чему можно увидеть различия (видимые) в картинках. Это применяется тогда, когда нам дана картинка со стего и ее оригинал. Ну об этом расскажу чуть позже.

    Ну и самое главное, это начальный экран программы, который позволяет просматривать картинку по слоям, оставляя только сини пикси или зеленые, или только первые биты красного цвета и многое другое.

    Вывод прост – очень полезная программа, которая достойна быть в арсенале любого, кто решать стего таски.

    Linux:
    За исключением exiftool, binwalk и steghide все что мы перечислили выше справедливо и для Linux. По этому далее мы рассмотрим только три этих утилите.

    —-> Утилита exiftool – читает мета-данные файлом. Применяется первым делом. Может дать много разной информации от автора статьи до кол-во фреймов на секунду в видео файле.
    —-> Steghide оооочень хорошо описан данный инструмент

    Ссылка скрыта от гостей

    . Так же эта утилита фигурирует в курсе ParaNoID, так что советую к ней приглядеться
    —-> Binwalk
    То же очень полезная тулза. Распознает сигнатуры внутри файла. Но я не советую свято верить ему. Были моменты когда он давал неправильную информацию. Как я понял это из за того, что он просматривает только сигнатуры начала.
    Binwalk имеет очень много функций, но нам достаточно 2х. Просто передавая ему файл на вход мы получаем инфу о хранящихся в нем файлах.
    А добавив ключ -e распакуем эти файлы в ту же директорию, что и оригинальный файл в отдельную директорию _[имя файла].
    Выглядит это примерно так: Есть файл steg.jpg, вот что выдает утилита file

    8.png

    Он думает что это картинка Давайте спросим у binwalkа

    9.png

    У него есть другое мнение. Давайте дадим ему попробовать распаковать их binwalk -e steg.jpg

    10.png

    11.png

    вот мы и нашли спрятанные картинки

    Звуковые файлы:
    —-> Sonic Visualizer
    Функционал:
    Открывать звуковые файлы различных форматов (WAV/AIFF, Ogg, mp3 и т.д.) и просматривать их графическое представление;
    Просматривать такие визуализации, как волновое представление и спектрограмма с возможностью интерактивного управления параметрами отображения;
    В одном окне программы строить несколько волновых представлений и спектрограмм, причем каждая визуализация может иметь собственные параметры отображения;
    Синхронно прокручивать все интересующие построенные визуализации и изменять их масштаб;
    Снабжать звуковые данные примечаниями с помощью добавления различных меток и выделения отрезков сигнала

    По моему опыту вся работа в этом редакторе сводится только к тому, что бы просмотреть звуковой ряд под разными слоями спектрограмм и игры с их настройками.

    12.png

    Давай те покажу на примере. Пусть имеется некий wav файл. Если просто открыть его в SV то вот что мы увидим

    Пока что ничего не понятно. Но если наложить слой спектрограммы

    13.png

    14.png

    и вот мы уже видим более осмысленную картину, с которой уже можно работать

    Что касается Audacity, то это аналогичный аудио редактор с практически теми же возможностями. Тут уж кто чем привык пользоваться.

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

    ffmpeg -i input.mp4 -r 25 -f image2 images%05d.png

    где:
    —-> i – видео файл, который необходимо разбить на фреймы
    —-> -r – кол-во фреймов в секунду. Можно узнать в мета данных файла
    —-> -f – тип файла в который необходимо перевести фрейм

    Так же может быть полезен ключ –t: ffmpeg -i input.mp4 -r 25 –t 00:00:01 -f image2 images%05d.png
    Этот ключ позволяет обработать заданное кол-во времени видео файла. В данном примере 1 секунду.

    Теперь я бы хотел расписать некие алгоритмы для различных ситуаций:

    — Первым делом, не важно, какой это файл, проверяйте утилитами file, exiftool, binwalk.
    — Далее проверьте утилитой strings [имя файла] | grep –I [искомая подстрока(например flag)]
    — Если ничего из этого не дало результата, то далее уже все зависит от вида объекта.
    Картинка:
    — Если картинка монотонная, то первым делом попробуйте открыть его в каком нибудь реакторе и примините заливку или используйте утилиту Steglove и прогоните по слоям.
    было:

    15.png

    16.png

    Есть с чем работать, как говорится.
    — Если на картинке вы видите два цвета, то первая ваша мысль должна быть – бинарный код
    Например:

    17.png

    Для облегчения это задачи есть наш верный друг python и его библиотека PIL.

    Используем следующим образом: Подключаем библиотеку: import PIL from Image Читаем картинку: img = Img.open(‘[File name]’, ‘r’) С помощью цикла пробегаем по каждому пикселю и читаем его: For I in range([Height]): For j in range([Weight]): r,g,b = img.getpixel((j,i))

    — Если же у нас дана обычная картинка и в ней зашифровано стего, то стоит поискать оригинал картинки с помощью сервисов google pictures или аналогов.
    — Так же было бы не лишним прогнать картинку по всем веб ресурсам которые я указывал выше.

    Звуковые файлы:
    — Если звуковой файл при прослушивании похож на зов пришельцев в брачный период, то сразу же посмотрите спектрограмму этого файла как я описывал выше. С большой вероятностью вы увидите, что то с чем можно будет работать.
    — Если звуковая дорожка монотонно. Я имею ввиду, что на протяжении всей дорожки частоты не превышают определенной границы, то скорее всего это в файле зашифрована бинарная последовательность. На разных слоях спектрограммы будет лучше видно. Так же в этом может помочь наш друг python и его библиотека scipy.io.wavfile.

    Подключаем библиотеку: from scipy.io.wavfile import read Читаем частоту и семплы: rate, samples = read('steg.wav') Пробегаем по массиву семплов и проверяем наши догадки: for I in range(len(samples)): print(samples[i])

    — Если же звуковой файл у нас будет в стерео, то код немного поменяется:

    Подключаем библиотеку: from scipy.io.wavfile import read Читаем частоту и семплы: rate, samples = read('steg.wav') Пробегаем по массиву семплов и проверяем наши догадки: for I in range(len(samples)): print(str(samples[i][0]) + ‘-’ + str(samples[i][1]))

    Т.е. каждый элемент массива samples будет иметь массив из двух значений. Первой и второй дорожки соответственно.
    Кстати из за этого можно попробовать найти разность звуковых дороже.

    Подключаем библиотеку: from scipy.io.wavfile import read Читаем частоту и семплы: rate, samples = read('steg.wav') Пробегаем по массиву семплов и проверяем наши догадки: for I in range(len(samples)): print(samples[i][0]-samples[i][1])

    Вполне может оказаться, что результатом станет последовательность цифр каждый элемент которой, переведя в нужную кодировку, может составлять флаг.

    На этом я хочу, пока что, закончить. Статья будет дополняться, украшаться и улучшаться, что бы стать достойным пособием для новичков в стего. Так же хотелось бы прочитать о ваших способах работы со стего.
    Надеюсь эта статья пригодится новичкам и поспособствует приливу новой крови в бурную реку ctf соревнований. Всем удачи!

    Ссылки на тулзы:

    Ссылка скрыта от гостей
    Ссылка скрыта от гостей
    Ссылка скрыта от гостей

    (есть в репозитории Kali)

  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *