SECCON CTF 2018 Domestic (12/23) 参加記

チームm1z0r3(みぞれ)の一員としてSECCON CTF 2018の国内決勝に出場しました。

結果

1325点 (Atk: 1000, Def: 325) で4位でした。

学生のみのチームではトップだったようで、文部科学大臣賞を受賞しました!

King of Hill形式のCTFは初めてでしたが、それなりの結果を出すことができて嬉しかったです。

各問題の所感

天橋立

XSS Hellと題したページに案内されました。
各々がXSSの問題を出し合って、毎5分時点で解かれていない問題にはDefense Pointが入るというものでした。

最初題意がわからず、問題文にXSSを埋め込むのかとか考えていましたが、しばらくして意味を理解しました。
結果としてハッシュ関数を使ったら誰も解けなくなってみんなで仲良く配分されました。

一部簡単に解けるチームをDefense Point獲得のタイミング直前に落としにかかる性格の悪いことをしていたのは私です。

宮島

Assembly Golfと題されたページに案内されました。
30分ごとに問題が入れ替わり、条件を満たすアセンブリコードを書ければAttack Flag獲得、最短のコードを一番最初に提出したチームには5分ごとにDefense Point獲得となっていました。

自分は普段Web/Forensics班に所属していたため、チームのBinary班メンバが先導して解く形になりました。バイナリを完全に理解したい。

他の問題が膠着状態だったこともあり、終盤は完全にこの問題のDefense Pointが命運を分けていました。
最短コードを書いたチーム間で分配だったらまた展開が面白そうでしたけど、先着チームの独占形式だったのでかなりウェイトが重かったですね。

松島

Webでポーカーをプレイして指定の役を出すという問題でした。
この問題のポーカーは以下の動作をしていました。

  • ドローが1回だけ許される
  • 捨てるカードを選び、次のページに遷移して役判定が行われる
  • 5秒に最大1回プレイでき、短時間に複数の新規プレイリクエストを発行すると「あそびすぎ」と返される
  • フルハウスを出すと一つ目のAttack Flagが、フォーカードを出すと二つ目のAttack Flagが獲得できる
  • フォーカードを出すと、同時にDefense Flagの入力画面が表示される

裏で動いているバイナリが別のページで配布されてました。
実行すると10枚のカードがリストで表示されており、左から順に5枚が手札、右の5枚がドローカードのキューになっていました(スペード?と何かの9がバイナリと実際の表示で入れ替わっていた気がします、どっちが正しかったのか)。
分析した結果、時刻をもとに乱数を発行していることがわかりました。

そこまでは良かったのですが、問題が解禁されてからぽちぽち遊んでいたらフルハウスもフォーカードも出ちゃいました。なんたる偶然
懇親会でも同じことが起きちゃったチームが結構いたようでした。
しかも一回解ければ永遠にDefense Flagが入力できたので、割とあっけなく終了しました。

まぁちゃんと解くにしても、手元VMの時刻を早めにずらして1秒ごとに実行し、狙った決まり手が出るかどうか判定するスクリプトを作ればできただろうなと思います。

感想

かなり運に助けられた決勝だったとは思いますし、色々と議論を呼んでいると言う話も耳にします。
ただオンサイトでCTFをするのもKing of Hillをプレイするのも初めてだったので自分は本当に楽しかったです。
CTFのモチベーションも上がったので、これからも頑張って勉強していきます。

m1z0r3は大学内の勉強会であり、毎年代替わりをしながら継続しているため、来年また決勝に出るとしてもフルチェンジしたメンバー構成になっていると思います。
自分がm1z0r3としてSECCON決勝に出るのは最初で最後になりますが、来年の予選は遠慮なく解きますし、卒業してもどこかのCTFチームとして帰ってこれたら嬉しいです。

運営の皆さん、ありがとうございました!

カテゴリー CTF

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です