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'
posted @ 2021-08-23 15:02  kidicc  阅读(525)  评论(0编辑  收藏  举报