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に参加しました。今回もチーム********で参加。
結果
結果は以下のリンクの通り。
SECCON CTF 2014 Online
ポイントを入れた804チーム中43位。日本チーム内だけだと14位。
今回の予選は、国際予選ということで、CTF TIMEという著名なCTF情報サイトに情報が掲載。そのため、海外からの登録チームもあった。
さらに、競技開始前日に、SECCON本戦で優勝したチームには来年のDEFCONシード権が与えられるということが発表されたため、さらに海外から強豪チームが殺到した模様。
SECCON CTF Finals 2014 are a @_defcon_ CTF qualifying event, and the qualifiers begin in 24 hours. http://t.co/Oo5H45fknK
— Legit BS (@LegitBS_CTF) December 5, 2014
それにしても、PPPとbinjaがいい戦いしてたなー
PPPとBinjaが別次元の戦いしてる感
— ほよたか (@takahoyo) December 7, 2014
Writeup
今回出題された問題は以下の通り。
今回もNetwork問題しかほとんど解けてないので、WriteupはNetworkのみ
Get the key (Network 100)
pcapファイルなので、Wiresharkで開く。
開くと、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が出るのかーと思いきや以下の様なページに。
タイトルのversion 2ってHTTP/2のことかーとここで思い、HTTP/2でアクセスを試みた。
HTTP/2は、現在正式版のChromeやFireFoxでは利用できないらしく、開発版であるChrome CanaryやFireFox Nightlyでないと使えないらしい。
(参考)HTTP2を試してみる | GREE Engineers' Blog
そこで、まず、Chrome Canaryを今回ダウンロードした。そして、上記サイトを参考にしてHTTP2を有効にした。
また、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があった。
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のヘッダ圧縮