煙と消えるその前に

一服してるうちに忘れる、自分のための備忘録。とかとか

SECCON 2013 CTF オンライン予選に参加してみた

気づけば1週間も経ち、若干いまさら感がありますが記録がてら書きます。
SECCONなにそれおいしいの?な自分が、誘われるままにSECCON 2013 CTF オンライン予選に参加してきました。
いずれも初参加の4名が、Route9というチームで参加。
成績は324チーム中53位!(棄権チーム含むけど...)
初めてにしてはがんばった気がするなーと思いつつ、私が解いた/解けそうで解けなかった問題を挙げておきます。

公式サイト:

解いた問題(他にも手をつけたけど解答まで辿りつけず...):

  • ネットワークWeb 200点 FindTheKey
  • ネットワークWeb 300点 hidden message

ネットワークWeb 200点 FindTheKey

seccon_q1_pcap.pcap(保存期間7日間なので消えてるかも) というファイルが添付されていて、そこから鍵を探す問題。

とりあえずwiresharkにくわせてみると、pingのパケットが出てきました。
なんだこれーと思いながら眺めてると、http通信しているログが・・・。

f:id:paty_fakename:20140202152847p:plain

どうやらkagi.pngという画像をHTTP GETしているみたい。
そのものずばりこのpngを復元すれば鍵が手に入るのかなと、バイナリデータを引っこ抜いてみます。
pngのフォーマットは"89 50 4E 47 0D 0A 1A 0A"から始まって"00 00 00 00 49 45 4E 44 (ここに4バイト)"で終わるそうです。
それっぽいところを探すと、No44-48にかけてビンゴなバイナリが見つかるので、それを抜き出して繋ぎ合わせてみます。
繋いだものを開いてみると・・・

  • 1つ目のレスポンス郡(pcap No 44-48)

f:id:paty_fakename:20140202154858j:plain
お、おう・・・。まさかこれで答えがわかるなんて思ってなかったけど、そう来たかーな感じ。
どうも壊れた画像?を取っていたパケットのようですね。
じゃあ次どうしたものかとseccon_q1_pcap.pcapを眺めていると、kagi.pngを取ってるログがいくつかありました。
壊れた画像のレスポンスは 200 OKで画像丸ごと返してる。次のレスポンスは206で部分的に返してる。そんな感じでレスポンスが5つほどありました。
ははーん、部分的にちゃんとした画像を返して繋ぎ合わせろってことか、と思いバイナリエディタで順に切り貼りしていきます。

  • 2つ目のレスポンス郡(pcap No 58)

Content-Range: bytes 2572-2794/2795とあるので、画像ファイルの2572バイト目(0xac0)からをレスポンスのバイナリで上書きしてみたけど・・・画像変わらず
くじけず次へ。

  • 3つ目のレスポンス郡(pcap No 70-73)

1つ目と同じようにkagi.pngを丸ごと取得していましたが、1つ目の画像から進展なし。

  • 4つ目のレスポンス郡(pcap No 87-89)

Content-Range: bytes 768-2794/2795だそうで、768バイト目(0x300)から上書きしてみます。
すると・・・、おーなんか見えた!これだけでなんとか分かりそうだけど、せっかくなので最後まで復元してみます。

f:id:paty_fakename:20140202165039j:plain

  • 5つ目のレスポンス郡(pcap No 105-107)

Content-Range: bytes 1487-2794/2795なので、1487バイト目(0x5cf)から上書きしてみます。
これで完全に復元できました。keyは"deadbeeffeedbad"となります。

f:id:paty_fakename:20140202165433j:plain

ネットワークWeb 300点 hidden message

q.jpg(保存期間7日間なので消えてるかも)というファイルが添付されていて、そこから鍵を探す問題。
jpgファイルだし、とりあえずバイナリエディタにくわせてみました。
上からつつーっと眺めてみると、末尾に変な文字が。

134.133.95.10in-addrarpa

お?と思い、jpegの画像フォーマットを調べてみると、開始がFFD8、終了がFFD9とのことで、どうも終了マーカの後にこんなバイナリが付属しているようです。

D4 C3 B2 A1 02 00 04 00 00 00 00 00 00 00 00 00 FF FF 00 00 01 00 00 00 AE 39 E1 52 7D 9F 06 00 56 00 00 00 56 00 00 00 9C A3 BA 29 77 57 70 81 05 EC C7 7F 08 00 45 00 00 48 E5 2E 00 00 35 11 38 F2 CA D2 DE C3 85 F2 37 FC DE 5B 00 35 00 34 B0 23 1F CB 01 00 00 01 00 00 00 00 00 00 03 31 33 34 03 31 33 33 02 39 35 02 31 30 07 69 6E 2D 61 64 64 72 04 61 72 70 61 00 00 0C 00 01

けど何のバイナリかわからないしなー、困ったなーとなったところで、とりあえずヘッダっぽい先頭4バイト"D4 C3 B2 A1"をgoogle先生に問い合わせてみることに。
すると、どうやらこれはpcapファイルとのこと。google先生さすがです。

ということで、該当バイナリだけ切り出してwiresharkにくわせてみます。
すると、DNS問い合わせをしたらしきパケットが見つかります。
f:id:paty_fakename:20140202171653p:plain

正直、でっていう感だったわけですが、とりあえずDNSに問い合わせてみるかーということでやってみました。

dig -x @133.242.55.252 134.133.95.10

が、応答かえってこず!えーなんでー。実はダミーバイナリでJPEGの中に隠れたメッセージがあるとか??なんて考えてたけど結局わからず。

後から調べてみたところ、オプション書く位置がまずかったとのこと・・・orz

dig @133.242.55.252 -x 134.133.95.10

実際には確認できてないのですが、
期待通りなら"You.G0t.a.H1dd3n.m3ss4g3.1n.Th15.DNS."が取れて、これがkeyになるとのこと。
後一歩だっただけに悔しい。