SPCお年玉CTF2018のWriteup

あけましておめでとうございます。今年もよろしくお願いします。

さて,私が所属するSPC同好会の部員(@akakou_py)がお年玉CTFを開催したので,せっかくなので取り組んでみたら,意外とあっさりできたので,Writeupを残しておきます。

問題

問題名は,Nabeatsuでした。あの3の倍数と3がつく数字の時にアホになる「世界のナベアツ」のことです。今は落語家をしているらしいですね。

問題はバイナリファイルが2つ,bokeとhutsuというファイル名でした。実際のファイルはSPCのslackの#randomから落とすか,直接akakouにもらってください。

解き方

まず,バイナリファイル2つを眺めました。バイナリファイルを眺める時のポイントは,最初の数バイトのマジックナンバーですね。

hutsuの先頭です。

f:id:gurigoroblog:20180101162721p:plain

16進数で,89 50 47 0D 1A 0A 00 00 48 52で始まってます。これに一番似たものが,PNGファイルのシグネチャとイメージヘッダの一部,89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52でした。赤文字にしたところが,hutsuファイルに欠けているところです。ここで,bokeファイルをみてみます。

f:id:gurigoroblog:20180101163327p:plain

先ほど赤文字で書いた 4E 0A 00 0D 49 44が含まれていることがわかります。ということは,この2つのファイルを合体させるとPNGイメージファイルが得られそうだとわかります。

ここで,法則性をみていきます。まあ,簡単です。問題名がNabeatsuであることからすぐわかります。3の倍数と(10進数で)3のつく数字のバイト数のときはbokeから,それ以外の時はhutsuから1バイトずつ持ってこればいいようです。

というわけで,Cで適当に合体させるためのプログラムを書きました。クッソ汚いですが…

プログラム

特に(10進数で)3のつく数字かどうか判定する文がひどいですね。クソ長いけどこう書いちゃうのが手っ取り早いと思ったので…

答え

年賀状の裏面のようなPNGイメージが得られました。

f:id:gurigoroblog:20180101171555p:plain

答えは,FLAG{H@PPY_NEW_YEAR_DA_WAN_!} でした。

感想

初CTFでしたが,意外とあっさりとできてしまいました。解答の送信は1:01で,問題のアップロードが0:10だったので,解答まで51分でした。一番早かったらしいです。

半分勘みたいなのが当たったのと,プログラムが一発で動いてくれたので,あまり悩まずにすみました。楽しいですよ,CTF。というわけで,お年玉はいただきました〜!!