2017年02月19日

CTFスコアサーバ「isislab/CTFd」の検証

 仙台でCTFを企画したいと思いつつなかなか準備ができていなかったのですが、今年こそ実現したいと思っています。問題のネタはいくつか考えてあるのですが、CTFを開催するためのスコアサーバは未検討だったため、いろいろと情報収集してみたところ「isislab/CTFd」が良さそうだったので検証してみました。

 デモサイトも公開されており、事前に動作を確認することができますので、ご興味がある方はどうぞ。なお、本記事は、VMware Workstation9 上のDebian8 Jessie(メモリは1GBを割り当て)にて動作検証しました。

[isislab/CTFdの特徴]

 シンプルですが、CTF運営に必要な最低限の機能は有していると思います。
  • 参加者はチーム名とパスワードを登録してログインします。ただし、チームに対してユーザーを登録することができません。そのため、チーム戦形式にする場合はパスワードをメンバーと共用する必要があります。どちらかというと個人戦向きだと思います。
  • トップ10のグラフ表示機能付きのスコアボードがあります。
  • 問題には複数のファイルを添付することができます。また、問題にジャンルを設定し分類することもできます。
  • 事前に登録しておいた問題の一部を「非表示」にしておき、状況を見ながら適宜表示していくことができます。(問題が解かれたら、自動的に次の問題をオープンする機能はありません。)
  • 問題一覧が表示されるメインページの他に、自由にページを追加することができます。この機能は、例えば「運営者からのお知らせ」画面などに活用できます。

インストール手順

パッケージのダウンロード

公式サイト(https://github.com/isislab/CTFd)から「Clone or download」-「Download ZIP」を選択し、パッケージをダウンロードします。(ファイル名 CTFd-master.zip)

Official site

インストール

(1) ZIPの展開

#unzip CTFd-master.zip
    

(2) 環境設定スクリプトの実行

 環境設定スクリプト(prepare.sh)を実行すると、CTFdの実行に必要なパッケージがaptコマンドにより導入されます。
#cd CTFd
#./prepare.sh
(途中でエラーが発生して停止する)
    

(3) 手動によるPythonパッケージの追加

 次のPythonパッケージは環境設定スクリプトでインストールできなかったため、手動でインストールします。
#easy_install bcrypt
#easy_install werkzeug
#easy_install flask
    

(4) CTFdの起動

 次のコマンドにより、CTFdが起動します。標準設定ではポート4000番でHTTP接続を待ち受けします。
#python serve.py
    

 以上でインストールは終了です。

設定変更

(1) ポート番号の変更

 ポート番号を変更したい場合は、serve.pyを編集してください。
serve.pyの内容
from CTFd import create_app

app = create_app()
app.run(debug=True, threaded=True, host="0.0.0.0", port=80)
    

(2) トップページのロゴ画像の変更

 ロゴ画像を変更したい場合は、次の画像を差し替えてください。
CTFd/static/original/img/logo.png

(3) DBファイルの初期化

 ある程度いじった後に初期状態に戻したくなった場合は、CTFd/ctfd.dbを削除すると、ユーザー情報や問題情報などが初期化され、初回アクセス画面が表示されます。

画面イメージ

 初回アクセス時の画面です。管理者アカウントを登録します。

Official site


 管理者アカウントを登録した直後の画面です。右上の「Admin」をクリックすると管理者画面に遷移し、問題登録などの管理者機能が利用できます。

Official site


 試しに問題をいくつか入力してみました。これは一般ユーザーがログインした直後の画面です。問題一覧が表示されています。日本語も正しく表示されています。

Official site


 問題をクリックすると、サブウィンドウで問題内容が表示されます。青いボックスが添付ファイルです。問題が解けたら、最下部の「Key」欄に入力し「SUBMIT」をクリックすればフラグが送信されます。

Official site


 解いた問題は緑色で表示されます。

Official site



以上です。
posted by やまと at 23:34| Comment(0) | 実験日誌