给实验室同学搭建的CTFD平台用于内部训练和CTF的校赛,为了循序渐进当然是先内部出一些简单入门的题目,但是网上大部分关于CTFD平台的都只是部署,而关于题目放置的内容却很少,虽然这个过程比较简单,但还是记录一下
部署自制题目一共分为以下几步(以WEB题目为例,实际上如果是逆向,杂项,密码学这些不需要占用服务器资源类型的题目,部署起来会更简单,比如在题目的链接里面直接放一个百度网盘的下载链接):
-
出一道WEB题目
-
将其使用Docker打包,编写Dockerfile和docker-compose.yml文件
-
在服务器上运行该Docker
-
CTFD管理员登录,设置该题目
第一步,出一道WEB题目,关于此,师傅们可以有各种各样的思路,这里为了方便示范,举例为 目录爆破寻找 .flag.swp 交换文件,使用 VIM 恢复获取flag的题目
想好思路之后,编写代码并在本地的phpstudy环境上运行成功,目录为:01_Find_Fl4g_File
,结构为:
index.php的内容为:
Find the flag file edited by VIM
第二步,将其使用Docker打包,编写Dockerfile和docker-compose.yml文件
我们使用基础镜像为:php:5.6-fpm-alpine
其Dockerfile为:
FROM php:5.6-fpm-alpine RUN rm -rf /var/www/html/* COPY ./files /var/www/html EXPOSE 80 WORKDIR /var/www/html CMD ["php", "-S", "0.0.0.0:80"]
假定读者有一定Docker基础,简单介绍一下内容
FROM 是基于某个基础镜像
RUN 运行后面的命令,即将基础镜像生成后html文件夹下的内容都删除掉,避免对题目造成影响,或者误导做题选手
COPY复制本机文件夹下的内容到容器的文件夹下
EXPOSE 选择暴露的端口,这个当然是选择80端口,WEB默认端口,在docker-compose.yml文件中我们再修改端口映射
WORKDIR 设置工作目录,这个设不设置都关系不大
CMD 每个Dockerfile中只能有一条CMD命令,一般用来启动服务,这里我们用来启动php
编写好Dockerfile后,我们编写docker-compose.yml文件,docker-compose.yml在存在多个容器的时候进行调度很方便,这里的docker-compose.yml文件比较简单;
version: "2" services: web: build: . restart: always ports: - "0.0.0.0:13000:80" environment: - FLAG=flag{Vim_1s_VeRy_g00d}
接着进行第三步:在服务器上运行该Docker
此处其实没啥注意的,将你本地测试好的题目保存到CTFD所在的服务器上,找个文件夹放置各个题目
如图:
目录为:
/home/ubuntu/CTFChallenge/web/01_Find_Fl4g_File
运行该docker
docker-compose up -d
加了 -d 参数之后服务在后台运行
进行第四步:CTFD管理员登录,设置该题目
管理员登录后,CTFd中Admin->Challenges
然后填写相关的内容:
虽然没有汉化,但是英文还是比较简单,正常使用没有问题,(不认识的多谷歌啦,其实就这几个功能
确定后到用户界面查看
点击链接后正常跳转:
来到题目界面,成功部署!
放上校内CTF训练平台,欢迎各位师傅来玩哇,后期会放很多基础,入门以及有意思的原创题目上去。