Tahoo!!

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

SECCON CTF 2014 Online Qualifications Writeup [NW 100, 200, 300] & Impressions

12/6 9:00(JST)~ 12/7 17:00(JST)の32時間、SECCON CTF 2014 Online Qualificationsに参加しました。今回もチーム********で参加。
f:id:takahoyo:20141207175200p:plain

結果

結果は以下のリンクの通り。

SECCON CTF 2014 Online

ポイントを入れた804チーム中43位。日本チーム内だけだと14位。
今回の予選は、国際予選ということで、CTF TIMEという著名なCTF情報サイトに情報が掲載。そのため、海外からの登録チームもあった。
さらに、競技開始前日に、SECCON本戦で優勝したチームには来年のDEFCONシード権が与えられるということが発表されたため、さらに海外から強豪チームが殺到した模様。


それにしても、PPPとbinjaがいい戦いしてたなー

Writeup

今回出題された問題は以下の通り。
f:id:takahoyo:20141207181420p:plain

今回もNetwork問題しかほとんど解けてないので、WriteupはNetworkのみ

Get the key (Network 100)

pcapファイルなので、Wiresharkで開く。
f:id:takahoyo:20141207184334p:plain
開くと、HTTPでグローバルIPにアクセスしていて、"HTTP1.1 401 Authorization Required"と書いてあったので、たぶんBasic認証だなと。
それで、2回目のHTTPリクエストを見たら、やっぱりAuthoraizaionヘッダがあったので、書かれてるIPアドレスとポート番号にアクセスし、ヘッダに書かれてる認証情報するとFLAGが書いてあった。

FLAG: SECCON{Basic_NW_Challenge_Done!} 

この問題は開始直後にopenして、某オンラインCTFで出題されてたり、CTF4bの簡易CTFでも実は似たような問題を出題しているのでほぼ早押しクイズ状態。僕もチーム内の早押しに負けた笑(いかにして始まった直後のサーバ混雑を回避してFLAGをSubmitするかw)

Get from curious "FTP" server (Network 300)

とりあえず、FTPクライアントFTPサーバに接続すると、"502 LIST not implemented."の文字が出たので、LISTコマンドが実装されてない。よって、通常利用されるコマンドではディレクトリ内のファイルがわからない。
そこで、telnetで接続してコマンドを直接打った。
HELPコマンドを打つと、"214-You should see the RFC959"と表示されたので、RFCやコマンドのリファレンスを見てた。すると、STATコマンドが使えそうだったので試しに打ってみるとファイルの一覧が取得できた。

$ telnet ftpsv.quals.seccon.jp 21
Trying 133.242.224.21...
Connected to ftpsv.quals.seccon.jp.
Escape character is '^]'.
220 (vsFTPd 2.3.5(SECCON Custom))
USER anonymous
331 Please specify the password.
PASS
230 Login successful.
STAT /
213-Status follows:
drwxr-xr-x    2 0        107          4096 Nov 29 04:43 .
drwxr-xr-x    2 0        107          4096 Nov 29 04:43 ..
-rw-r--r--    1 0        0              38 Nov 29 04:43 key_is_in_this_file_afjoirefjort94dv7u.txt
213 End of status
$ wget ftp://ftp@ftpsv.quals.seccon.jp/key_is_in_this_file_afjoirefjort94dv7u.txt
--2014-12-06 15:41:07--  ftp://ftp@ftpsv.quals.seccon.jp/key_is_in_this_file_afjoirefjort94dv7u.txt
           => 'key_is_in_this_file_afjoirefjort94dv7u.txt'
Resolving ftpsv.quals.seccon.jp... 133.242.224.21
Connecting to ftpsv.quals.seccon.jp|133.242.224.21|:21... connected.
Logging in as ftp ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD not needed.
==> SIZE key_is_in_this_file_afjoirefjort94dv7u.txt ... 38
==> PASV ... done.    ==> RETR key_is_in_this_file_afjoirefjort94dv7u.txt ... done.
Length: 38 (unauthoritative)

key_is_in_this_file_afj 100%[=================================>]      38  --.-KB/s   in 0.002s 

2014-12-06 15:41:07 (23.9 KB/s) - 'key_is_in_this_file_afjoirefjort94dv7u.txt' saved [38]
$ cat key_is_in_this_file_afjoirefjort94dv7u.txt
SECCON{S0m3+im3_Pr0t0c0l_t411_4_1i3.}
FLAG: SECCON{S0m3+im3_Pr0t0c0l_t411_4_1i3.}

