マナティ

セキュリティコンテスト旗取り日記

SECCON 2016オンライン予選直前号-昨年出題問題の解説

12/10(土)15:00~11(日)15:00にSECCON 2016 オンライン予選が開催されます。インターネットから社会人の方でも誰でも参加可能。オンライン予選直前号として、昨年のSECCON 2015オンライン予選より出題された問題「Bonsai XSS Revolutions」を解説します!

55903_ext_02_0.jpg

SECCON 2016 オンライン予選開催!

皆さんこんにちは。CTF for ビギナーズ運営の美濃です。

突然ですが、皆さんはCTFに参加されたことはありますか。難しそうだったり、いつやっているのか分からなかったり、そのように思っている方もいらっしゃるかもしれません。そんな方に朗報です!日本時間の2016年12月10日(土)15時から11日(日)15時までSECCON 2016 オンライン予選が開催されます。オンラインであり、SECCON 2016で唯一の社会人の方でも参加できる予選ですので、開催時間中でインターネットがつながる場所であれば、いつでもどこでも誰でもご参加いただけます。出題される問題のレベル感としても、CTF for ビギナーズの演習で使われる程度の簡単なものから、知識や発想が試される難しいものまで、様々な方にお楽しみ頂けるようになっているかと思います。

SECCON 2016 オンライン予選

今回は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ファイルとなっています。

bonsaixssrev01.png

「hakoniwaWebMail_20151124.zip」の中身
※掲載画像はクリックで拡大できます(以降の図も同様)

とりあえずこのZIPファイルに不審な点はなさそうですから、展開してみましょう。すると次の画像のように「hakoniwaWebMail.exe」が盆栽アイコンに変わり、なんとなく実行できそうな雰囲気が漂っております。今回の問題はWeb/Networkカテゴリですから、このexeも素直に実行できると考えて良いでしょう。

bonsaixssrev02.png

「hakoniwaWebMail_20151124.zip」の展開後

「hakoniwaWebMail.exe」を実行すると、Windowsのような何かの画面が表示され、画面が自動的に変わっていきます。そして最終的に次のような画面となりました。Webメールの閲覧画面のようですね。なお、画面をクリックしても「You can NOT operate anything.」と表示され、操作することはできないようです。

bonsaixssrev03.png

「hakoniwaWebMail.exe」の実行後

実際にオンライン予選でこの問題を解いた際には、ここでしばらく悩んだのですが、間違って二重実行してしまった際に次のようなメッセージが表示され、おそらく何らかのポートで待ち受けているのではないかと推測できます。

bonsaixssrev04.png

「通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。」というダイアログ表示

そこで、実際に何らかのポートで待ち受けているのか、以下のように調べてみました。すると25/tcpで待ち受けていることが分かります。

bonsaixssrev05.png

待ち受けポートの調査

25番ポートに接続するとメールサーバが動いているようなので、試しにメールを送ってみました。今回はSMTPについての解説は割愛しますが、次のような形でやりとりを行います。

bonsaixssrev06.png

メールを送信

なお、宛先のメールアドレスについては、「hakoniwaWebMail.exe」を起動してからしばらく見てると、次のように表示されるタイミングがありますので、こちらを使います。

bonsaixssrev12.png

宛先メールアドレス

SMTPでのやりとりのあと「hakoniwaWebMail.exe」の画面を見てみると、送ったメールが表示されていますので、ここから攻めていくことで良さそうです。

bonsaixssrev07.png

メールを受信

問題は、今回求められているユーザエージェントを、どのように入手するかということです。URLを含むメールを受信した際に、そのURLへ自動的にアクセスが行われ、ユーザエージェントを知ることができるのではとも考えましたが、試した結果、どうやらそれは外れです(注:別解参照)。よく考えればこの問題はWeb/Networkカテゴリで、まだWebの要素がありません。もしかすると、XSSか何かでユーザエージェントが取れるのではと考え、XSSなメールを送ってみることにしました。

ただ、文字列を挿入できる項目が、件名、送信元、宛先、日付、本文と5つありますので、順番に試していきます。そして、日付のところでXSSができることが分かります。

bonsaixssrev08.png

日付部分にalert(1)を挿入

bonsaixssrev09.png

XSSによりダイアログ表示

どこにXSSができるかが分かったところで、実際にユーザエージェントを表示するスクリプトを送ってみましょう。ユーザエージェントを表示するには「window.navigator.userAgent」を表示させれば良いので、以下のようにメールを送ります。

bonsaixssrev10.png

日付部分にalert(window.navigator.userAgent)を挿入

メール送信後に「hakoniwaWebMail.exe」へ戻ると、次の画像のようにダイアログでユーザエージェントが表示されており、フラグは「SECCON{TsuriboriWebBros/2015.12.17620}」であることが分かります。

bonsaixssrev11.png

XSSによりユーザエージェント表示

ということで、フラグを入手することができました!

別解

以上の解法で「URLを含むメールを受信した際に、そのURLへ自動的にアクセスが行われ、ユーザエージェントを知ることができるのではとも考えましたが、試した結果、どうやらそれは外れです。」と書きましたが、XSSでダイアログを表示させる代わりに、document.locationでページ遷移させることにより、待ち受け側でユーザエージェント(=フラグ)を入手することもできます!

bonsaixssrev13.png

document.locationでページ遷移させた際の待ち受け側

さいごに

いかがでしたでしょうか。CTFの問題は一筋縄ではいかないものも多くありますが、分からないことはインターネットで検索しつつ、時間をかけて試行錯誤を繰り返せばきっと解けると思います。今回解説した問題のように解法が複数存在する場合もありますので、違った視点から考えてみるのも良いでしょう。また、チームを組む場合には、チームメンバとの会話の中から解法を思いつくこともありますね。

それでは、皆さんもSECCON 2016 オンライン予選に参加し、CTFを体験してみてください!

著者プロフィール

CTF for ビギナーズ(著者)
コンピュータセキュリティ技術を競う競技であるCTF (Capture The Flag) の初心者を対象とした勉強会。CTFに必要な知識を学ぶ専門講義と実際に問題に挑戦してCTFを体験してもらう演習を行っている。
美濃圭佑(著者)
2016年ソフトバンク・テクノロジー株式会社入社。学生時代より情報セキュリティやコンピュータネットワークに関して取り組み、セキュリティ・キャンプの講師やCTF for ビギナーズのCTF問題の作成、演習用ネットワークの設計構築といったことを行う。現在は情報セキュリティ監視業務に従事。