Tahoo!!

自分の勉強していること(コンピュータ関連 / ネットワーク / セキュリティ / サーバ)や趣味について書いていきます

SECCON CTF 2013 オンライン予選に参加した&Writeup

1/25 12:00 ~ 1/26 12:00(JST)の間の24時間、SECCON CTF オンライン予選に参加しました。名古屋大会に引き続きチーム********(読めない)として参加。

 

f:id:takahoyo:20140126144724p:plain

 結果

結果は、以下のリンクを見てもらえればわかると思います。

http://score.quals.seccon.jp/ranking/

2004点で324チーム中35位でした。

 

 最初は、300チームくらい居て多いかなーと思ってたのですが、意外と登録だけして終わってしまったチームが多かったみたいですね。

 自分のチームは、すでに先のSECCON CTF 名古屋大会で全国大会に行くことが決定していたのでまったり問題解いていた感じです。

 また、今回バイナリ解ける方が多忙のため参加できなかったようで、チームとしてバイナリ問題がほとんど解けなかったのが辛かったです。(バイナリ解けるようにならないと^^;)

Writeup

今回出題された問題&解いた問題は以下の様な感じです。

f:id:takahoyo:20140126151141p:plain

 

 地方大会に比べると、問題数が25問(5ジャンル×100~500点5問)と多く、かつジャンルに偏りがなかったので、CTFerにとっては楽しい大会だったんじゃないでしょうか。

 この前の名古屋大会は、ネットワーク問題がなく1問も解けないと悶絶していた私ですが、今回は3問ほどcapもしくはpcapファイル形式で問題が提供されていたので全部解かなければならないと思ってました。チームメイトにも「ネットワーク全完で」とか言ってしまいましたしw

 しかし、競技中には3問中2問しか解けなく人権がなかったですwでも、結局競技終了後には3問ともすべて解くことができたので、ネットワーク・Webの3問(100, 200, 300)のWriteup書きたいと思います。

 

repeat after me(ネットワーク・Web 100)

  一番簡単な問題のはずなのに、競技時間中には解けなかった。終わってからは解けたけど(汗)

 

 まず、問題のcapファイルを開くと、ぱっと見るとTELNETの通信とTCPのPUSHフラグがたった通信を行っていることがわかる。とりあえず、2つの通信を「Follow TCP Stream」してみる。上がTELNETで、下がTCPのPUSHフラグ

f:id:takahoyo:20140126155305p:plain

f:id:takahoyo:20140126155536p:plain

 

 前者はTELNETなので、平文で情報が丸見えで、後者はSSHで通信しているため暗号化されていてわからない。

(恐らく、TELNETで10.0.5.103というサーバにアクセスして、そこからまたSSHで133.242.16.239というサーバにアクセスしていて、10.0.5.103でキャプチャしてるためにこういうcapファイルになったのだろう)

 TELNETの通信を見ていると、ls -lでflag.txtが存在していることが確認できる。よって、133.242.16.239というサーバに、repeat after meという問題のタイトル通り、TELNETで見えているコマンド通りに操作すればログインできてflag.txt見れそうと考える。

 

 それでこの通信の通りにコマンド打ってSSHでサーバに入ろうとする。ちなみにTELNET通信では打ち間違えたためかBack Spaceなどの制御文字も入っているためそのまま打ってもうまくいかないので注意が必要。最終的に以下のようなコマンドで接続できる。ポートはTCPのPUSHフラグ立っている通信で31337で接続しているのでこれを使用。

ssh -p 31337  followme@133.0xf2.010357 

 とここまでは良かったのですが、私は次で躓いた。

passwordが通らない。

 制御文字入れたものをパスワードとしてコピペするか制御文字の意味を理解して制御文字を排除したものをパスワードとして入力するかどちらかすれば良かったみたい。(パスワードに制御文字いれてよいか迷ってしまったのでやれば良かった)

よって制御文字いれたものだと、上の画像の画面から正しいパスワードの文字列コピーして、Stirlingとかでで制御文字いれてあげて、それをSSHのパスワードとしてコピペすれば良さそう。ちなみに、パスワードは制御文字を入れたものだと、"ls -l[0x15]followme$ whoami[0x17]ls-l[0x7f][0x7f]. -l.[0x02][0x7f][0x0d][0x00]"で、抜いたものだと"folllowme$ ls. -l."らしい。

あとは、サーバに入ったら、catコマンドでflag.txtを表示。

 Flag : Interesting_IPv4_address

 

Find the key!(ネットワーク・Web 200)

 ダウンロードしたpcapファイルをぱっと見ると、大量のICMP通信が。SECCON 2013の横浜や香川で出たタイプかなーと思いつつ見てると、ICMPのデータ上にHTTPのリクエストやらレスポンスやらが乗っている。これは恐らく某キャンプでもやったICMP tunnelってやつです。

 そして、HTTPリクエストにPNGの文字が見えるので、PNG復元できればFlag書いてありそうと思ったので、復元を試みる。

