AWD比賽組織指南
題目構建
賽題全部使用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 //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 // 管理員頁面
登錄管理員頁面如下
要組織一場比賽,主要需要配置以下內容
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 = //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 = "//ip:8888/api/manager/checkDown"
checkapi_token = '4443d148-a2d5-4e39-a483-e0e050c883e7'