之前ctfdのプレイグラウンドを構築しましたが、今度は GZCTF をインストールして、両者の違いを確認してみます。GZCTF のインストールには、公式ドキュメントで推奨されている docker + K8s の分離デプロイ方式を使用します。
ここでは、https://github.com/MoRan23/GZCTF-Auto というプロジェクトを使用して自動化デプロイします。単一のdocker
またはdocker+k3s
のデプロイをサポートしています。
私はdocker+k3s
のデプロイ方式を使用していますので、2 台の Ubuntu マシンを準備する必要があります。1 台は docker をインストールし、もう 1 台は k3s をインストールします。
両方のマシンは Ubuntu 20.04 です。
k3s のインストール#
IP:192.168.31.171
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
GZCTF プラットフォームのインストール#
docker がインストールされているマシンにインストールします。IP アドレスは 192.168.31.254 です。
少し待って、デプロイが成功しました。
http://192.168.31.254:81 にアクセスして、アカウントとパスワードでログインします。
問題のテスト#
次の docker プレイグラウンドを使用してテストします。
ctftraining/qwb_2019_supersqli:latest
左側の管理をクリックします。
中に入ると、新しい競技を作成するためのタイトルを入力します。
作成が完了したら、以下のようになります。
右側のアイコンをクリックして、次のページに移動します。
問題管理をクリックして、新しい問題を作成します。
問題のタイプを選択できます。
動的なコンテナを選択し、次のページに移動します。
コンテナイメージに注目し、テストコンテナを作成し、docker イメージのアドレスを入力し、テストコンテナを作成します。以下の図のようになります。
問題を有効にします。
次に、問題にアクセスするために、チームを作成し、関連する人をチームに追加する必要があります。
情報審査で、チームの登録を自動承認にすることができます。これにより、チームに参加するためには管理者の承認が必要です。それ以外の場合は、管理者の同意が必要です。チームに参加していない人は問題にアクセスできません。
チーム管理をクリックすると、チームを作成したり、参加したりできます。
チームに参加するには、他のメンバーが招待コードを送る必要があります。
チームを作成するをクリックします。
作成が完了したら、招待コードを生成できます。
ホームに戻り、競技に参加することができます。
上記の問題が表示された場合、競技が自動承認されていないことを意味し、管理者が審査する必要があります。
test アカウントでログインし直すと、競技に参加できるようになります。
競技に参加し、コンテナを作成した後、以下の図のようになります。
ここで提供される ws 接続は、tcp over ws プロキシモードが有効になっているためです。
アクセスするには、https://github.com/XDSEC/WebSocketReflectorX/releases クライアントをダウンロードする必要があります。
インストールが完了したら、ws 接続アドレスを入力します。
問題の IP とポートが表示されます。
その後、この接続を使用して問題にアクセスするには、http://127.0.0.1:64143/ を使用します。
言語の切り替え#
参考#
https://github.com/XDSEC/WebSocketReflectorX/releases
https://docs.ctf.gzti.me/zh
https://github.com/GZTimeWalker/GZCTF
https://github.com/MoRan23/GZCTF-Auto
カバー画像は以下から取得しました:
https://wallhaven.cc/w/kx5v57