CpawCTFを終えて

法政大学と工学院大学内部のCTFイベントCpawCTFの運営をしてきました。

仕事としては、イベント詳細決め、場所確保、呼びかけ、作問、レンタルサーバー準備、スコアサーバーに全問題設置って感じでした。

CTFは一般的にはまだまだマイナーな競技であるためなのか、全然最初は人が集まらなくてなんとか学内の人に興味を持ってもらいたく、ポスターの作成なども手掛けました。

今回は本当に何も知らない方がたくさんいたりしたので、CTFをなるべく楽しんでもらえるようエクストリームCTFを少し取り入れたり普段のCTFよりも若干プログラミングをして楽しめたり目grep頑張ってする問題など楽しめるのを優先しようと心がけて作りました。

以下、私が作問した問題と想定解法を書きます。

ファイル形式の問題は以下のURLから入手できます。

配布ファイル

network100

icmpにペイロードでフラグをくっつけました。開いたらすぐ下にフラグが表示されます。

wiresharkでパケットを見るという行為を体感してもらうため本当にシンプルに作りました。

network200

いろいろなパケットをたくさん混ぜてみづらいpcapファイルにしました。

パケット数が多く目grepするのは大変なため、icmpでフィルタリングして、seq番号を見てもらうとasciiコードになっていて、それを直すとフラグが手に入るようにしました。

この問題とバッタ氏が提供してくれた問題は配点をもっと高くしてくれても良かったのではないかという声があったので、点数配分を見直さなければならないのかなと思いました。

misc100

問題ファイルは200点となっていますが直前で100点問題に修正されました。

lovelive!という文字で埋め尽くされているバイナリファイルが配られて、lovelive!の文字列をヌルに置き換えてstringsコマンドを叩くとでてきます。

また、Bzなどでビットマップイメージを開くと規則正しい色のなかフラグの文字列が目立つのでそれを目grepすると簡単に手に入ります。

crypto300

RSA暗号のeとnとencrypted dataが渡されて、decrypted dataがフラグですという問題。(値はその場て例のC++自作RSAを回して出したやつなので忘れました)

数が7桁くらいとかなり小さいので、普通にPARI/GPなりさくっと素因数分解プログラム作るなりして分解して秘密鍵を求めるだけの問題です。

一応RSAの仕組みは初心者で初めて聞く人にとっては理解しづらく、仕組みがわからないと絶対に解けない(仕組みが分かってれば絶対解ける)問題なのですこし配点を高くしました。

直前の講義資料を見ながら頑張ってやってくれた人や、手計算()でぱっと解いた方もいてびっくりしました。

ただ、やはり暗号初学者にとってはきついところがあったのか、全く手をつけられなかった人も結構いたみたいです。

trivia200

知識問題を体験して欲しかったのもあって、trivia問題を加えました。

最短経路を求めるアルゴリズムの名前は?と聞いていて、ダイクストラを英語で入力するとフラグでした。

大文字で入力していて通らないですと質問してくれた人が多く、大文字小文字は悩む人が多いんだなと感じました。

あとエクストリームCTFっぽいやつで、フラグが裏に書かれた僕の名刺を教室の一番後ろの机の中に置いておいて、中国語で一番後ろの机の下にフラグがあるよと書いた問題を一問用意しました。

なんだかんだみんな楽しんでくれた感じはあったのでよかったです。

以上が僕が作成した問題と感想です。

サーバーが途中1回落ちてしまうトラブルがありましたが、なんとかイベントを成功させることができました。

これを機にCTFもっとやりたいと言ってくれる方もいて、とても運営としては嬉しいです。

またこのような機会を設けて、今回の反省を踏まえつつよりよいイベントにしていきたいです。

P.S.今回スコアサーバーにはさくらのクラウドを使用しました。ありがとうございました。