CTF Resources
jedním z nejčastějších steganografických triků je skrýt soubor uvnitř obrázku. Soubor se otevře normálně jako obrázek, ale bude také obsahovat skryté soubory uvnitř, obvykle zip, text a dokonce i další obrazové soubory.
důvod, proč to funguje, je ten, že při čtení obrazového souboru má počáteční a koncové bajty diktující velikost obrázku. Prohlížeč obrázků, který používáte, použije informace mezi těmito bajty, aby vám představil obrázek a ignoroval cokoli po ukončení bajtu.
například ukončovací bajt pro JPEG je FF D9 v hex, takže pomocí prohlížeče hex (xxd je dobré pro linux nebo něco jako HxD pro windows) můžete zjistit, kde obrázek končí. Tyto bajty jsou někdy těžké najít v moři čísel ačkoli, takže při pohledu na skládku hex (text představující hex bajtů) může také pomoci najít skryté .txt nebo .zip soubory.
příklad
v příkladu je použita velmi jednoduchá implementace této strategie.jpg soubor v tomto adresáři. Pokud jej uložíte do počítače a otevřete jej pomocí Prohlížeče obrázků, měl by vám být předložen jednoduchý obrázek jpg.
nyní se pokusíme najít vlajku. Otevřete obrázek ve svém oblíbeném editoru hex a začněte hledat něco zvláštního (v tomto okamžiku můžete najít samotný příznak ze skládky, ale pro příklad zkuste jej extrahovat). V dolní části souboru byste měli vidět ukončovací bajt jpg ffd9
:
01e17a0: 685c 7fab 8eb4 5b32 61f1 c4ff d950 4b03 h\....[2a....PK.
další důležitou součástí tohoto řádku je PK
blízko konce. PK
jsou iniciály Phila Katze, vynálezce souboru zip, a označují, že soubor zip začíná v tomto bodě.
pomocí těchto informací můžeme použít další užitečný nástroj pro linux, dd
). Příkaz dd
je velmi univerzální a umožňuje kopírování a konverzi velkého množství souborů. V našem případě jej použijeme k extrahování souboru zip.
víme, kde je umístění souboru zip, ale dd
bere pouze desetinné hodnoty, takže převádíme hexadecimální umístění 0x01e17ad z hexadecimálního na desetinné, abychom získali 1972141.
zapojení do dd:
dd if=example.jpg bs=1 skip=1972141 of=foo.zip
to se vezme v příkladu obrázku.jpg, „v souboru“, pokud čte jeden blok najednou, „velikost bloku“ bs, přeskočí na blok 1972141, přeskočí a zapíše jej do zipu „out file“, kterému říkáme foo.zip. Po dokončení byste měli mít soubor zip, který můžete snadno rozbalit pro přístup k textovému souboru uvnitř.
Toto je dlouhá cesta řešení jednoduchého steganografického problému, ale ukazuje, jak strategie funguje. V sekci Řešení jsou popsány stručnější a efektivnější metody.
detekce
tyto výzvy jsou obvykle prezentovány jako jednoduchý obrázek bez dalších pokynů a je na soutěžícím, aby jej spustil pomocí hexadecimálního editoru, aby zjistil, zda se jedná o steganografii. Pokud se vám zobrazí obrázek a žádné pokyny, vaše nejbezpečnější sázka je, že má něco skrytého po závěrečných značkách obrázku.
řešení
ačkoli je možné a občas praktické řešit tyto úkoly pomocí nástrojů Linuxu, jako je dd
, existují některé nástroje, které to mnohem usnadňují. Binwalk
je nesmírně užitečný nástroj, který automaticky detekuje a extrahuje soubory skryté pomocí nástrojů steganografie
CTF příklad
steganografie tohoto typu obvykle není hodnocena velmi vysoko, ale je slušně rozšířená. BackdoorCTF 2014 vytvořil ten, který je obecně přímočarý, ctfexample.jpg, ale zahrnuje více vrstev.
XXD
HxD
DD
Binwalk