f:id:takahoyo:20140126165210p:plain

 とりあえず、これ使っているパケットと普通のICMPパケットではICMPのシーケンス番号が明らかに違っていた(通常のICMPのシーケンス番号は690以上だった)ので、"icmp.seq < 690"というディスプレイフィルタをかけて、邪魔な普通のICMP通信を排除。すると、ICMP tunnelのみを使っているパケットだけがフィルタリングされる。

 次にICMPのidに着目すると、同一のidで一回のHTTP通信(リクエスト出して、レスポンス返す)を行っていることがわかる。f:id:takahoyo:20140126211338p:plain

 この中で一番長くシーケンス番号が続いてるパケット達(シーケンス番号が0~7まで)に着目してデータ部分だけ取り出す。ここで恐らくシーケンス番号が短いパケット達からデータを取り出すと、上半分の画像だったり不完全な画像になる。

 データを取り出す時にdpktとか使ってスクリプト書いて取り出すのがクレバーだったのかもしれないけど、自分の場合は書くより手作業の早いと思ったので、Wiresharkのパケット詳細ペインのDataのところで右クリックして、「Export Selected Packet Bytes...」を使ってファイルに出力。

 あとはStirlingでバラバラだった部分をヘッダーのようなもの(今回だったら、D5 20 08 80 ... 00 00 02 38)とか消したりしてくっつけて、PNGシグネチャからイメージ終端までの部分を取り出すと、以下のような画像ができる。

f:id:takahoyo:20140126171004p:plain

Flag : deadbeeffeedbad

 

 Hidden Message? (ネットワーク・Web 300)

ダウンロードしてファイルを開くと、以下の様な画像が。

f:id:takahoyo:20140126171841j:plain

個人的にはよく見る気がする画像w

で、ネットワーク・Webなのになぜ画像と思いつつ、Stirlingで開くと下のほうに怪しい部分が…

f:id:takahoyo:20140126173247p:plain

JPEGイメージの終了を示すバイナリは"FF D9"であるので、JPEG的には後ろに何かあるのはおかしい。さらに、"D4 C3 B2 A1 02"はpcapファイルを表すヘッダー、そして"134.133.95.10.in-addr.arpa"というのが見えることからDNSのパケットが含まれるpcapファイルであることが予想できた。ここから上図の赤枠の部分だけ残して保存。それをWiresharkで読み込ませると案の定パケットが出てきた。

f:id:takahoyo:20140126175028p:plain

133.242.55.252に対して、DNSクエリ飛ばしてるのがわかる。よって、このパケットと同様に、nslookupを使用してこのIPを持つDNSサーバに名前解決をしにいけば良いのでは?と考えた。ちなみに、PTRレコードは、IPアドレスからドメイン名を解決するときに使われるレコードであり、上のようなパケットは10.95.133.134の名前解決を行おうとすると発生する。したがって、以下のようなコマンドを実行し名前解決を試みた。

# nslookup
> server 133.242.55.252
Default server: 133.242.55.252
Address: 133.242.55.252#53
> 10.95.133.134
Server:     133.242.55.252
Address:    133.242.55.252#53

134.133.95.10.in-addr.arpa     name= You.G0t.a.H1dd3n.m3ss4g3.1n.Th15.DNS.

Flag :  You.G0t.a.H1dd3n.m3ss4g3.1n.Th15.DNS.

 感想

 SECCONオンライン予選今回が初の試みということで、どんな問題が出るのかなーと思ったけど、意外とサーバに接続して何かするっていう問題が多かったし、分野もいろいろなものがあったので、非常に面白かった。また是非来年度もオンライン予選開催して欲しいと思いました。

個人的なことだと、先日の名古屋大会の時のブログでも言ったけど、CTFerとして生きていくには、やはりもっと別の分野の問題を解けるようにならなければならないですね。特にバイナリやフォレンジックの分野はCTFで解ける解けないに係わらず純粋に興味があるので、もっと勉強して解けるようになりたい。時間の制約もあるのでどこまで出来るかわかりませんが!!

とりあえず、次は全国大会です。今回の予選で「この世の中にはまだまだ怖い人がたくさんいるな」と思ったのと同時に、「全国でこのような人たちと戦うのか」と思うと、良い意味でも悪い意味でも震えが止まりませんw胸を借りるつもりで頑張りたいと思います。

 

最後に、今回のオンライン予選に関わった皆様、長時間お疲れ様でした。そして、問題をたくさん作成したり、24時間CTFの環境を監視していた運営側の皆様本当にありがとうございました。