2014年3月9日日曜日

SECCON 2013 CTF 全国大会 write up [Pisa]

3月1~2日に開催されたSECCON 2013 CTF 全国大会に参加してきました。
大阪予選では惨敗でしたが、10人のチームメイトのおかげでオンライン予選を突破し、事務局からは交通費の補助まで頂き、ありがたく参加させて頂きました。
この場を借りて、チームメイトの皆さん、運営事務局の皆さん、スポンサーの皆さんにお礼申し上げます。


結果ですが、私たちのチーム「Ganbare Tigers Jr」は、エントリ順番:14、1日目終了時の順位:14、最終順位:14、と、抜群の?安定感でした。運営twitterによると、瞬間最高順位は12位だった様です。

チームで回答できた問題について、write upを載せていきます。


[Pisa]

問題
http://pisa.tower/sec_bbs/

新規登録やログインのリンクがありました。
まずは新規登録に進み、ID/PassとCaptchaを入れて登録完了。

登録完了の画面(か、その次の画面)のResponseに、
key: KEY{YuNbUllbB}
が含まれていた。

これが1つ目のフラグ。
開始直後の数分?で得点していたチームがあったが、これを見つけていた模様。
http://akiym.hateblo.jp/entry/2014/03/04/172235

さて登録したID/Passでログインすると、画面がリダイレクトされてる様な挙動でした。
Burp Suiteをproxyにして順を追って確認していくと、良くある掲示板の画面が出てきた。
ここで、件名、本文、Captchaを入れると、書き込むことができた。

で、書き込んだ内容が
フラッグワードページ
http://pisa.tower/sec_bbs/api/message.json
に反映されることが分かり、
ここに、チームのフラッグワードを書き込めば、点数が加算されました。

フラッグワードは5分おきに更新されます。
掲示板への書込にはCaptchaがあるので、アナログに手動書込を何度か繰り返します。

5分おきに更新されるフラッグワードを自動取得して、Captchaを解析して、掲示板にも自動で書き込みをしたい…と思ってみたものの、それをすぐにプログラミングする事が出来ず、手が空いたときに手動対応を繰り返していました。

そうこうしているうちにチームメンバがもう一つのKeyを発見しました。
検索していたら出てきた!とのことでしたが、詳細は上記write upによると。
404ページの画像がランダムで切り替わり、404_0.pngから404_5.pngまで存在する
404_4.pngのときのみのalt属性にKEY{hOneyToaStAtPOSTSCRIPT}が出てくる
もちろん、そのときの画像はハニートースト

この問題は全2つのフラグを見つける事が出来ました。
フラッグワードの自動化対応はどうしようか…と思いつつも、他の問題への対応に忙しく1日目は終了。


2日目
開始直後に他の問題のフラグをサブミットして、幸先の良いスタートか、と思ったのもつかの間。他の問題のフラグもなかなか見つからず、気持ちが焦ります。
小さくても加点を!と、Pisaのフラッグワードを書き込もう!と思ったが、掲示板の画面遷移がどうもおかしい。

フラッグワードページを確認すると、こんな事になっていた。
{"code":0,"message":"ok","messages":[{"id":"6497","username":"mage2","img_path":null,"title":"8dc7281c74ae75585742599834a49214","message":"a","created_at":"1393718648"},{"id":"6496","username":"1qaz2wsx3edc","img_path":null,"title":"1fa8bc1384d069682e5afb772faaef28","message":"\u003Cscript\u003EsetTimeout(function(){$(\u0027#logout_form\u0027).submit();},0);\u003C\/script\u003E","created_at":"1393718644"},{"id":"6495","username":"1qaz2wsx3edc","img_path":null,"title":"1fa8bc1384d069682e5afb772faaef28","message":"\u003Cscript\u003EsetTimeout(function(){$(\u0027#logout_form\u0027).submit();},0);\u003C\/script\u003E","created_at":"1393718644"},
(以下省略)
なるほど、JavaScriptで強制的にログアウトさせられるのね。これが自動的に大量に書き込まれるために、2日目は他チームも加算できていなかった模様でした。


終わってから、ブラウザでJavaScript切ってたら良かったんじゃねえの?とチームメンバに言われて…。
とはいえ、Captcha解析やファイル取得→更新の自動化手順は、先に用意しておくべきでした。

0 件のコメント:

コメントを投稿