A kép ránézésre nem tartalmaz semmit, teljesen fehér - mégis el van benne rejtve két dolog is

gyors és egyszerű megoldások

A képet letöltve valamilyen elemzőprogrammal (zsteg, binwalk) átugorhatunk pár lépést (az egyetlen megoldás binwalk-ot használt).

megoldás

A képet letöltve és valamilyen képszerkesztővel (PhotoShop, GIMP, szinte bármi ami nem Paint) megnézve láthatjuk, hogy nem teljesen egyszínű, valójában egy nagyon picit sötétebb színnel tartalmaz egy feliratot: cGxhY2Vob2xkZXI= (páran akik idáig eljutottak Z-nek olvasták a 2-t).

Az egyenlőségjel elárulja, hogy ez Base64-es kódolás, dekódolva azt kapjuk, hogy placeholder. Beírva az ellenőrző weblapra:

Congratulations!
You have found the fake flag!

Don't worry though!
Here's a hint:
the first lines of the script the image was made with were:

import struct
import zlib

Tehát sajnos nem ilyen egyszerű a dolgunk, van itt még más is elrejtve…

Amit viszont leszűrhetünk, hogy valószínűleg mélyebben bele kell néznünk a PNG-be, és valószínűleg tömörített adatokkal is lesz dolgunk (zlib)

PNG

(“ajánlott irodalom” ha érdekelnek a pontos részletek)

Kis “mese” a PNG formátum működéséről

Egy PNG fájlban elég sokféle módon szerepelhet képadat, lehet szürkerányalatos kép, színes, átlátszósággal vagy anélkül, a színek lehetnek per-pixel kódolva vagy egy palettából…

Ezenkívül tartalmazhat még mindenféle extra adatokat, leírást, készítés helyét, stb. Ha palettából vannak a színek, akkor a palettát is tárolni kell.

Mindezt a PNG, hasonlóan más formátumokhoz, úgy valósítja meg, hogy különféle típusú “chunk”-okat tartalmaz, bennük adatokkal. Minden “chunk”-nak van neve/típusa, mérete, illetve jár mellé egy ellenőrzőöösszeg (CRC checksum).

Ha belenézünk, a mi PNG képünkön nem látszik hogy bármit “matattak” volna az adatokkal, de ez persze csak azt jelenti hogy a CRC-t újraszámítottam.

Az egyetlen chunk, amelyik zlib-tömörített adatot tartalmaz viszont, az az IDAT, azaz “image data” chunk. Ha simán kiprinteljük a tartalmát, máris megláthatjuk hogy a végén valamilyen extra adat van:

Li4gLyAtLi4gLi0gLS0gLS4gLyAuLi4uIC4tIC0gLiAvIC4uLiAtIC4gLS0uIC8gLS4tLiAuLi4uIC4tIC4tLi4gLi0uLiAuIC0uIC0tLiAuIC4uLg==

Ismét Base64, kitömörítve:

.. / -.. .- – -. / …. .- - . / … - . –. / -.-. …. .- .-.. .-.. . -. –. . …

Ami pedig Morze, a jelentése:

I DAMN HATE STEG CHALLENGES

Ez beírva az oldalra:

Wow, not bad, PM me on discord, and also tell me how you did it!

Igen, amúgy eléggé utálom ezeket a feladatokat, mert baromi sok tippelgetés kell hozzájuk, és ha nem találod el a pontos keresőszavakat, a Google sem segít…

Az ötlet

A feladat ötletét a 2020-as Hungarian Cyber Security Challange (HCSC) egyik feladata (Rock on Snow) adta. Egy titkos üzenetet kellett megfejtetni, ehhez adtak:

  • egy fura dalszöveget txt-ben
  • egy megnyithatatlan PNG képet

A dalszövegről a csapatunkkal kiderítettük hogy egy Rockstar nevű “vicc” programozási nyelven írták, és számokat bont prímtényezőkre. Szintén feltűnt hogy a sorok végén sok fura whitespace (space és tab) volt, de nem tudtunk ezzel mit kezdeni.

A PNG képen én dolgoztam. Kiderítettem hogy a “header” chunkból kitörölték a szélesség/magasság értékeket (lenullázták mindkettőt), és ennek megfelelően a checksum is téves volt.

A PNG formátumba való mélyebb elmerülésem után kiderítettem hogy hogyan függ ezen adatoktól a tömörített adatok mérete (bájtban), és írtam egy kis programot ami próbálgatással kereste az eredetieket.

Miután harmadjára is kijavítottam az “összes” hibát, meg is találta a helyes kombinációt (és a checksum is helyes volt - ezt nem használtam a keresésnél, mert elfeledkeztem róla) - és a képen olvasható volt egy szöveg.

A következő lépést viszont baromi lassan tettük meg: próbálgatással kiderítettem hogy a tab/space karakterek a dalszöveg végére valószínűleg egy stegsnow nevű programból kerültek - ez a program pont így rejt el adatokat szöveges fájlokban. (Előtte tippeltem a Whitespace nevű (szintén “vicc”) programozási nyelvre, tab/space bináris vagy éppen morze kódra, hármas számrendszerre tab/space/újsorokból, és még sok egyébre).

Amint megtaláltam ezt a programot, biztos voltam benne, hogy erre utalt a “Rock on Snow” cím. Az adatokat kinyerni viszont még így sem sikerült elsőre, mert a programot többféleképpen is lehet használni, tud tömöríteni is vagy éppen jelszóval levédeni.

Pár próbálkozás után viszont sikerült megtalálni a helyes opciókat, és a jelszó pedig a PNG-ből leolvasott szöveg volt - és meg is találtuk az elrejtett adatot, és megoldottuk a feladatot.

A feladat eleje véleményem szerint nagyon jó volt, de a végén nagyon sokat kellett tippelgetnünk mire eltaláltuk hogy mit is kéne csinálni - és pont ezek miatt utálom ezt a feladattípust…