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 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'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM