2014年3月4日火曜日

SECCON 2013 全国大会

チームnewbieとして参加しました。

最初は1人だけのぼっちチームだったのですが、
奇跡的な縁があって、ucqさんをはじめとしたCDIの人達が加わりました。
なし崩し的にチームの代表だったので、正直すごく恐縮しました。。。

初心者ですが、Web関係でそこそこ貢献出来たと思います。
(Web以外はfkmrさん、ucqさんの独擅場でした)
以下writeup~

korin.tower

単純な入力フォームが与えられ、入力した内容がHTMLエスケープされて表示されます。
管理ページっぽいURLが隠されていましたが、管理者じゃないとダメー!的なエラーになります。

入力フォームにはE-mail項目があって、入力内容の表示の時にmailtoリンクが貼られるのですが、
そこら辺に抜け道があるのかなーと考え、
"onmouseover="alert(1)"//@test.com
とか突っ込んでみました。
alert(1)の部分は消されましたが、やはりmailtoの部分はエスケープされてなかったみたいです。

ここで、CSAW CTF 2013のWeb問題(Nevernote - 200 Points)でのことを思い出し、
リクエストをそのまま垂れ流すTCPサーバを自分のマシン上で立てて、
"><img src="http://192.168.10.X/"><@test.com
を突っ込んでみました。

予想通り、問題サーバからリクエストがありました。
あとはdocument.cookieのCGISESSID値を奪取すれば、管理画面にアクセス出来ると考えていたのですが、
イベントハンドラ内の処理が尽く消されて苦戦しました。。。
最終的にはfkmrさんの華麗なXSSでdocument.cookieを奪取出来ましたが、
そのままCGISESSIDを使ってもダメみたいで、UAを問題サーバからのリクエストのものと同一にしたらいけました。
他チームのwriteupを見てるとUAの変更は必要ない…かな…?
問題サーバのVMが手に入ったら検証ですね。はい。

管理ページに入るとLv2へのパスワード認証フォームと入力ログの一覧が並んでいました。
ログのIDはunixtimeっぽいのですが、一番下のログのIDは111...と少し変だったので
確認すると1つ目のkeyがありました。

ログの閲覧ページにはsqliがあったので、Lv2パスワードを奪取しようと試みました。
id=111111111111111'union select 1,'1','1'--
が通ったので、
id=111111111111111'union select 1,'1',version()--
でRDBMSの確認…
しようとしたのですがエラーに…

ucqさんがぼそっと「sqliteじゃね?」と呟いてくれたので、
試しにsqlite_version()を入れたら通りました。
table情報を取得して、それっぽいtableのレコードも取得していたら、
先にfkmrさんがパスワードを取得してくれました。早すぎです。

Lv2になると下方に画像アップローダーへのリンクが出てきました。
filenameにヌルバイト入れたら.phpとか通るんじゃね?っと考え、
用意したアップロードスクリプトを使って突っ込もうとしていたら
fkmrさんが速攻でシェル設置&3つ目のkey取得しました。

どうやら、拡張子チェックらしいチェックはされていなかったようです。。。

これ以降のレイヤーになってくると、初心者には厳しくなるのでfkmrさんとucqさんにほぼ丸投げしました。

pisa.tower

無駄に色々作りこんである掲示板が与えられました。
殆どブラフなんだろうなーと考えつつも色々見てて無駄に時間をくいました。。。

ほぼ瞬殺でkeyを取得していたチームがあったので、1つ目のkeyは単純なものと考え、
とりあえずHTTPレスポンスヘッダを眺めたらkeyがありました。

2つ目のkeyを求めて色々探っていたらadmin.cssとかいうファイルがあったので、
勘でpisa.tower/sec_bbs/adminにアクセスしたら管理認証フォームが出てきました。

settingのとこで頑張ればadmin権限に昇格出来るんじゃね?
っと考えて色々見てたのですが、結局ダメでした。。。
(懇談会の時に、@kazu1130_hさんから管理認証はダミーだったと教えてくれました。。。)

結局、2つ目のkeyは404エラーページに出てくる画像のalt属性にありました。

pisa.towerのkeyは実際のシステムでは考えられないものだったので、何ともいえない気持ちになりました。

書き換えポイントは掲示板にフラッグワードを書き込むだけでいけるようでしたが、
CAPTCHAはあるわXSS出来るわnoscriptタグでmeta refreshはあるわで、
手動でのフラグ書き込みは諦めました。

そういえば、最初に作成した掲示板アカウントが急にログイン出来なくなったので、
誰かにXSSでセッションIDを奪取され、アカウントを乗っ取られたっぽいです。イラッときました。

1日目の競技終了後、CAPTCHA画像のOCRを書いたのですが、
2日目でCAPTCHA画像の仕様を変えられました(白目)
最後にはやけくそになってmeta refreshとJavaScriptを無効化し、
手動でフラッグワードを書き込み続けました。
30分後くらいにはCAPTCHAに慣れてきて、なかなかな速度を出せました。
因みに、÷記号は「/」じゃないとダメなことには結構な時間がかかりました。。。

その他

ucqさんが正解時に鳴るランプの制御を奪っていました。
既製品だったようで、一日目の午前中には攻略されていました。
運営さんが慌ててすごく面白かったです(小学生並の感想)

あと解けた問題数はnewbieがトップだったようです。
newbie 15
0x0 11
ED 12
urandam 12

すごく悔しいのでWeb以外も鍛えて行こうと思います。

最後に

つらいことも多々ありましたが、すごく楽しかったです。
来年も是非参加したいです。