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平台搭建相关推荐

  1. 平台搭建_记一次CTFd平台搭建

    CTFd环境搭建指南 前言 学校要承办市赛的网络安全赛项,要求要稳定的平台,所以这一次我选择了CTFd作为本次比赛的环境.(以前内部比赛用过H1v1,偶尔会出现500的报错.)之前看到过赵师傅写的CT ...

  2. ctfd的mysql导入_centos7 CTFd平台搭建过程

    centos7 CTFd平台搭建过程 CTFd平台想要搭建成功,需要centos7,python,mariadb,flask,apache 0X01 升级数据库 1.备份数据库 mysqldump - ...

  3. 基于Ubuntu搭建CTFd平台(全网最全)

    前言: 最近在看<CTF安全竞赛入门>这本书,里面提到了搭建CTFd平台用于练习,学者可以在本地虚拟机上搭建. 所需系统:Ubuntu20.04 怎么安装虚拟机和配置Ubuntu这里就不再 ...

  4. Ubuntu搭建CTFd平台实现动态靶机的过程

    记录搭建CTFd过程 学校的毕业设计是搭建Web渗透攻防教学实训平台搭建,写这篇的目的是让大家少走弯路,一次性搭建完成 搭建环境:阿里云eos云主机1g2核 ubuntu版本:20.04 采用的是第一 ...

  5. H1ve-基于CTFd的美化平台 搭建笔记

    目录 H1ve-基于CTFd的美化平台 搭建笔记 前言 传送门 准备 安装docker docker-compose 安装curl 更新docker-compose 添加执行权限 软连接 查看版本 过 ...

  6. 在VMware 14虚拟机下,ndn-cxx和NFD平台搭建

    在VMware 14虚拟机下,ndn-cxx和NFD平台搭建 实验环境 开始 安装ubuntu 16.04.5 安装ndn-cxx 0.6.3 安装NFD 0.6.3 执行示例程序 实验环境 ubun ...

  7. TALOS组件化平台搭建总结

    转载请注明转自:http://blog.csdn.net/u011176685/article/details/70788654 首先这篇文章不是介绍组件化的架构,因为现在目前网上已经很多,资深大神可 ...

  8. 在线教育平台搭建具体步骤

    到目前为止,国内的疫情基本算是被控制住了,大部分地区中小学也在正式开学.可能有些人会想:开学了,就不用搞在线教育了.但实际上,疫情的结束只是在线教育发展的新起点.且目前很多线下教培机构还是顺势而上,努 ...

  9. Hadoop 平台搭建完整步骤

    Hadoop 平台搭建完整步骤 环境准备 也可以用VMware. 创建三台虚拟机 hd-master.hd-node1.hd-node2 三台虚拟机服务器中的主机名(hostname)分别更改为mas ...

最新文章

  1. ACCESS的Ole对象读取
  2. tar 压缩去除目录
  3. 贵州师范学院计算机2级报名,贵州省2021年上半年计算机二级报名时间
  4. 区块链 HyperLedger Fabric安装
  5. 西电开源社区Ubuntu 10.04软件源
  6. c语言 gbk字模点阵数组,GBK点阵显示字库的制作和使用
  7. Speerio Skinergy 'Image' is ambiguous 错误
  8. VBScript是什么?有什么优缺点?
  9. Linux ext4文件系统下 extundelete 恢复 误删除的文件
  10. 1.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 基础知识点概述
  11. C# FAQ: const和static readonly有什么区别?
  12. html css布局之float和Flexbox
  13. 华硕笔记本 FX50J Fn热键无效
  14. AIDA64测试CPU性能 AIDA64测试CPU需要多久
  15. 安卓手机投射电脑屏幕 手机投屏电脑
  16. linux复制文件到另一台服务器
  17. IP-Guard使用中63个常见问题
  18. MGTools 一款专业级键鼠性能测试工具
  19. java计算机毕业设计基于springboo+vue的共享单车自行车管理系统
  20. 界面(1):对话框和菜单 打印和按钮等杂项

热门文章

  1. 如何把多个pdf文件合并成一个pdf
  2. 数据库: mongodb导入json数据
  3. 2021华为鸿蒙发布会直播,2021 华为智能协作春季发布会直播(视频)
  4. 周其仁:到以色列游学,让我深受刺激!
  5. 不同Normalization之间的比较
  6. 深圳mba学费一览表
  7. 设置vm虚拟机让centos成功连接上外网 详解
  8. R语言计算并合并各物种的OTU数量
  9. 代理服务是个什么东西?
  10. ibm邮件怎么撤回_请问LotusNotes具备发出邮件后撤回 – 手机爱问