记一次CTFd平台搭建
CTFd平台搭建指南
前言
- 学校要承办市赛的网络安全赛项,要求要稳定的平台,所以这一次我选择了CTFd作为本次比赛的环境。(以前内部比赛用过H1v1,偶尔会出现500的报错。)之前看到过赵师傅写的CTFd-Whale动态容器插件,创建独立靶机+快速部署,非常让人心动。所以本次平台搭建就采用了CTFd+CTFd-Whale模式。
- 赵师傅原文链接:https://www.zhaoj.in/read-6333.html?tdsourcetag=s_pctim_aiomsg
- 特别感谢:https://www.tattooo.top/2020/07/28/%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BACTF%E5%8A%A8%E6%80%81%E9%9D%B6%E5%9C%BA/
搭建环境
- Ubuntu-server: 20.04
- docker: 19.03.12
- docker-compose: 1.26.2
搭建步骤
- 先更新一下软件源和软件列表
sudo apt-get update
sudo apt-get upgrade
一、安装docker
- 方式一:脚本安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
curl -sSL https://get.daocloud.io/docker | sh
- 方式二:通过版本库安装
1. 更新系统包索引
sudo apt-get update
2. 添加HTTPS协议,允许apt从HTTPS安装软件包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common3. 添加Docker公共密钥 Docker 官方源
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add4. 设置版本库类型,软件版本包括三种: stable、edge、test
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"5. 安装最新版docker-ce
sudo apt-get install docker-ce6. 设置开机自启动并启动docker
sudo systemctl enable docker
sudo systemctl start docker
二、安装docker-compose
- 方式一:GitHub安装
1. 进入https://github.com/docker/compose/releases 查看最新版本。sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose2. 设置权限
sudo chmod +x /usr/local/bin/docker-compose3. 查看是否安装成功
docker-compose --version
出现docker-compose version 1.26.2即安装成功
- 方式二:二进制安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo docker-compose --version
- 方式三:pip安装
因为20.04版本自带默认python版本为3.*,所以直接安装pip即可。
1.安装pip
sudo apt install python3-pip
2.更新库
sudo apt-get update
3.更新pip(一定要更新,不然后面建立容器项目会报错)
sudo pip3 install --upgrade pip
4.安装docker-compose
sudo pip3 install docker-compose
如果出现下面错误,执行pip3 install six --user -U更新six
三、设置docker镜像加速
- 访问https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
- 找到镜像加速器,按照指示修改daemon配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://******.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
四、安装frps
cd
wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
tar -zxvf frp_0.29.0_linux_amd64.tar.gz
cd frp_0.29.0_linux_amd64
sudo cp systemd/* /etc/systemd/system/
sudo mkdir /etc/frp
sudo cp frpc.ini frps.ini /etc/frp/
sudo cp frpc frps /usr/bin/
sudo chmod a+x /usr/bin/frpc /usr/bin/frps
sudo systemctl enable frps
注意:一定要在/root目录下执行,否则后面的文件编辑位置会出错。
- 编辑frps.ini
sudo vim /etc/frp/frps.ini[common]
bind_port = 7897
bind_addr = 0.0.0.0
token = thisistoken #token值一定要与frpc文件的保持一致
- 启动frps系统服务
sudo systemctl start frps
注意:frps与后面要配置的frpc文件的token、port值一定要一样。不然容器会一直保持重启状态。
五、创建FRP网络
- 启动frpc容器
sudo docker network create ctfd_frp-containers
sudo docker run -d -v ~/frp_0.29.0_linux_amd64/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"
- 创建frpcadmin网络并将frpc容器接入网络
1. sudo docker network create frpcadmin
2. docker ps //查看frpcadmin容器ID
3. sudo docker network connect frpcadmin <frpc容器ID>
- 查看frpcadmin网络的连接情况并记录frpc容器的网络IP
docker network inspect frpcadmin
注意:如果初次执行没有发现地址,多执行几次上面的命令,容器处于up状态时才可以加入。
- 编辑frpc.ini
vim ~/frp_0.29.0_linux_amd64/frpc.ini[common]
server_addr = 172.17.0.1 //docker0的ip
server_port = 7897
token = thisistoken //与前面frps.ini的token一致
admin_addr = 172.19.0.2 //frpc容器的网络IP,上面记录的IP
admin_port = 7400
log_file = ./frps.log
- 重启frpc容器
docker restart <frpc容器的ID>
六、安装平台与插件
- 下载靶场与插件
git clone https://github.com/CTFd/CTFd.git
cd CTFd/
git reset 6c5c63d667a17aec159c8e26ea53dccfbc4d0fa3 --hard //回滚到当前教程适合的版本
cd CTFd/plugins //打开ctfd插件目录
git clone https://github.com/glzjin/CTFd-Whale.git ctfd-whale
cd ctfd-whale
git reset 5b32f457e9f56ee9b2b29495f4b3b118be3c57bd --hard //回滚到当前教程适合的版本
cd ../../.. //返回CTFd主目录
vim docker-compose.yml
- 配置docker-compose.yml文件
version: '2.2'services:ctfd:build: .user: rootrestart: alwaysports:- "8000:8000"environment:- UPLOAD_FOLDER=/var/uploads- DATABASE_URL=mysql+pymysql://root:ctfd@db/ctfd- REDIS_URL=redis://cache:6379- WORKERS=1- LOG_FOLDER=/var/log/CTFd- ACCESS_LOG=-- ERROR_LOG=-volumes:- .data/CTFd/logs:/var/log/CTFd- .data/CTFd/uploads:/var/uploads- .:/opt/CTFd:ro- /var/run/docker.sock:/var/run/docker.sock #添加这句即可,别的基本按照官方的不用动depends_on:- dbnetworks:default:internal:db:image: mariadb:10.4.12 #这里改成10.4.12,10.4.13会出错restart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=ctfd- MYSQL_USER=ctfd- MYSQL_PASSWORD=ctfd- MYSQL_DATABASE=ctfdvolumes:- .data/mysql:/var/lib/mysqlnetworks:internal:# This command is required to set important mariadb defaultscommand: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0]cache:image: redis:4restart: alwaysvolumes:- .data/redis:/datanetworks:internal:networks:default:internal:internal: true
- 修改Dockerfile
更新:有小伙伴私信我说docker build失败,这里可以修改dockerfile文件,我用的是3.7版本,当时我的系统python也是3.7,你们可以根据自己的python3版本指定相关版本。例如3.6版本的可以修改为:FROM python:3.6-alpine,再试一下搭建情况。
FROM python:3.7-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\apk update && \apk add python3 python3-dev linux-headers libffi-dev gcc make musl-dev py-pip mysql-client git openssl-dev
RUN adduser -D -u 1001 -s /bin/bash ctfdWORKDIR /opt/CTFd
RUN mkdir -p /opt/CTFd /var/log/CTFd /var/uploads
RUN pip config set global.index-url https://pypi.doubanio.com/simple
RUN pip config set install.trusted-host pypi.doubanio.com
COPY requirements.txt .RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simpleCOPY . /opt/CTFdRUN for d in CTFd/plugins/*; do \if [ -f "$d/requirements.txt" ]; then \pip install -r $d/requirements.txt -i https://pypi.doubanio.com/simple; \fi; \done;RUN chmod +x /opt/CTFd/docker-entrypoint.sh
RUN chown -R 1001:1001 /opt/CTFd
RUN chown -R 1001:1001 /var/log/CTFd /var/uploadsUSER 1001
EXPOSE 8000
ENTRYPOINT ["/opt/CTFd/docker-entrypoint.sh"]
修改requirements.txt
在最后一行添加banal==0.4.2
构建并启动镜像
docker-compose build
docker-compose up //挂后台可加-d选项
讲ctfd容器连接frpcadmin网络
docker network connect frpcadmin <ctfd容器ID>
访问IP:8000即可
第一次进入会要求设置管理员账号密码,按步骤设置即可。
七、动态容器参数设置
- 进入管理界面并选择插件
填写相关参数
Frp API IP填frpc容器网络的IP
domain没有就填None
Frp Direct IP Address填自己的服务器IP,因为我是搭建线下服务器所以用的内网IP
template里面写上frpc.ini的内容,其他照着填就行
八、题目设置
Challenge Type题目类型选择dynamic_docker
Name题目名字
Category题目分类
Initial Value初始分值
Decay Value递减分值
Minimum Value最小分值
Docker Image支持动态flag的镜像
Frp Http Portfrps http开放的端口
Frp Redirect Type没有域名选择Direct
Frp Redirect Port转发到靶机容器的端口
Score Type是否启用动态分数
九、使用NGINX修改网页端口
- 安装Nginx
apt install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.19.2.tar.gz
tar -zxvf nginx-1.19.2.tar.gz
cd nginx-1.19.2.tar.gz
./configure
make
make install
- 启动nginx
cd /usr/local/nginx/sbin/
./nginx
设置开机自启
vi /etc/rc.local
/usr/local/nginx/sbin/nginx (根据whereis nginx实际的位置为准)
设置执行权限:
chmod 755 rc.local
- 配置nginx
配置之前需要先运行一下nginx
cd /usr/local/nginx/sbin/
./nginx
./nginx -s quit
然后再修改配置文件 vim /usr/local/nginx/conf/nginx.conf(whereis nginx 实际情况)
server下的location替换为
location /{proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
十、利用docker制作可持续利用题目
- 拉取符合题目要求的lamp环境容器
docker search lamp
docker pull <容器名>
- 制作题目容器
1.运行一个集成lamp环境的容器
docker run -d --name <自定义名字> -p <宿主机未使用端口>:80 <镜像名字>
2.讲制作好的题目php或html文件放入容器/var/www/html目录下
docker cp <宿主机本地文件> <docker ID/Name>:/var/www/html/
- 打包题目上传到dockerhub
1.若未有dockerhub账号,先去注册一个:hub.docker.com
2.登录到dockerhub
docker login
3.打包镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
4.将打包好的镜像上传到dockerhub
docker push <cintainerID>
后续对题目的管理去dockerhub即可。搭建题目时docker image填写CONTAINER [REPOSITORY[:TAG]]即可。docker
记一次CTFd平台搭建相关推荐
- 平台搭建_记一次CTFd平台搭建
CTFd环境搭建指南 前言 学校要承办市赛的网络安全赛项,要求要稳定的平台,所以这一次我选择了CTFd作为本次比赛的环境.(以前内部比赛用过H1v1,偶尔会出现500的报错.)之前看到过赵师傅写的CT ...
- ctfd的mysql导入_centos7 CTFd平台搭建过程
centos7 CTFd平台搭建过程 CTFd平台想要搭建成功,需要centos7,python,mariadb,flask,apache 0X01 升级数据库 1.备份数据库 mysqldump - ...
- 基于Ubuntu搭建CTFd平台(全网最全)
前言: 最近在看<CTF安全竞赛入门>这本书,里面提到了搭建CTFd平台用于练习,学者可以在本地虚拟机上搭建. 所需系统:Ubuntu20.04 怎么安装虚拟机和配置Ubuntu这里就不再 ...
- Ubuntu搭建CTFd平台实现动态靶机的过程
记录搭建CTFd过程 学校的毕业设计是搭建Web渗透攻防教学实训平台搭建,写这篇的目的是让大家少走弯路,一次性搭建完成 搭建环境:阿里云eos云主机1g2核 ubuntu版本:20.04 采用的是第一 ...
- H1ve-基于CTFd的美化平台 搭建笔记
目录 H1ve-基于CTFd的美化平台 搭建笔记 前言 传送门 准备 安装docker docker-compose 安装curl 更新docker-compose 添加执行权限 软连接 查看版本 过 ...
- 在VMware 14虚拟机下,ndn-cxx和NFD平台搭建
在VMware 14虚拟机下,ndn-cxx和NFD平台搭建 实验环境 开始 安装ubuntu 16.04.5 安装ndn-cxx 0.6.3 安装NFD 0.6.3 执行示例程序 实验环境 ubun ...
- TALOS组件化平台搭建总结
转载请注明转自:http://blog.csdn.net/u011176685/article/details/70788654 首先这篇文章不是介绍组件化的架构,因为现在目前网上已经很多,资深大神可 ...
- 在线教育平台搭建具体步骤
到目前为止,国内的疫情基本算是被控制住了,大部分地区中小学也在正式开学.可能有些人会想:开学了,就不用搞在线教育了.但实际上,疫情的结束只是在线教育发展的新起点.且目前很多线下教培机构还是顺势而上,努 ...
- Hadoop 平台搭建完整步骤
Hadoop 平台搭建完整步骤 环境准备 也可以用VMware. 创建三台虚拟机 hd-master.hd-node1.hd-node2 三台虚拟机服务器中的主机名(hostname)分别更改为mas ...
最新文章
- ACCESS的Ole对象读取
- tar 压缩去除目录
- 贵州师范学院计算机2级报名,贵州省2021年上半年计算机二级报名时间
- 区块链 HyperLedger Fabric安装
- 西电开源社区Ubuntu 10.04软件源
- c语言 gbk字模点阵数组,GBK点阵显示字库的制作和使用
- Speerio Skinergy 'Image' is ambiguous 错误
- VBScript是什么?有什么优缺点?
- Linux ext4文件系统下 extundelete 恢复 误删除的文件
- 1.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 基础知识点概述
- C# FAQ: const和static readonly有什么区别?
- html css布局之float和Flexbox
- 华硕笔记本 FX50J Fn热键无效
- AIDA64测试CPU性能 AIDA64测试CPU需要多久
- 安卓手机投射电脑屏幕 手机投屏电脑
- linux复制文件到另一台服务器
- IP-Guard使用中63个常见问题
- MGTools 一款专业级键鼠性能测试工具
- java计算机毕业设计基于springboo+vue的共享单车自行车管理系统
- 界面(1):对话框和菜单 打印和按钮等杂项