2016.12.01
SECCON 2016オンライン予選直前号-昨年出題問題の解説
12/10(土)15:00~11(日)15:00にSECCON 2016 オンライン予選が開催されます。インターネットから社会人の方でも誰でも参加可能。オンライン予選直前号として、昨年のSECCON 2015オンライン予選より出題された問題「Bonsai XSS Revolutions」を解説します!
SECCON 2016 オンライン予選開催!
皆さんこんにちは。CTF for ビギナーズ運営の美濃です。
突然ですが、皆さんはCTFに参加されたことはありますか。難しそうだったり、いつやっているのか分からなかったり、そのように思っている方もいらっしゃるかもしれません。そんな方に朗報です!日本時間の2016年12月10日(土)15時から11日(日)15時までSECCON 2016 オンライン予選が開催されます。オンラインであり、SECCON 2016で唯一の社会人の方でも参加できる予選ですので、開催時間中でインターネットがつながる場所であれば、いつでもどこでも誰でもご参加いただけます。出題される問題のレベル感としても、CTF for ビギナーズの演習で使われる程度の簡単なものから、知識や発想が試される難しいものまで、様々な方にお楽しみ頂けるようになっているかと思います。
今回はSECCON 2016オンライン予選直前号として、昨年のSECCON 2015オンライン予選より出題された問題を1つ解説致します!
「Bonsai XSS Revolutions」解説
今回解説するのはWeb/Networkカテゴリの200点問題として出題された「Bonsai XSS Revolutions」です。次のような問題文と「hakoniwaWebMail_20151124.zip(クリックor右クリックでダウンロード可)」というファイルがありました。
What is your browser(User-Agent)? Requirement:.NET Framework 4.5 --- ブラウザの名称(User-Agent)を答えよ。 必要環境.NET Framework 4.5
「hakoniwaWebMail_20151124.zip」の中身は次のようになっており、「hakoniwaWebMail.exe」というファイルが1つあるだけで、パスワードもかかっていないZIPファイルとなっています。
とりあえずこのZIPファイルに不審な点はなさそうですから、展開してみましょう。すると次の画像のように「hakoniwaWebMail.exe」が盆栽アイコンに変わり、なんとなく実行できそうな雰囲気が漂っております。今回の問題はWeb/Networkカテゴリですから、このexeも素直に実行できると考えて良いでしょう。
「hakoniwaWebMail.exe」を実行すると、Windowsのような何かの画面が表示され、画面が自動的に変わっていきます。そして最終的に次のような画面となりました。Webメールの閲覧画面のようですね。なお、画面をクリックしても「You can NOT operate anything.」と表示され、操作することはできないようです。
実際にオンライン予選でこの問題を解いた際には、ここでしばらく悩んだのですが、間違って二重実行してしまった際に次のようなメッセージが表示され、おそらく何らかのポートで待ち受けているのではないかと推測できます。
そこで、実際に何らかのポートで待ち受けているのか、以下のように調べてみました。すると25/tcpで待ち受けていることが分かります。
25番ポートに接続するとメールサーバが動いているようなので、試しにメールを送ってみました。今回はSMTPについての解説は割愛しますが、次のような形でやりとりを行います。
なお、宛先のメールアドレスについては、「hakoniwaWebMail.exe」を起動してからしばらく見てると、次のように表示されるタイミングがありますので、こちらを使います。
SMTPでのやりとりのあと「hakoniwaWebMail.exe」の画面を見てみると、送ったメールが表示されていますので、ここから攻めていくことで良さそうです。
問題は、今回求められているユーザエージェントを、どのように入手するかということです。URLを含むメールを受信した際に、そのURLへ自動的にアクセスが行われ、ユーザエージェントを知ることができるのではとも考えましたが、試した結果、どうやらそれは外れです(注:別解参照)。よく考えればこの問題はWeb/Networkカテゴリで、まだWebの要素がありません。もしかすると、XSSか何かでユーザエージェントが取れるのではと考え、XSSなメールを送ってみることにしました。
ただ、文字列を挿入できる項目が、件名、送信元、宛先、日付、本文と5つありますので、順番に試していきます。そして、日付のところでXSSができることが分かります。
どこにXSSができるかが分かったところで、実際にユーザエージェントを表示するスクリプトを送ってみましょう。ユーザエージェントを表示するには「window.navigator.userAgent」を表示させれば良いので、以下のようにメールを送ります。
メール送信後に「hakoniwaWebMail.exe」へ戻ると、次の画像のようにダイアログでユーザエージェントが表示されており、フラグは「SECCON{TsuriboriWebBros/2015.12.17620}」であることが分かります。
ということで、フラグを入手することができました!
別解
以上の解法で「URLを含むメールを受信した際に、そのURLへ自動的にアクセスが行われ、ユーザエージェントを知ることができるのではとも考えましたが、試した結果、どうやらそれは外れです。」と書きましたが、XSSでダイアログを表示させる代わりに、document.locationでページ遷移させることにより、待ち受け側でユーザエージェント(=フラグ)を入手することもできます!
さいごに
いかがでしたでしょうか。CTFの問題は一筋縄ではいかないものも多くありますが、分からないことはインターネットで検索しつつ、時間をかけて試行錯誤を繰り返せばきっと解けると思います。今回解説した問題のように解法が複数存在する場合もありますので、違った視点から考えてみるのも良いでしょう。また、チームを組む場合には、チームメンバとの会話の中から解法を思いつくこともありますね。
それでは、皆さんもSECCON 2016 オンライン予選に参加し、CTFを体験してみてください!