ハッカー級の知恵比べ、CTFの楽しさは見ているだけでは分かりません。あなたもセキュリティ・ダークナイトからの挑戦状、受けてみませんか?(編集部)
前回「プレイ・ザ・ゲーム! CTFが問いかけるハックの意味」では、筆者が体験したDEFCON CTF予選の問題の2つを紹介した。今回は予告どおり、少しテクニカルな問題にチャレンジしていただこうと思う。さらに、筆者が作成したCTF的問題を出題するので、ぜひともチャレンジしていただきたい。
それでは、早速前回の続き「Packet Madness 100」の問題を紹介しよう。
この問題では問題文だけではなく、ダウンロード可能なファイルがあった。まずはファイルをダウンロードしなければ始まらないようである。
早速ファイルをダウンロードしたところ、ファイル名が「a9366acd80efa0aa78c2f76d9702f033」という名前であり、そもそも何のファイルかということそのものが分からない。そのため、Linuxコマンドである「file」コマンドを実行して調べた。ちなみに、ファイル名は問題ファイルのMD5ハッシュ値である。
ここからは、手元にLinux環境が整っている方はぜひ一緒にチャレンジしながら読み進めてほしい。どうしても環境が用意できない方も、頭を働かせながらゆっくりと読み進めていただきたい。
下図は「file」コマンドの実行結果である。
「tcpdump capture file」と表示されている。これはパケットを記録したファイルであることを示している。問題ジャンルが「Packet Madness」であるため当然といえば当然であるが、この無駄と思われる手順も無視できないのがCTFである。何がヒントになるか分からない。
パケットを記録したファイルであることが分かったため、次にこの中身をのぞいてみよう。
「file」コマンドの結果では、「tcpdump capture file」と表示されたが、今回は「tcpdump」では開かない。パケットの記録やちょっとした分析であれば、その手軽さからもtcpdumpは威力を発揮するが、今回はさまざまな機能があり直感的に操作しやすいGUIを備えた「Wireshark」を用いて、問題ファイルを開いた。ファイルを開いた結果は下図の通りである。
これを見ると、自分自身に対してHTTPアクセスを行った通信の記録であろうことが一目で確認できる(問題用に書き換えているのだろうか。MACアドレスがすべてゼロになっているあたりはニクイ)。
それでは、問題の通信内容を見てみよう。皆さんはどのあたりに注目されただろうか。筆者は、通信内容のGETリクエストに注目した。
この通信で着目すべきところは、「GET /sekritpr0n5.zip HTTP/1.0」の部分である。
これは、HTTPのGETメソッドによるリクエストである。通常はこのリクエストのあと、Webサーバはリクエストされたファイルが存在すればレスポンスを返し、ファイルをダウンロードさせる。
GETメソッドによるリクエストのあと、7つめのパケットを見ると、「HTTP/1.1 200 OK」と応答しているので、正常にダウンロードを開始できたパケットであろう。つまり、このパケットにはリクエストした「sekritpr0n5.zip」ファイルそのものが記録されているのではないか、と考えられるのである。
それでは、この通信内容からダウンロードしたと思われるファイルを抽出してみよう。抽出するには問題ファイルをオープンした「Wireshark」の画面で、右クリックから「Follow TCP Stream」を選択する
「Follow TCP Stream」をクリックすると下図の画面が表示される。
これは、選択した通信の連続するパケットを抽出、結合して表示したものである。この画面から、「Save As」ボタンをクリックし、任意の場所に拡張子を「.zip」として保存してほしい。筆者は通信の内容に沿って「sekritpr0n5.zip」とした。
問題なく保存ができたらZipファイルの展開をしてみよう。問題なく展開されるはずである。これでパケットからファイルを復元することに成功した。展開された内容を見てみよう。
Copyright © ITmedia, Inc. All Rights Reserved.