安全矩阵

 找回密码
 立即注册
搜索
查看: 2279|回复: 0

CTFd动态靶机搭建笔记

[复制链接]

180

主题

231

帖子

1178

积分

金牌会员

Rank: 6Rank: 6

积分
1178
发表于 2022-5-1 02:57:21 | 显示全部楼层 |阅读模式
CTFd动态靶机搭建笔记


CTFd是一个Capture The Flag框架,侧重于易用性和可定制性。它提供了运行CTF所需的一切,并且可以使用插件和主题轻松进行自定义。

  1. 官方网站:https://ctfd.io/
  2. 下载ctfd:https://github.com/glzjin/CTFd.git
  3. 下载frp:https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
  4. 下载ctf-whale:https://github.com/glzjin/CTFd-Whale
复制代码


01


安装部署frps服务



步骤1. 安装启动frps

  1. wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
  2. tar -zxvf frp_0.36.2_linux_amd64.tar.gz
  3. cd frp_0.36.2_linux_amd64
  4. sudo cp systemd/* /etc/systemd/system/
  5. sudo mkdir /etc/frp
  6. sudo cp frpc.ini  frps.ini /etc/frp/
  7. sudo cp frpc  frps /usr/bin/
  8. sudo chmod a+x /usr/bin/frpc /usr/bin/frps
复制代码





步骤2.  编辑frps.ini

  1. sudo vim /etc/frp/frps.ini

  2. [common]
  3. bind_port = 7897
  4. bind_addr = 0.0.0.0
  5. token =thisistoken
  6. vhost_http_port=80 #如果是http动态域名需要这个。80端口开启需要systemmd使用root权限启用frp
复制代码


步骤3. 启动frps服务

  1. sudo systemctl start frps
复制代码


步骤4. 创建网络并启动frpc容器

  1. sudo docker network create ctfd_frp-containers
  2. sudo docker network ls
复制代码



  1. sudo docker run -d -v ~/frp_0.36.2_linux_amd64/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"
复制代码




注意:如果执行上述命令行,产生的frpc容器一直循环启动,通过指令docker logs <frpc容器ID> 查看报错内容为缺少配置文件,则可以将根目录的frp_0.36.2_linux_amd64文件夹删除(注意是系统生成的空文件夹),在下载的frp_0.36.2_linux_amd64文件夹目录执行(本次操作在opt目录下)
  1. sudo docker run -d -v frp_0.36.2_linux_amd64/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"
复制代码


步骤5. 创建网络frpcadmin用于ctfd容器和frpc容器通信

  1. sudo docker network create frpcadmin
  2. sudo docker network connect frpcadmin <frpc容器名或者ID> #将frpc和ctfd容器单独连接到网络frpcadmin,注意要等容器创建好之后再连接,因此ctfd将在稍后连接
  3. docker network inspect frpcadmin  #查看frpcadmin网络的连接情况并记录frpc容器的网络IP
复制代码




步骤6. 编辑frpc.ini

  1. vim ~/frp_0.36.2_linux_amd64/frpc.ini

  2. [common] server_addr = 172.17.0.1 # 这里填写宿主机ifconfig之后docker0的ip,因人而异,不要一摸一样填
  3. server_port = 7897
  4. token=thisistoken
  5. admin_addr = 172.19.0.2 #这里填写frpc容器在frpcadmin网络里的ip,因人而异,不要一摸一样填,而且要和后续下图插件配置界面中️的一样。
  6. admin_port = 7400
  7. log_file = ./frpc.log
复制代码

编辑完之后记得重启frpc容器



02


安装靶场与插件



步骤1. 下载靶场与插件
将插件ctfd-whale 下载到CTFd/plugins目录:
  1. git clone https://github.com/CTFd/CTFd.git
  2. cd CTFd/
  3. git reset 6c5c63d667a17aec159c8e26ea53dccfbc4d0fa3 --hard  #回滚到当前教程适合的版本
  4. cd CTFd/plugins  #打开ctfd插件目录
  5. git clone https://github.com/glzjin/CTFd-Whale.git ctfd-whale  #确保插件文件夹小写
  6. cd ctfd-whale
  7. git reset 5b32f457e9f56ee9b2b29495f4b3b118be3c57bd --hard  #回滚到当前教程适合的版本 cd ../..   #返回ctfd主目录 vim docker-compose.yml
复制代码


步骤2. 配置docker-compose.yml
  1. version: '2'
  2. services:
  3.   ctfd:
  4.     build: .
  5.     user: root
  6.     restart: always
  7.     ports:
  8.       - "8000:8000" #你自己的
  9.     environment:
  10.       - UPLOAD_FOLDER=/var/uploads
  11.       - DATABASE_URL=mysql+pymysql://root:ctfd@db/ctfd
  12.       - REDIS_URL=redis://cache:6379
  13.       - WORKERS=1
  14.       - LOG_FOLDER=/var/log/CTFd
  15.       - ACCESS_LOG=-
  16.       - ERROR_LOG=-
  17.     volumes:
  18.       - .data/CTFd/logs:/var/log/CTFd
  19.       - .data/CTFd/uploads:/var/uploads
  20.       - .:/opt/CTFd:ro
  21.       - /var/run/docker.sock:/var/run/docker.sock #添加这句即可,别的基本按照官方的不用动
  22.     depends_on:
  23.       - db
  24.     networks:
  25.         default:
  26.         internal:
  27.   db:
  28.     image: mariadb:10.4.12 #这里改成10.4.12,10.4.13会出错
  29.     restart: always
  30.     environment:
  31.       - MYSQL_ROOT_PASSWORD=ctfd
  32.       - MYSQL_USER=ctfd
  33.       - MYSQL_PASSWORD=ctfd
  34.       - MYSQL_DATABASE=ctfd
  35.     volumes:
  36.       - .data/mysql:/var/lib/mysql
  37.     networks:
  38.         internal:
  39.     # This command is required to set important mariadb defaults
  40.     command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0]
  41.   cache:
  42.     image: redis:4
  43.     restart: always
  44.     volumes:
  45.     - .data/redis:/data
  46.     networks:
  47.         internal:
  48. networks:
  49.     default:
  50.          external:
  51.           name: frpcadmin
  52.     internal:
  53.         internal: true

复制代码


步骤3. 重新build后启动ctfd
  1. FROM python:3.6-alpine
  2. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\
  3.     apk update && \
  4.     apk add python3 python3-dev linux-headers libffi-dev gcc make musl-dev py-pip mysql-client git openssl-dev g++
  5. RUN adduser -D -u 1001 -s /bin/bash ctfd
  6. WORKDIR /opt/CTFd
  7. RUN mkdir -p /opt/CTFd /var/log/CTFd /var/uploads
  8. RUN pip3 config set global.index-url https://pypi.doubanio.com/simple
  9. RUN pip3 config set install.trusted-host pypi.doubanio.com
  10. COPY requirements.txt .
  11. RUN pip install -r requirements.txt -i  https://pypi.doubanio.com/simple
  12. COPY . /opt/CTFd
  13. RUN for d in CTFd/plugins/*; do \
  14.       if [ -f "$d/requirements.txt" ]; then \
  15.         pip install -r $d/requirements.txt -i  https://pypi.doubanio.com/simple; \
  16.       fi; \
  17.     done;
  18. RUN chmod +x /opt/CTFd/docker-entrypoint.sh
  19. RUN chown -R 1001:1001 /opt/CTFd
  20. RUN chown -R 1001:1001 /var/log/CTFd /var/uploads
  21. USER 1001
  22. EXPOSE 8000
  23. ENTRYPOINT ["/opt/CTFd/docker-entrypoint.sh"]
复制代码


步骤4. 构建启动镜像。

  1. docker-compose build docker-compose up -d
复制代码


步骤5. 将ctfd连接frpcadmin网络

  1. docker network connect frpcadmin <ctfd容器名或者ID>
复制代码





03


CTFd部署及插件配置



步骤1. 启动ctfd后进入管理页面选择插件




步骤2. 填写相关参数
进入后随便设置,然后进Admin Panel进行设置
属性
配置
Docker API URL
unix://var/run/docker.sock
Frp API IP
frpc的ip配置
Frp API Port
frpc的端口配置
Frp Http Domain Suffix
Docker API URL to connect(可填None)
Frp Http Port
80
Frp Direct IP Address
你的公网ip,本机即为127.0.0.1
Frp Direct Minimum Port
与之前frps最小端口呼应
Frp Direct Minimum Port
与之前frps最大端口呼应
Max Container Count
不超过最大-最小
Max Renewal Times
最大实例延时次数
Frp config template
填入frps的配置,只需填[common]
Docker Auto Connect Containers
ctfd_frpc_1
Docker Dns Setting
可填机器内DNS,没有可填个外网DNS
Docker Swarm Nodes
linux-1 与前面swarm集群呼应
Docker Multi-Container Network Subnet
内网题大子网ip配置/CIDR
Docker Multi-Container Network Subnet New Prefix
每个内网题实例的CIDR
Docker Container Timeout
单位为秒
最后附上我的配置图片




示例:接下来带领大家创建一个web容器:

首先通过命令行,下载容器镜像,记录好镜像名称,然后在challenge进行配置:








回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 18:41 , Processed in 0.016086 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表