俺的 Capture The Flag Writeup

Capture The Flag に挑戦したときの記録を自分用にドキュメント化して置いておくだけのブログ。

[CpawCTF] 第七夜: パケット解析 (しません)

Q11.[Network]pcap

以下、問題文

Q11.[Network]pcap 10pt

ネットワークを流れているデータはパケットというデータの塊です。

それを保存したのがpcapファイルです。

pcapファイルを開いて、ネットワークにふれてみましょう!

pcapファイル

答案

今回は問題に pcap ファイルというのが添付されています。

説明によると、この pcap ファイルはパケット (の一部) を保存したファイルのようです。

この中に Flag が隠れているそうなので、早速見つけていきましょう。

解析スタート

いつも通り、ダウンロードした場所で、ファイルをダブルクリックすると 「このファイルを開けるアプリケーションが見つかりません」という警告をくらいます。

pcap ファイルは、ネットワークを流れる「パケット」というデータのカケラ (分割) の一部を保存したファイルであり、 この中身を覗き見るには、それを解釈することのできるツールが必要なようです。

ちなみに、pcap ファイルを作成するには、 tcpdump というコマンドを使ったり、 scapy という python ライブラリなどを使うとできるみたいです。

このブログの主題は CTF であり、本題から逸れるのでここでは詳しくは語りませんが、 pcap ファイルを作ったり、それを解析したりすることで、ネットワークのパケット通信に関して理解が深まると共に、 これを定期的に目的を持って行えば、普段サーバがどのような相手と通信をしていたり、不正な通信を受けていないか などを知ることができるのではないでしょうか? そんなことないのかな...?

いつかそんなことも行えるようになったらな、と思います。

その日までとにかく知識を少しでもつけなければ...

少々前置きが長くなりましたが、 pcap ファイルを解析するのに、よく wireshark という (フリー) ツールが使われるようです。

以下、窓の杜より引用。

多くのプロトコルに対応した高機能なパケット取得・プロトコル解析ソフト。 ネットワークに流れるパケット情報をリアルタイムで調査できる。 有線・無線LANや“InfiniBand”などさまざまなインターフェイスに対応している。

本ソフトの画面は縦に3分割されており、画面上段のリストには[Capture]-[Interface]メニューで選択したネットワークインターフェイスを流れるパケットがリアルタイムでリスト表示される。また、プロトコルやポート、IPアドレスなどの条件を組み合わせてフィルタリングしたり、指定したルールに従って色分け表示することも可能。

画面上段のリストからパケットを選択すると、画面中段には選択されたパケットの詳細情報が表示され、画面下段にはパケットデータが16進数でダンプ表示される。ほかにも、ネットワークを流れるパケット情報の統計を表示する機能などが搭載されており、ネットワーク不調の原因調査などに役立つ。

さらに、wireshark には CUI で使える tshark というコマンドがあるらしいです。

僕はなるべく CUI で済ませたいマンなので、tshark を選んでいきます。

のちにこの性格がトラブルを引き起こすことを今はまだ知らない...

tshark のインストール

  • in ubuntu
$ tshark

Command 'tshark' not found, but can be installed with:

sudo apt install tshark

$ sudo apt install tshark
  • in mac
$ brew install wireshark

ちなみに、$ brew install tshark とすると、Error: No available formula with the name "tshark" と言われてしまいます。

導入は こちら を参考にさせていただきました。

tshark の基本的な使い方は こちらを

use tshark

さて、インストールも済んだことなので、早速 pcap ファイルの調査といきます。

tshark-r option にファイルを指定すると、中身を覗き込むことができるようです。

$ tshark -r network10.pcap
    1   0.000000 169.254.144.80 → 169.254.144.81 IPv4 60 IPv6 hop-by-hop options[Malformed Packet]
    2   0.000080 169.254.144.81 → 169.254.144.80 ICMP 82 Destination unreachable (Protocol unreachable)

うーーん?? これは grep などをしなくても、ここに Flag がないことがわかります。

何か別の表示が必要なのかと思い、man tshark を読んで、detail とかで検索したり、tshark -h をして、再び検索したりしましたが、 とにかく分量が多くて (あと、英語ですし) 何をすればいいのか、皆目見当つかないという状況になってしまいました。

前回参考にさせていただいた writeup に再び手を伸ばすと、 wireshark では見れるが、tshark では「答えが得られなかった」という文が書かれています...

そこで mac 内で wireshark を探し起動しようとしますが、見つからない。

