簡易CTFスコアサーバ用CGI
(EasyCTF)
■ 概要
CTF用の簡単なスコアサーバのCGIです.
- EasyCTF-1.0 (2014/08/29)
- EasyCTF-1.1 (2014/10/29)
- ユーザ登録時にファイルをロックする
- 複数の解答を登録可能にする
- コメント記述を追加
- 問題文の行頭の空白を削除しないように変更
- 競技者の回答を記録する
- 競技者の回答時に正答済みのチェックを追加
- その他,細かい修正
- EasyCTF-1.2 (2014/12/07)
- 人気問題の表示を追加
- スペルミスを修正(regist → register)
- ヘッダ表示を見直し
- EasyCTF-1.3 (2014/12/08)
- EasyCTF-1.4 (2015/04/20)
- 以下の脆弱性の対処を行いました.(検証用のVMイメージはこちら(「その他」をクリック))
- セッションチェックの誤りのために,適当なセッションIDでも数回に1回の
割合でログインすることができた問題を修正
- XSSや任意ファイル作成を防止するために,不正なIDのチェックを追加する
- 正当時のログの重複保存を削除 (これは脆弱性には関係が無いが,Saucerでの見栄えが悪いのでEasyCTF側を修正した)
■ 注意点
自分の勉強用に即席で作ったものなので,ものすごく手抜きです.
様々な問題があるかもしれません.セキュリティ的な脆弱性などもあるかも
しれません.
自由に使って構いませんが,損害など出ても作者は責任はとれません.
各自の責任の下で利用してください.
パスワードはMD5で保存していますが,ネットワーク上は平文で流れてしまいます.
HTTPSと併用する,見られても構わないパスワードを使うようにする,
ローカル環境でしか使わないなど,各自で考慮してください.
他の重要なシステムで使っているパスワードをこちらにも設定してしまう
ようなことがないように注意してください.
とにかくシンプルな作りなので,自分でいろいろ改造したり,実験したり,
機能追加するためのベースとして使うといいでしょう.
■ 機能
以下の機能があります.
- 複数ユーザの登録とパスワード認証によるログイン
- 問題の出題と解答
- ユーザのスコア管理,ヒストリ表示,ランキング表示,得点経過のグラフ表示
■ インストール
CGIになっているので,CGIが動作するディレクトリに置いてください.
環境に合わせて,以下を修正してください.
- 各種スクリプトの先頭の「#!/usr/bin/perl」の部分を環境に合わせて修正.
- ファイルなどの所有者を,httpdのものにする.
- config.plに記述してあるツール類へのパスを,環境に合わせて修正.
■ 必要なもの
動作に以下が必要です.
- Perl
- Perlモジュール
- ツール類(グラフ出力に必要.無くても動くがグラフ出力ができない)
- gnuplot
- ImageMagick
- base64
■ CentOSでの動作
いちおう,FreeBSDとCentOSで動作を確認してあります.
以下,CentOSで動かすときにハマりそうなポイントです.
うまく動作しないという場合に,参考にしてみてください.
- iptablesで80番ポートが通るようになっているか?
以下を修正して,80番ポートを通すようにします.
# nano /etc/sysconfig/iptables
- Perlのモジュールのインストールが必要
CentOSでは以下でインストールできます.
# yum install perl-CGI
# yum install perl-CGI-Session
- CGIのファイルの属性をチェック
属性が root になっていると,書き込みができないためにユーザ登録が
できません.httpdのユーザ属性(CentOSではapache:apache)にしておきます.
# chown -R apache:apache ...
- SELinuxの設定を確認
SELinuxが有効になっている場合,httpdがCGIのディレクトリに書き込み
できないため,やはりユーザ登録ができません.
(ユーザ登録画面では成功したと出ますが,実際にそのユーザでログインできない,
ということになります)
SELinuxの設定を確認してください.
(まあ試すだけならば,Permissive にしてしまうのが一番手っ取り早いのですが)
■ 使いかた
ブラウザからは最初に login.cgi に接続すると,ログイン画面になります.
最初はユーザ登録がされていないので「Regist」で新規ユーザ登録します.
ユーザ登録後,再度ログイン画面から登録したユーザでログインできます.
初期状態ではサンプル問題が2問,登録されています.
問題はサンプルを参考にして,question というディレクトリに適当に追加
してください.ファイルをダウンロードさせたい場合には,
apacheのコンテンツフォルダのほうに置いておいて,そちらにリンクするように
するといいでしょう.
■ スクリーンショット
ログイン画面.新規ユーザ登録は下の「Regist」から行う
ログイン後のホーム画面
問題の出題画面