うおの知識倉庫

ゆるーくアウトプットしてます。

CTFdをビルドしてみる話

概要

CTFでよく問題サーバで使用されているCTFdというフレームワークを使用し自身で問題サーバをビルドしてみようかと思い、構築した話。

CTFdについて

github.com

構築の方法が2つ紹介されているので、どちらもやってみた。

目次

通常の構築手順

1: 構築したいサーバのホームディレクトリなどで CTFd用のディレクトリを作る。
今回はホームディレクトリ直下に作成する。(uouoCTFのところはCTFの名前にすると管理しやすいかもです。)

$ mkdir ~/uouoCTF
$ ls ~

2: gitからCTFdをクローンする

$ cd ~/uouoCTF
$ git clone https://github.com/CTFd/CTFd
$ ls ~/uouoCTF

gitが入っていない場合は、aptでインストールする場合

$ sudo apt update
$ sudo apt install git

などでgitをインストールしてください。

3: サーバの公開範囲を変更するために、CTFdの実行ファイルを編集する。
編集する実行ファイルは"~/uouoCTF/CTFd/"配下のserve.py。

$ vim ~/uouoCTF/CTFd/serve.py

を実行し、30行目の

app.run(debug=True, threaded=True, host="127.0.0.1", port=4000)

を編集する。 host="127.0.0.1"は問題サーバからしかアクセスできないので、
host="0.0.0.0"としてどこからでもアクセスできるようにする。

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

こんな感じ。 portも変更できたりする。

4: CTFdサービスを起動する。

$ cd ~/uouoCTF/CTFd
$ python serve.py

5: 動作を確認する。
webブラウザのアドレスバーに

[サーバのIPアドレス]:4000

でアクセスする。 CTFdの画面が表示されたら構築完了

このような画面が表示される

ctfd.io

Dockerでの構築手順

1: Dockerをインストールする。

$ sudo apt install docker
$ sudo apt install docker.io

2: Dockerコマンドを実行する。

$ sudo docker run -p 8000:8000 -it ctfd/ctfd

3: 動作を確認する。
webブラウザのアドレスバーに

[サーバのIPアドレス]:8000

でアクセスする。 CTFdの画面が表示されたら構築完了

ctfd.io

ただし、ボリュームの永続化はされない。

Dockerでの構築方法でボリュームの永続化がしたい場合

1: Docker Composeをインストールする。

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

2: 通常の構築方法の手順1&2をやる。

3: DockerComposeで環境構築を自動で行う。

$ cd uouoCTF/CTFd
$ sudo docker-compose up -d

4: 動作を確認する。
webブラウザのアドレスバーに

[サーバのIPアドレス]:8000

でアクセスする。 CTFdの画面が表示されたら構築完了

ctfd.io

まとめ

少し触ってみたい(チャレンジなど登録したものが次回以降消えてもいいよ)って人ならDockerワンライナーのやつ、次回以降も使いたいって人は通常構築方法がおすすめです。 DockerComposeを使った方法は構築までに時間がかかるので、Dockerを使ってごにょごにょやりたい人なら使ってもいいかもしれません。

答えられる範囲であれば答えますので、質問などや間違ってるよ!等があればコメントにお書きください。