前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTFd动态靶机搭建笔记

CTFd动态靶机搭建笔记

作者头像
安全小王子
发布2021-10-27 11:02:40
1.8K1
发布2021-10-27 11:02:40
举报
文章被收录于专栏:betasecbetasecbetasec
声明:本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。

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

官方网站:https://ctfd.io/
下载ctfd:https://github.com/glzjin/CTFd.git
下载frp:https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
下载ctf-whale:https://github.com/glzjin/CTFd-Whale

01

安装部署frps服务

步骤1. 安装启动frps

wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz 
tar -zxvf frp_0.36.2_linux_amd64.tar.gz 
cd frp_0.36.2_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

步骤2. 编辑frps.ini

sudo vim /etc/frp/frps.ini 

[common] 
bind_port = 7897 
bind_addr = 0.0.0.0 
token =thisistoken 
vhost_http_port=80 #如果是http动态域名需要这个。80端口开启需要systemmd使用root权限启用frp

步骤3. 启动frps服务

sudo systemctl start frps

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

sudo docker network create ctfd_frp-containers 
sudo docker network ls
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目录下)

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容器通信

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

步骤6. 编辑frpc.ini

vim ~/frp_0.36.2_linux_amd64/frpc.ini 

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

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

02

安装靶场与插件

步骤1. 下载靶场与插件

将插件ctfd-whale 下载到CTFd/plugins目录:

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

步骤2. 配置docker-compose.yml

version: '2'
services:
  ctfd:
    build: .
    user: root
    restart: always
    ports:
      - "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:
      - db
    networks:
        default:
        internal:
  db:
    image: mariadb:10.4.12 #这里改成10.4.12,10.4.13会出错
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=ctfd
      - MYSQL_USER=ctfd
      - MYSQL_PASSWORD=ctfd
      - MYSQL_DATABASE=ctfd
    volumes:
      - .data/mysql:/var/lib/mysql
    networks:
        internal:
    # This command is required to set important mariadb defaults
    command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0]
  cache:
    image: redis:4
    restart: always
    volumes:
    - .data/redis:/data
    networks:
        internal:
networks:
    default:
         external:
          name: frpcadmin
    internal:
        internal: true

步骤3. 重新build后启动ctfd

FROM python:3.6-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 g++
RUN adduser -D -u 1001 -s /bin/bash ctfd
WORKDIR /opt/CTFd
RUN mkdir -p /opt/CTFd /var/log/CTFd /var/uploads
RUN pip3 config set global.index-url https://pypi.doubanio.com/simple
RUN pip3 config set install.trusted-host pypi.doubanio.com
COPY requirements.txt .
RUN pip install -r requirements.txt -i  https://pypi.doubanio.com/simple
COPY . /opt/CTFd
RUN 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/uploads
USER 1001
EXPOSE 8000
ENTRYPOINT ["/opt/CTFd/docker-entrypoint.sh"]

步骤4. 构建启动镜像。

docker-compose build docker-compose up -d

步骤5. 将ctfd连接frpcadmin网络

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进行配置:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 betasec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档