My Quality

とあるエンジニアの戯言

SECCON CTF 2017 国内決勝大会に出場しました

SECCON CTF 2017 の国内決勝大会にチーム m1z0r3 として出場しました。

結果は632点で24チーム中8位でした。個人としては梅田を全部解き500点入れました。

以下、自分が解いた梅田の Write up

梅田

画像投稿Webサービス。フラグは全5個。

最初のフラグは Defence Point のページに書いてあった。
他のチームが次々とサブミットする中、気付くまでに結構時間がかかって焦った。

2つ目と3つ目のフラグは Admin 権限を持つユーザの Cookie の中にあった。
各画像のページには、その画像に対してコメントを書いて管理者に報告することができ、報告すると管理者が報告内容を見に行くというストーリーになっている。

まあ XSS だろうなと思いつつも、どうやら CSP により script タグのインラインスクリプトは禁止されているっぽい(当然他サイトのJSの読み込みも禁止)。
他の人の画像を見るとマジックナンバーだけ誤魔化して JavaScript で何やかんやしているのが見えたので、同じように画像(JS)をアップロードして、報告コメントでこの画像を読み込ませればいいことがわかる。

実際に他人の画像を見てたら RequestBin に何かを投げているのが見えて、見に行ったら Admin 権限付与したユーザがわかり、しかもそのユーザでログインできちゃってえぇ…となった。

あとは管理画面を眺めていたら /admin/logs?p=nginx/error.log が見えて、ここでディレクトリトラバーサルが可能。
/admin/logs?p=nginx/../../../../../var/www/umeda/public/index.php 等でソースコードが見え、フラグは全部環境変数に入ってることがわかる。
起動中のプロセスの環境変数/proc/[pid]/environ に書いてあるので、あとは pid をブルートフォースで当てておしまい。

Defence Point に関しては序盤は取れていたが、中盤からどうやっても太刀打ちできなくなってきて諦めた。ここで頑張ればもう少し上位までいけたかもしれない。

感想

梅田が解き終わった後、船橋に取り組んでいたが、結局解ききれず残念だった。
あと懇親会の時に、府中の作問者に話を聞いたら、1個目のフラグは取れそうな感じがしたので取り組めばよかったなと。

チームとしては Defence Point が伸び悩み、他のチームと差を付けられたので、Defence Point 重要だなぁと思いました。

NIRVANA改のスクリーンショットを見ると、梅田を解き終わったタイミングで3位になったけど、そこからじわじわと追い抜かれた印象。

競技中はNIRVANA改を見る余裕はなかったけど、後から振り返るときにもこういう可視化ツールは役に立つし便利だなと思いました(小並感)。

作問者、運営の皆さまありがとうございました。