version 2 (Network 200)

問題文に「もうすぐversion 2が来るけど準備はいいかい?」srv h2o.pwn.seccon.jpと書いてあった。
このsrvは、DNS関連のSRV(SeRVice)レコードのことだった。
SRVレコードは、ドメインで提供されているサービスの詳細な情報を記述するものとのこと。

実用 BIND 9で作るDNSサーバ(14):DNSの拡張仕様、SRVレコードとENUM (1/2) - @IT

いろいろなサービスをdigコマンドで探してて、結局見つけたのはhttpのサービスだった。

$ dig _http._tcp.h2o.pwn.seccon.jp srv

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;_http._tcp.h2o.pwn.seccon.jp.  IN      SRV

;; ANSWER SECTION:
_http._tcp.h2o.pwn.seccon.jp. 120 IN    SRV     1 1 65080 h2o.pwn.seccon.jp.

;; AUTHORITY SECTION:
seccon.jp.              120     IN      NS      ns1.value-domain.com.
seccon.jp.              120     IN      NS      ns2.value-domain.com.


ブラウザでhttp://h2o.pwn.seccon.jp:65080にアクセスすると、これでFLAGが出るのかーと思いきや以下の様なページに。
f:id:takahoyo:20141207202155p:plain
タイトルのversion 2ってHTTP/2のことかーとここで思い、HTTP/2でアクセスを試みた。

HTTP/2は、現在正式版のChromeFireFoxでは利用できないらしく、開発版であるChrome CanaryやFireFox Nightlyでないと使えないらしい。
(参考)HTTP2を試してみる | GREE Engineers' Blog

そこで、まず、Chrome Canaryを今回ダウンロードした。そして、上記サイトを参考にしてHTTP2を有効にした。
f:id:takahoyo:20141207204626p:plain
また、HTTP/2はhttpsでアクセスすることが必須であるので、httpsサービスのドメインからポート番号を探す。

$ dig _https._tcp.h2o.pwn.seccon.jp srv

;; QUESTION SECTION:
;_https._tcp.h2o.pwn.seccon.jp. IN      SRV

;; ANSWER SECTION:
_https._tcp.h2o.pwn.seccon.jp. 120 IN   SRV     2 0 65432 h2o.pwn.seccon.jp.

;; AUTHORITY SECTION:
seccon.jp.              120     IN      NS      ns1.value-domain.com.
seccon.jp.              120     IN      NS      ns2.value-domain.com.

よって、HTTP/2を有効にしたChrome Canaryで、https://h2o.pwn.seccon.jp:65432にアクセスした。
すると、少し変化が。
"Plz see your HPACK*1"と言われたので、HTTP2のヘッダを開発者ツールを開いて見てみると、x-flag-isヘッダにFLAGがあった。
f:id:takahoyo:20141207210343p:plain

FLAG: SECCON{spdy4isSoC001}

感想

Networkの問題に関しては、3問ともpcapファイルだけで完結する問題ではなく、サーバを使った問題だったので良かった。CTFだとNetwork問題の定番はpcapファイルだけど、個人的にはpcapファイルよりもああいう風にサーバを調べる問題の方が楽しいのでw
あと、FTPの問題は、普段FTPクライアントを使っていると、FTPコマンドとか直接利用する機会があまりないので、問題を解く過程でFTPプロトコルの仕様をいろいろ調べられて、ある意味いい勉強になったのではないかと思う問題だった。
100は基本的な問題、200は指示通りやればわかりそうな問題、300は少し閃かないとできない問題ということでNetwork問題に関してはとてもバランスよく構成されていたと思う。

結果については、もっと頑張って上行って本戦に行きたかった。さすがに、この順位だと出場はできないと思うので…
それでも、まあ楽しめたのでいいかな。来年はまた本戦行けるように頑張って行きたいと思います!来年今のチームがどうなるかわからないですが…
(本戦の"King of the Hill"な大会面白かったのでまた本戦には行きたい)
そのためには、もっと色々な分野に挑戦しないとダメですね。

最後に、SECCON実行委員会の運営の皆様、面白い大会ありがとうございました。参加者も含む関係者の皆様、お疲れ様でした!!

*1:HPACKはHTTP/2のヘッダ圧縮