改めてダウンロードするのも癪なので (tshark は動いてますし) このままいけるとこまでゴリ押してやろう、という気持ちになりました。

ウチ、tsharkFlag 見つけたる!

まずは tsharkFlag を見つけた先人がいないか、検索しますが、 writeup を見れど見れど、 wireshark しか出てこない。

例: CpawCTF Q11.[Network]pcap

とにかく手に入った情報です。wireshark をお使いの方々がどう見えるのかだけ探ります。

ふむ。どうやら、2 Frame 目に Flag に関する情報があるようです。

ここで、前回 writeup の方が、-V option をつけているので、 この option をつけてみるも、長い出力が出てきていちいち探す気になれません。

$ tshark -r network10.pcap  -V | grep -i 'flag'
    Flags: 0x0000
    Flags: 0x0000
        Flags: 0x0000

$ tshark -r network10.pcap  -V | grep -i 'cpaw'
(該当なし)

上記のように、検索は不発です。

もっと、tshark の option を知らねばいかん、ということで、tshark option で日本語の情報を検索 (本当は英語で読めるようにならねば...)

tshark オプションメモ というページを参考にさせていただきます。

オプションにはだいたい、以下の種別があるようです。(これは英語でもなんとなく...)

この中から線がありそうなものを片っ端から試していきます。 あたりをつける基準は「表示を追加」とか書いてある option です。

すると、出力関連の -x option で無事ヒットしました。

-x : hex, ACSII ダンプ表示を追加。

$ tshark -r network10.pcap  -x
0000  70 58 12 24 49 0d 58 55 ca 24 2e 08 08 00 45 00   pX.$I.XU.$....E.
0010  00 28 00 01 00 00 40 00 06 37 a9 fe 90 50 a9 fe   .(....@..7...P..
0020  90 51 63 70 61 77 7b 67 6f 63 68 69 5f 75 73 61   .Qcpaw{gochi_usa
0030  5f 6b 61 6d 69 7d 00 00 00 00 00 00               _kami}......

0000  58 55 ca 24 2e 08 70 58 12 24 49 0d 08 00 45 c0   XU.$..pX.$I...E.
0010  00 44 73 16 00 00 40 01 92 44 a9 fe 90 51 a9 fe   .Ds...@..D...Q..
0020  90 50 03 02 e7 b4 00 00 00 00 45 00 00 28 00 01   .P........E..(..
0030  00 00 40 00 06 37 a9 fe 90 50 a9 fe 90 51 63 70   ..@..7...P...Qcp
0040  61 77 7b 67 6f 63 68 69 5f 75 73 61 5f 6b 61 6d   aw{gochi_usa_kam
0050  69 7d                                             i}

なんだか、GUI で見覚えのある 16進数っぽい表示と、それから右に文章ですね。

-x option窓の杜 さんの文章で言う所の

画面下段にはパケットデータが16進数でダンプ表示される。

という部分でしょうか。

-V option は 「画面中段には選択されたパケットの詳細情報が表示され」に該当??

最初に見た 169.254.144.80 <-> 169.254.144.81 間の通信は、パケットデータとして、Flag の内容 (+ アルファ) を送りあっていたのでしょうか?

残念ながら今の私の知識では、そこまではわかりません。 己の力不足をひしひしと感じております。

submit

さて、何はともあれ、cpaw{gochi_usa_kami} という Flag が見つかったので、提出します。

f:id:comeonknowhow:20200522022048p:plain
submit

f:id:comeonknowhow:20200522022102p:plain
accepted

此度も一悶着ありましたが、無事 10pt 獲得です。

パケット通信は、一応情報系の研究室に所属する身として、一度きちんと勉強したんですが ( マスタリングTCP/IP とか使って...) 実のところ、試験を乗り越える程度の理解しかできておらず、実用に足りてないし、自分の身にはなっていないので、 これを気にまた勉強し直そうと思います。

CTF をやっていなかったら、pcap ファイルとか、パケット解析とか、 そういったことに対して全く無知のままだろうと思うので、 このタイミングでこういった知識に出会うことができて、早速 CTF に参加したことへのありがたみと言いますか、 良さみみたいなものを感じております。(語彙力)

ということで、今回もこの辺で失礼いたします。 次回は hash! hash! hash! だそうです。

別解

なんとなく、less コマンドで「バイナリファイルだろうけど、それでも見る?」 という警告を無視して閲覧すると、Flag が出てきました。

悲しい。

f:id:comeonknowhow:20200522022300p:plain
less

以上です。