GZCTF平台搭建运维
平台启动
平台启动,直接抄的 这个作业 docker镜像源我用的这个https://dockerproxy.1panel.live
中途会遇到一些问题 用docker info看一下
发现了10.201.66.142:20171这个相同的东西
询问GPT得知检查并修改/etc/systemd/system/docker.service.d/或/etc/systemd/system/docker.service.d/http-proxy.conf 文件。如果该文件中有代理设置,可以将其删除或注释掉。
注释之后记得systemctl restart docker.service,不然不会更新修改
管理员
按道理说应该是自动有个admin,但是这里不知道为什么没有,但是可以直接修改数据库,给自己一个admin权限,参考 官方文档
赛题部署
pwn的题注意要有如下init,不然缓冲区会卡住
void init()
{
setvbuf(stdout, 0LL, 2, 0LL);
setvbuf(stdin, 0LL, 2, 0LL);
setvbuf(stderr, 0LL, 2, 0LL);
}
对于docker的设置,用如下方式。用docker.starsparkle.cn而不是dockerproxy.1panel.live,发现前面的源与dockerhub同步较快,后面的同步较慢
但是后来发现一个很离谱的事,通过GZCTF那个容器接口开启测试后,相当于主机自己从dockerhub来pull东西到本地,所以即使我修改了docker,重新传到了dockerhub,但是GZCTF平台再次开启容器默认先从本地找,而不是从dockerhub重新pull,所以我这个一直没更新,我还以为题目docker打错了
所以docker.starsparkle.cn和dockerproxy.1panel.live都可以用。但是如果修改了docker记的在本机删除原本存在的镜像!!!
GZCTF平台的简单二次开发
主要是我们校赛想要加个强武先锋模块,但是平台没有这些,只能自己加,一个简单的方式是替换原有模块,这样就改个名字,图标就可以了,所以就把blockchain这个给替换成qwxf了
怎么修改呢,先通过grep查找字符串
通过类比的方式把这些字符串替换为相应的qwxf字符串,记住一定要类比,大小写也要类比,这样才能保证调用不出错!!!
然后是修改图标问题,查看icon位置对应的引用
询问GPT得知,这是json的一个包,反正类似的东西,可以运行npm install @mdi/js 下载,然后cd node_modules/@mdi/js,cat mdi.js查看东西
发现这样的东西,显然这里是被包装过的,还会区分大小写,直接在官网搜索https://pictogrammers.com/library/mdi/这样搜是不行的
继续询问GPT应该如何搜索,发现这样确实就可以搜到了
然后在https://github.com/GZTimeWalker/GZCTF这个项目的src目录下docker build -t gzctf_new .就行了。然后导入到服务器中。
当时在想这怎么和数据库同步,最后是这样的理解的。注意看docker-compose.yml文件内容,这个.data目录正是在/GZCTF目录下的,所以只要修改这个文件的相关内容,自动会把数据库复制到db-image的/var/lib/postgresql/data中,也就实现了数据库的复制。
有如下两个地方要修改,就是yml文件中的image的指向,因为原本是从gztime对应的docker来pull,这里我们直接让它从本地备份的进行pull就行,然后docker-compose up -d重启,一些都是正常的,也添加了想要的模块。
这里的两个镜像的docker中都是完整的OS(自己docker exec进去看过),通过/GZCTF目录下的data数据来同步数据库,这是我对这个项目的理解。所以想要开发,db-image可以不动,谁开发数据库。想要开发都是gzctf对应的界面,内容那些,只要修改好项目中的src中的源码然后打成docker,导入后docker-compose up -d重启即可
version: "3.0"
services:
gzctf:
image: gzctf_new:latest
restart: always
environment:
- "GZCTF_ADMIN_PASSWORD=debian@0721"
# choose your backend language `en_US` / `zh_CN` / `ja_JP`
- "LC_ALL=zh_CN.UTF-8"
ports:
- "80:8080"
volumes:
- "./data/files:/app/files"
- "./appsettings.json:/app/appsettings.json:ro"
# - "./kube-config.yaml:/app/kube-config.yaml:ro" # this is required for k8s deployment
- "/var/run/docker.sock:/var/run/docker.sock" # this is required for docker deployment
depends_on:
- db
db:
image: gzctf_db_1_backup:latest
restart: always
environment:
- "POSTGRES_PASSWORD=debian@0721"
volumes:
- "./data/db:/var/lib/postgresql/data"