気まぐれブログ(日記・技術記事・研究のことなど)

気まぐれに更新します.温かい目で見ていただければ...

埋め込みファイルを抽出する

[Google CTF 2018 BEGINNERS QUEST] FLOPPY を解いていたところ, icoファイルにzipデータが埋め込まれていて, それを取り出す方法を知らなかったので備忘録としてまとめておきます.

binwalkコマンド

[Google CTF 2018 BEGINNERS QUEST] FLOPPYでは, icoファイルのみ渡されて, そこからflagを探せという問題が出題されました. stringsコマンドをかけてファイルっぽいものが埋め込まれているなあと気がついていたのですが, 埋め込みファイルを抽出する方法を知りませんでした.

strings foo.ico 
DDDA
DDDC333333
OOOO
DDDI
ODOI
DDDI
OODI
1DDDI
1DDOI
1DDGK
1OODI
1DDDI
1DOtI
1DDDI
1ODOI
1DDDI
1DDDK
driver.txtUT	<= flagが入ってんじゃね??
-[ux
i Xq
www.comUT	
-[ux
\,-8[
Uka9
%wv%K
l1	h
)RxO
2Sgm
FKQ"
driver.txtUT
-[ux
www.comUT
-[ux

どうやら, binwalkというコマンドを使用することで中身にファイルが埋め込まれているかどうかを確認することができるらしいです.

$ binwalk foo.ico 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
765           0x2FD           Zip archive data, at least v2.0 to extract, compressed size: 123, uncompressed size: 136, name: driver.txt
956           0x3BC           Zip archive data, at least v2.0 to extract, compressed size: 214, uncompressed size: 225, name: www.com
1392          0x570           End of Zip archive

今回はzipファイルが埋め込まれていました.

ddコマンド

あとは埋め込みファイルを抽出すればOKですね. ddコマンドを使用することで, 中身のファイルを取り出すことができるそうです.

$dd if=foo.ico of=a.zip skip=765 ibs=1

上記のコマンドで, 765バイト目からのzipファイルを1バイトずつのブロックとして抽出し, それをa.zipに出力することができます.

こうすることで埋め込みzipファイルを抽出することができました.