これは何?
2022年に開催してありがたことに好評をいただいたナゾトキCTFを、友達同士の遊びや社内教育など、特定のメンバー内でわいわい楽しめるようにクローズドゲームEditionとしてパッケージ化して頒布することにしました。
このコンテンツには2つポイントがあります
- 誰でも楽しくCTFに参加できる!
- 誰でも簡単にCTF大会のホストができる!
参加者が楽しめるのはもちろんですが、ホスト側になるべく苦労がないようにしたいと考えているので、必要な手順をブログとしてこのページに公開します。
情報に不足や変更があったら随時このページを更新します。詳しい方で「もっとこうした方が良いよ!」とかあったら教えていただけると嬉しいです。
CTF出題サーバの構築
ナゾトキCTFではCTFdという界隈で一番ポピュラーな問題サーバを採用しています。
Dockerで環境構築ができるので、基本の構築はとても簡単です。インターネットに公開する方法については以前記事に書きました(↓)のでそれを参照してください。
インターネットへの公開が不要でローカル環境でプレイしたいだけであればdocker-composeを使うのが一番簡単なのでその手順を以下に紹介します。
CTFdを起動
GithubのCTFdリポジトリの最新版のリリースのところをクリックします。

一番下のAssetsをダウンロードして、自分の端末の中でZipを展開していい感じの場所に置いておきます。

筆者の環境はWindows 11です。ここから先はコマンドプロンプトで操作しました。
# zip展開したCTFdフォルダに移動(自分のやりやすい場所に置こう)
cd C:\work\nazo\CTFd-3.5.1
# とりあえずdocker-composeが動いているか確認
# もし動いてなかったら入れてください。やり方はぐぐろう。
docker-compose -h
# docker-compose.ymlがあるのでそのままdocker-composeを起動
docker-compose up -d
なんとなく起動した雰囲気を感じ取ったら http://localhost:8000/setup にブラウザで接続すると画面が表示されます。(時間がかかることがあります)
どうせ後で更新するので適当に入力してNEXTボタンを押す~を繰り返して最後までやっていきます。

デフォルトの画面が表示されたら一旦OKです。

ナゾトキCTFをインポートする
BOOTHでご購入いただくと、以下のファイルがダウンロードできます。まずこの中のzipファイルを使います(ファイル名の日付は変更になる可能性があります)

CTFdの[Admin Panel]に移動します

[Config] > [Backup] >[Import]
からzipファイルを選択し[Import]をクリックします。

しばらく待つと画面が切り替わります。インポート後のログイン情報は同梱されている README.txt に記載されていますのでそちらをご参照ください。

WEB問題サーバのビルド
今回のナゾトキCTFにはWEBジャンルの問題があります。こちらもdocker-composeで構築が完了するようにしています。
BOOTHでダウンロードしてきたファイルの中に WEB問題セット というフォルダがあると思うので、フォルダごと好きな場所に置きます。(CTFdと同じ場所がわかりやすいかも)
フォルダの中にはdocker-compose.ymlが置いてありますので、実行します。

# ディレクトリ移動
cd C:\work\nazo\WEB問題セット
# docker-composeの実行
docker-compose up -d
なんとなく起動した雰囲気を感じ取ったらWEBサイトがいい感じに表示されることを確認します。確認先は README.txt に記載してあります。
※必要な場合※WEB問題の問題文中のURLを書き換える
参加者が問題サーバのDockerを起動している環境(PCなど)とは別の環境から接続してくることを想定する場合、WEB問題の問題文中のURLを適切に変更する必要があります。

変更の手順は[Challenges]>[対象の問題]より

Connection InfoのところのURLを適切に変更します。

