NOiSE FEE CTF Challenge writeup

NOiSE FEE CTF Challenge に参加し、1問目と6問目を解いて350点取りました。時間内に解けた問題のwriteupを書きます。



注意:解法のネタバレを含みます。

















1. Process.Collect (50点)

(前略)
Q. FEE-NOiSEの画像を探し出し、通常と違う指を答えよ。

おなじみのhttp://chara.u-stella.co.jpを開いて、通常のフィーちゃんとノイズフィーちゃんで様子が違う指を答えます。

6. Process.Render (300点)

渡された画像からFlagを探し出す問題です。画像は妙に横長(1163x528)な上、何かが見切れており、写真の上半分だけを切り抜いたもののようにも見えます。

画像ファイルのサイズ情報が弄られて下半分が見えなくなっている可能性が最初に思い当たりました。もしそうならば、画像をバイナリファイルとして直接編集して高さの情報を書き換えればうまく行くはずです。

JPEGファイルの詳しいフォーマットは知りませんが、きっと 1163 や 528 という数値がそのまま書いてあるだろうと当たりをつけて、hexdumpしてみます。

> hexdump -C key.jpg | grep "02 10"
00000090  08 02 10 04 8b 03 01 22  00 02 11 01 03 11 01 ff  |......."........|
000228d0  ad 95 f8 75 de 3a 75 a7  47 6d 1a 11 b5 02 10 3f  |...u.:u.Gm.....?|

上の出力から、画像ファイルの0x91バイト目に02 10 04 8bという16進数の並びが存在することが分かります。0x0210=528, 0x048b=1163 なので、ここが画像サイズ情報で間違いなさそうです。ファイルをバイナリエディタで開いて、0x0210の方を適当な大きな値に書き換えてあげれば、めでたく画像(とても良い)が復元できます。

おわりに

残り時間1時間くらいのところで参加して、1問目と6問目を解いた後はGoogle MapとにらめっこしたりGitHubとにらめっこしたりしながら椅子を温めてました。OSINT力が足りない……! 

あとは、3問目の画像を6問目の方法で復元して「画像見てもわかんないなー」とかやっていたのですが、そんな必要全く無かったことに終わったあとで気づきました、不覚……

最後になりましたが、主催のDECLさん、楽しい問題をありがとうございました!