目录

CentOS7-CTFd动态靶机搭建

目录

说明

  • 系统:阿里云-CentOS Linux release 7.7.1908 (Core)
  • CTFd:采用赵师傅github上的(single分支–单机 Direct 模式)
    • 地址:https://github.com/glzjin/CTFd.git
    • 版本:bf6a05b62a6a3cad9798954390a6fb2a5a03130f

一、安装Docker-ce

  1. 卸载旧版本
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 安装所需的软件包。
    yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 设置 Docker 仓库。
    使用以下命令来设置国内的阿里云yum源
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

或者

$ sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
  1. 更新yum缓存
$ sudo yum makecache fast
  1. 安装docker-ce
$ sudo yum install -y docker-ce.x86_64
  1. 启动docker
# sudo usermod -aG docker $USER将您的用户添加到docker组,后面可能需要用户添加到docker组中
$ sudo systemctl start docker
  1. 通过运行hello-world 映像来验证是否正确安装了Docker Engine-Community 。
  • 拉取镜像速度慢? Docker镜像加速配置 见文末附文
$ sudo docker run hello-world

二、安装Docker Compose

  1. 运行以下命令以下载Docker Compose的当前稳定版本
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 要安装其他版本的Compose,请替换1.29.2 为要使用的Compose版本。
  • 若下载奇慢,我是直接挂代理,本地下好传到服务器的
  1. 将可执行权限应用于二进制文件:
  • 若是自己去下载没有重命名的,需要修改一下命令
sudo chmod +x /usr/local/bin/docker-compose
  1. (可选)创建指向/usr/bin或路径中任何其他目录的符号链接。
例如:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  1. 测试安装。
$ docker-compose --version
# 将显示内容:docker-compose version 1.29.2, build xxxxxxxx

三、安装Ctfd

  1. 在服务器上下载代码。
git clone -b single https://github.com/glzjin/CTFd.git
  1. 进入目录,编辑 frp 两端配置文件,使 token 随机,再使用 docker-compose 启动相关组件。
cd CTFd

vim frp/frps.ini             # 修改token为自定义随机字符串,必要

vim frp/frpc.ini             # 修改token为自定义随机字符串,必要

git submodule update --init


#用以下命令来标记节点
docker swarm init

--------终端输出开始---------
[root@localhost CTFd]# docker swarm init
Swarm initialized: current node (jektqaxo2o50qta3udmhqtpxt) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3ini9mddb1d4u4s89f812yfad56yp0zydxkjfsq27s0kfhhrm8-dnva4ciq3zo9p01niq7jknsxc xxx.xxx.xxx.xxx:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

--------终端输出结束---------

docker swarm join-token manager # Manager Token:用于新 Manager 节点加入(可参与集群管理)。如果忘记了token,可以在Manager 节点上执行查看
docker swarm join-token worker  # Worker Token:用于普通节点加入集群(仅运行容器,不参与管理)。 如果忘记了token,可以在Manager 节点上执行查看



docker node ls  #检查节点 ID,这里输出的id替换掉下一条命令的<节点 ID>

docker node update --label-add name=linux-1 <节点 ID>

# 服务器添加CTFd部署端口8000和docker swarm join端口2377  
docker-compose up -d
  1. 到这里配置完,后面能正常创建容器,但是无法访问,可能是frp穿透的问题,我是重启后就正常了,建议先重启一下
sudo systemctl restart docker                                     #重启Docker

四、设置Ctfd

  1. 打开 http://ip:8000 安装 CTFd
  2. 进入Admin系统后台设置,打开CTFd Whale插件设置页面,按照如下指导进行设置
字段值说明
Docker API URLunix://var/run/docker.sock照着填
Frp API IP172.1.0.3照着填
Frp API Port7400照着填
Frp Http Domain SuffixNone照着填
Frp Http Port80照着填
Frp Direct IP Addressxxx.xxx.xxx.xxx填服务器的公网IP
Frp Direct Minimum Port28000和docker-compose.yml里frps开放的端口对应,这里照着填
Frp Direct Maximum Port28100同上,照着填
Max Container Count100最大容器数
Max Renewal Times5单个容器最大运行续期次数
Frp config template见表格下方frpc的配置模板
Docker Auto Connect Containersctfd_frpc_1自动接入内网题靶机网络的容器
Docker Auto Connect Networkctfd_frp_containers靶机自动连接到的网络,照着填
Docker Dns Setting223.5.5.5靶机内网有DNS,可写DNS,没有照着填
Docker Swarm Nodeslinux-1前面标记的节点名
Docker Multi-Container Network Subnet173.0.0.0/16内网题大子网 IP/CIDR
Docker Multi-Container Network Subnet New Prefix24每个内网题实例的CIDR,这里照着填
Docker Container Timeout10800实例存货时间,单位秒

Frp config template
其中randomme需修改为自定的随机值,与之前配置的一致

[common]
token = randomme   
server_addr = 172.1.0.4
server_port = 6490
pool_count = 200
tls_enable = true

admin_addr = 172.1.0.3
admin_port = 7400

五、可以开始部署题目了

  1. 先去docker hub 上pull一个题目镜像 (pull太慢?见附文)
docker pull ctftraining/qwb_2019_supersqli:latest
  1. 网页顶部菜单栏点击 Challenges进入题目页,再点击加号创建新的Challenge

  2. Choose Challenge Type 设置为 dynamic_docker

  3. 按下表设置

字段值说明
Name随便注Challenge的名字
CategoryWEBChallenge的类别
Messageqwb_2019_supersqliChallenge的介绍
Initial Value100题目初始分值
Decay Limit99在题目到达最小分值前的题目解题数量
Minimum Value1题目分值最小值
Docker Imagectftraining/qwb_2019_supersqlidocker镜像名
Frp Redirect TypeDirect没有域名就选择Direct
Frp Redirect Port80转发到容器上的端口
Docker Container Memory Limit128m容器内存使用限制
Docker Container CPU Limit0.5CPU使用率限制
Score TypeDynamic Score动态分值/静态分值

附

配置 Docker 镜像加速

  1. 编辑daemon.json,若没有该文件则新建
vim /etc/docker/daemon.json
  1. 在文件中添加国内加速站点
{
   "registry-mirrors" : ["https://3laho3y3.mirror.aliyuncs.com"]
}
  1. 其他可选站点
  1. 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
← 返回技术