Зачарованный лес: LSB → base64 → сказка
Уровень easy, описание: «Любителям сказок посвящается».
- Платформа
- CTF
- Носитель
- PNG
- Приём
- LSB в каналах R, G, B, внутри base64
- Инструменты
zsteg, Stegsolve,base64- Статус
- решено
Зацепка в первой строке zsteg
zsteg enchanted_forest.png
b1,rgb,lsb,xy .. text: "ICAgICAgICAgICAgICAgICAgICAg…"
Это не мусор. ICAg — это base64 от трёх пробелов (20 20 20). Строку стоит запомнить, она встречается постоянно:
echo ICAgICAg | base64 -d | xxd
00000000: 2020 2020 2020
Как это выглядит в битовой плоскости
Чтобы показать наглядно, я повторил приём на своей картинке: спрятал в младшие биты base64 от 15 000 пробелов и короткой сказки. Сама картинка не изменилась, а плоскость младшего бита красного канала (Red plane 0 в Stegsolve) выдаёт всё сразу:

с данными
чистаяДве приметы данных: регулярный узор, который не повторяет контуры объектов, и ровная горизонтальная граница там, где сообщение кончилось. У «природной» структуры картинки узор, наоборот, повторяет силуэты.
Извлечение
Превью zsteg показывает только начало потока. Достаём его целиком:
zsteg -E b1,rgb,lsb,xy enchanted_forest.png > lsb.bin
base64 -di lsb.bin 2>/dev/null > out.txt # -i: пропускать мусор в конце
tr -s ' ' < out.txt # сжать тысячи пробелов в один
То же без терминала: Stegsolve → Analyse → Data Extract, галочки Red 0, Green 0, Blue 0, порядок Row, MSB First, RGB → Save Bin, затем CyberChef → From Base64.
Попробуй сам: forest_stego.png, внутри мой демо-флаг.
показать флаг (спойлер)
h34rt_0f_th3_f0r3stЧто вынести
ICAg…в выводе означает base64 от пробелов, а длинные пробелы часто бывают отступами ASCII-арта или просто «набивкой».- Данные полосой поперёк кадра с ровной границей — почти всегда LSB-встраивание.
- Как устроен такой встраиватель изнутри, разобрано в лаборатории LSB.