対象になる問題は4箇所ありますので、README.txtをご確認ください。
ちなみに、Challenges画面では獲得できるポイントを変更したり、ヒントを増やしたり減らしたりもできるので、そのあたりを調整するとよりゲーム性が増して面白くなるかもしれません。
お疲れ様でした!
これでいつでもCTF大会が開催できるようになりました!
参加者の方にURLを共有し、ルールを守って楽しく遊びましょう!注意事項などはBOOTHの商品ページをご確認ください。
カスタマイズについて
デフォルトのままでも遊べますが、変更するともっと楽しくなる設定があるので紹介しておきます。変えるかどうかは任意です。これ以外の部分でも自由に改変して構いませんが、変更したことにより不具合が起こっても責任は負えませんので自分で解決してね。
諸々の変更は管理者権限を持つユーザーでログインして[Admin Panel]から行います。ログイン情報は
README.txt
を見てね。

トップページのメッセージ変更
Admin Panel上のメニューから [Pages] > [All Pages] より[index]をクリックします。

コンテンツの中身が表示されますので
<!– 編集可能範囲ここから –>
<!– 編集可能範囲ここまで –>
って表示されている間の文言は自由に変更していただけます。会の趣旨や開催時間などの連絡を記載するといいかもしれません。一般的なHTMLタグやCSSが使えますので装飾も可能です。

ここ以外の範囲を改変した場合、謎解きに影響が出る可能性がありますのでご注意ください。うっかり編集してしまって戻せなくなったらもう一度データのインポートをすると元に戻すことができます。
メールサーバについて
面倒なのでメールサーバの設定をしていません。もし必要な場合は [Config] >[Email] の画面の下の方にEmail Serverの設定項目があるので必要に応じて変更してください。メールの文面は私が大会のときに使ってた文章がサンプルとして入っていますので適宜修正してください。

ちなみに、CTFdはメールサーバの設定をしなくてもユーザーが自力でパスワードの再設定ができなくなるだけなので、内輪で遊ぶだけなら正直設定はそれほど必要ない気がしています。(この設定如何にかかわらず、ユーザー登録時にはメールアドレスの登録が必須なので、使わないなら適当なアドレスを入力してもらうようにすると良さそうです)
チーム戦に対応する
今までのナゾトキCTFは個人戦前提でしたが、チームをつくってチーム毎にスコアを競うこともできます。チームビルディングなどにご利用いただけるかもしれません(この機能については本番で検証してないので不具合あったらごめんなさい)
ユーザーモード変更
デフォルトでは個人戦モードになっているので、チームモードに切り替えます。注意書きにも出てきますが、その時点までに問題を解いた人がいたら実績が消えてしまいますので注意(なので実質大会の途中から変更は無理だと思います)
[Config] > [User Mode] より[Team Mode]をクリックして[Update]

チーム設定
次に [Accounts] に移動して Team Creation を[Enabled]に変更。
Team Size(1チームあたりの最大人数)とTotal Number of Teams (チームを作成できる最大数)も必要に応じて変更して[Update]をクリックします。

以上でチームモードが利用できます。チームの作成や参加はユーザー側で行います。このへんは普通のCTF大会と同じなので説明は割愛します。

利用規約とプライバシーポリシー
[Config] > [Legal] より利用規約とプライバシーポリシーが変更できます。一応例文として私が大会開催時に使っていたものを入れてますので変更して使うもよし、まるっと書き換えるもよし。適切に設定してご利用ください。

ここに設定したものは、ユーザー登録のときのココに出てきます。

まとめ
他にも追記したほうが良さそうなことがあったら随時更新していきます。少しでも楽しんでもらえると嬉しいです。
お問い合わせについて
お問い合わせは TwitterのDMかお問い合わせフォームまでお願いします。
アフターフォロー
ナゾトキCTFをやってみてCTFに興味が出てきたんだけど…という方から次どうしたらいいか相談されるのでおすすめ本を紹介しておきます。
入門セキュリティコンテスト
おそらく国内最強のセキュリティ女子であらせられる中島明日香さんの名著です。私の中で今初心者の方にCTF本を紹介するなら第一選択になっています。丁寧な解説とハンズオンが抜群にわかりやすくおすすめです。
詳解セキュリティコンテスト
通称、迷路本。CTFエンジョイ勢からもうちょっと詳しくやっていきたいと思い始めたあなたにはこっちの方がおすすめです。ジャンルの幅広さと解説の深さが絶妙で第2歩目に良い感じの本。