AWD比賽組織指南

kidicc發表於2021-08-23

題目構建

賽題全部使用docker部署,需準備check指令碼和映象
映象構建注意事項
1、注意web目錄許可權
2、注意服務是否自啟動
3、修改ssh配置
4、建立flag檔案並修改許可權為600

這裡基礎映象建議採用下面這兩個,原因很簡單,比較小,便於移植

ctfhub/base_web_nginx_mysql_php_56
ctfhub/base_web_nginx_mysql_php_73
docker pull ctfhub/base_web_nginx_mysql_php_56
docker run -itd --name aaaa -p 9002:80 -e "FLAG=CTFTraining{ctfhub/base_web_nginx_mysql_php_56}" ctfhub/base_web_nginx_mysql_php_56  // 啟動基礎映象
docker cp xxx.zip aaaa:/var/www/html // 複製原始碼到映象中
docker exec -it aaaa /bin/sh  // 進入映象
在映象內操作,該映象預設沒有ssh服務需要手動新增
docker commit aaaa awd_xxx // 操作完畢後生成新映象
注意生成後測試映象是否合格
上傳到dockerhub
docker login // 登入dockerhub
docker tag awd_xxx nmsldd/awd_xxx // 修改映象標籤為自己的名字
docker push nmsldd/awd_xxx:v1 // 上傳映象
打包到本地
docker save imagesid > xxx.tar // 打包到本地
zip -r xxx.zip xxx.tar // 記得壓縮
docker load < xxx.tar // docker匯入

由於基礎映象是alpine,這裡還是簡單記錄一下操作

新增使用者
adduser ctf
修改密碼
echo -e “rootpwd\nrootpwd” | passwd ctf
安裝ssh服務
apk add openssh-server
apk add openssh-client

平臺構建

這裡後端採用的Cardinal
前端採用Asteroid_Standalone

後端部署流程

下載程式碼後直接執行,根據提示建立配置即可
後面在啟動時就可以直接更新配置,如果說建立新比賽的話,建議清空資料庫,要不可能會存在資料上的問題
本地mysql注意要建立Cardinal資料庫

wget https://github.com/vidar-team/Cardinal/releases/download/v0.7.3/Cardinal_v0.7.3_linux_amd64.tar.gz // 下載最新版
tar zxf Cardinal_v0.7.3_linux_amd64.tar.gz // 解壓縮
CREATE DATABASE  `cardinal` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; // mysql連線後 建立cardinal資料庫
./Cardinal // 啟動平臺後端 第一次啟動會讓輸入管理員賬號和密碼
IP:19999 // 選手登入頁面
IP:19999/manager // 管理員頁面

登入管理員頁面如下
image
要組織一場比賽,主要需要配置以下內容
1、隊伍管理,新增隊伍
2、題目管理,新增題目
3、靶機管理,新增外部靶機,批量新增
4、flag管理,生成flag
5、公告管理,釋出提示
6、配置管理,更改配置
7、賬號管理,新增check賬號等
功能還是挺全面的,配置起來也很簡單

外部靶機和平臺通訊主要是用於更新flag檔案,所以配置好地址的ssh賬號和密碼即可

前端展示

修改配置檔案
配置檔案路徑地址 Asteroid_Data/StreamingAssets/asteroid.ini
修改介面配置為自己的

[connect]
url = ws://ip:19999/api/asteroid
image_url = http://ip:19999/api/uploads

批量啟動

這裡寫了一個指令碼
指令碼實現的功能了以下功能,批量建立docker,啟動docker,重置隊伍靶機,清理環境。
對於不同的docker環境,其啟動的命令不盡相同,所以在一些情況下需要修改generate_run_sh函式中的啟動命令,修改後docker在啟動後會逐步執行
docker啟動時預設會對映8801-8899,2201-2299埠,如果有其他埠需要對映出來,需要修改generate_docker_sh函式內容
最後指令碼會在執行目錄下生產各個隊伍的資料夾,同時還有pass.txt檔案。
pass.txt檔案內容格式為

隊伍ID:ssh賬戶:密碼
team1:ctf:925d18e2f1a984caf29ee8de890c2819

check

最後根據題目編寫相對應的check指令碼就好了

配置好下面引數,post請求即可
checkapi = "http://ip:8888/api/manager/checkDown"
checkapi_token = '4443d148-a2d5-4e39-a483-e0e050c883e7'

相關文章