問題文は以下の通り。ファイルなどはありません。
are you ready for upcoming version 2?
srv h2o.pwn.seccon.jp.
———————————————————-
もうすぐ version 2 が来るけど準備はいいかい?
srv h2o.pwn.seccon.jp.
何を求められているのかよくわかりませんが、いくつかある手がかりを取っ掛かりに探っていきます。
“srv h2o.pwn.seccon.jp.”がDNSの一行であることは、設定したことがある人であればすぐわかるでしょう。
どう見ても普通の文章ではありませんし、最後にピリオドがある点はDNSの設定ファイルの書式の大きな特徴だからです。
早速、h2o.pwn.seccon.jpをdigしてみますが、特に気になる所はありません。
問題文はSRVレコードの行なのでSRVレコードも見てみますが、記述はないようです。これはおかしい。
$ dig h2o.pwn.seccon.jp srv ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> h2o.pwn.seccon.jp srv ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51113 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;h2o.pwn.seccon.jp. IN SRV ;; AUTHORITY SECTION: seccon.jp. 1800 IN SOA ns1.value-domain.com. hostmaster.seccon.jp. 1417958140 16384 2048 1048576 2560 ;; Query time: 131 msec ;; SERVER: 10.0.0.1#53(10.0.0.1) ;; WHEN: Sun Dec 7 22:25:38 2014 ;; MSG SIZE rcvd: 102
念のため情報がありそうな他のレコードタイプ(TXTとかHINFOとかWKS)を試しても、何も情報が取れません。
当該ホストをnmap”軽く”ポートスキャンしたところSSHが動いていることはわかったので、RFC 2782の拡張を試しましたがやはり何もなし。
$ dig _ssh._tcp.h2o.pwn.seccon.jp srv ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> _ssh._tcp.h2o.pwn.seccon.jp srv ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 57449 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;_ssh._tcp.h2o.pwn.seccon.jp. IN SRV ;; AUTHORITY SECTION: seccon.jp. 1772 IN SOA ns1.value-domain.com. hostmaster.seccon.jp. 1417957419 16384 2048 1048576 2560 ;; Query time: 252 msec ;; SERVER: 10.0.0.1#53(10.0.0.1) ;; WHEN: Sun Dec 7 22:25:07 2014 ;; MSG SIZE rcvd: 112
この辺で正攻法で行くのはあきらめて、VMware Workstation上のKali linuxを起動して使えそうなツールを色々試してみます。
その中で、dnsreconというツールがRFC 2782拡張で書かれたレコードを2つ発見してくれました。
<pre class="lang:sh decode:true ">root@kali-x86:~# dnsrecon -d h2o.pwn.seccon.jp [*] Performing General Enumeration of Domain: h2o.pwn.seccon.jp [-] DNSSEC is not configured for h2o.pwn.seccon.jp [-] Could not Resolve SOA Record for h2o.pwn.seccon.jp [-] Could not Resolve NS Records for h2o.pwn.seccon.jp [-] Could not Resolve MX Records for h2o.pwn.seccon.jp [*] A h2o.pwn.seccon.jp 133.242.231.94 [*] Enumerating SRV Records [*] SRV _http._tcp.h2o.pwn.seccon.jp h2o.pwn.seccon.jp 133.242.231.94 65080 1 [*] SRV _https._tcp.h2o.pwn.seccon.jp h2o.pwn.seccon.jp 133.242.231.94 65432 0 [*] 2 Records Found</pre>
65080番ポートでHTTPが、65432番ポートでHTTPSが動いているようです。これはさすがにnmapでは見つからない。
実際に前者にブラウザでアクセスしてみたところ、以下のつれないお返事が帰って来るだけ。HTTPSも同じでした。
Plz access with version 2
それならばということで、burp suiteを起動してHTTP Requestの”HTTP/1.1″を”HTTP/2.0″にしたりしますが、今度は応答がなくなります。
ここで一度チームの掲示板に状況を書き込んだら、HTTP 2.0対応のクライアントでアクセスしたらフラグが取れたという情報が!
私もVersion 2 = HTTP 2.0とあたりをつけて対応クライアントを探していた所でしたが、持つべきものはチームメイトですね。
x-flag-isという、いかにもなヘッダにフラグが書かれていました。
後でよくよく調べてみたら、今回の問題のホスト名となっていた”h2o”は、HTTP 2.0対応のWebサーバの実装の名前でした。
burpで試した時に、”server : h2o/0.1″という文字列が返されていたことは気が付いていたのですが、スルーしていました。
ここで気が付いていればh2oがUpgradeのみ対応(HTTP 1.1で開始 → 途中でHTTP 2.0に移行)であることに気が付けたはずです。
それに気がつければ、いきなりHTTP 2.0で接続を試みる方法を試すのに時間を使う必要もなかったということになります。
自分でフラグは取れませんでしたが、その直前までは自力でたどり着いたので一応満足です。
これまでこの手のネットワーク系の問題でフラグを取ったことはなかったのですが、今後も精進したいと思います。