kimtetの日記

CTFのwriteupとか、勉強したこととか

SECCON 2014 横浜大会 CTF ネットワーク予選 write up 問3

つづいて3問目を解説するよ。同じように03フォルダを開くとquestion.txtがひとつのみ。ひらくとこんな感じ。

このパケットデータのアプリケーションプロトコルは何でしょう?
英字でお答えください。

0000   00 1a a0 89 a3 7f 44 94 fc 7e 1a ba 08 00 45 00  ......D..~....E.
0010   00 4c 00 00 40 00 36 11 11 2c d2 ad a0 1b c0 a8  .L..@.6..,......
0020   00 04 00 7b 00 7b 00 38 6d 96 1c 02 11 e8 00 00  ...{.{.8m.......
0030   06 8b 00 00 02 9e ac 1d 02 32 d7 ad 09 99 d8 db  .........2......
0040   8b 49 d7 ad 0a 44 7a a8 0f 7e d7 ad 0a 46 42 28  .I...Dz..~...FB(
0050   23 a6 d7 ad 0a 46 42 2b 5a b3                    #....FB+Z.

問題の考え方

アプリケーションプロトコルを答えよとのことなので、とりあえず以下を確認する。もしTCP/IPじゃないプロトコルだったりして、これでもわからなかったらほかのところにも手を伸ばすことにしよう。

解法

まず、問題文のパケットデータから得られる情報を最初からみていこう。 最初はイーサネットフレームのヘッダです。ネットワークをかじっている人ならおなじみのMACアドレスとか入ってるとこ。データの先頭から14byte分を見る。

0000   00 1a a0 89 a3 7f 44 94 fc 7e 1a ba 08 00 45 00  ......D..~....E.

プロトコルタイプの部分が 08 00 だったので、上位プロトコルがIPプロトコルであることがわかる。正直ほかのプロトコルだとどの値がどのプロトコルかすらわからないのでたすった。当初の「考え方」の通りすすめて大丈夫そう。

データ上ではイーサネットヘッダに続いてのIPヘッダが出てくる。IPアドレスとか入っているこれもおなじみのところ。さくっとIPヘッダのうちのプロトコル番号の部分を見てみよう。プロトコル番号フィールドはIPヘッダの10byte目なので、イーサネットヘッダの終わりから数えて……ひぃふぅ……2行目の8byteめをみる。

0010   00 4c 00 00 40 00 36 11 11 2c d2 ad a0 1b c0 a8  .L..@.6..,......

ここの値がTCPだと06(10進数で06)、UDPだと11(10進数で17)になる。上のデータだと11になってるのでUDPだってことがわかった。

次はIPヘッダの後ろに続くUDPプロトコルのヘッダをみる。UDPヘッダにはポート番号が書かれているので、これで解答であるアプリケーションプロトコルがわかるわけだけど、ここでちょっと事前調査が必要になる。
UDPヘッダの前にあるIPヘッダの長さは時と場合によって変わるので、どこからがUDPのヘッダなのかを調べなければいけない。
IPヘッダの長さはIPヘッダの最初に書いてあるので確認。1byte目の数字の最初4bitがプロコルバージョンで、次の4bitがヘッダ長となる。

0000   00 1a a0 89 a3 7f 44 94 fc 7e 1a ba 08 00 45 00  ......D..~....E.

みてみると "45" となっているのでプロトコル番号は4(IPv4ってこと)、ヘッダ長は5。ヘッダ長5byte……ではなく、ここにある数字に4byte(ヘッダ長は32bit (=4byte) 区切りで伸び縮みさせるというルールがある)をかけたものが実際のヘッダ長になる。5に4byteをかけて20byteということ。

これでUDPヘッダの開始場所がわかった。イーサネットヘッダ14byteとIPヘッダ20byteを足して34。ということは35byte目からUDPヘッダになる。3行目の3byte目からだね。

0020   00 04 00 7b 00 7b 00 38 6d 96 1c 02 11 e8 00 00  ...{.{.8m.......

最初の2byteが送信先ポート番号、次の2byteが送信元ポート番号。両方とも同じ007bで、これを10進数に直すと123。
123/udpといえば泣く子も黙るNTP。すんなりとけた!

別解

問1で書いたように、問題文のパケットデータ部分をtext2pcapに読み込ませるとものの数秒で回答が得られます。wiresharkってすごいなー(遠い目)。
でもわざわざテキスト形式にして参考書持ち込み可にした運営の意図を考えると、こうやってテキスト上で解いてもらいたかったんじゃないかなーとか思ってみたり。