【CTFd】靶场安装与配置

建议使用新版【CTFd】靶场安装与配置(同时支持 Whale+Owl+AWD 的 Docker 一键配置版 v2)

CTFd 是 githbu 上开源的 ctf 靶场之一,配合上 whale 等插件,可以快速搭建一个靶场

CTFd

以下测试环境均为 Ubuntu20.04,Python3.8
CTFd 官网
CTFd-Github 仓库
CTFd 中文汉化
由于本人更喜欢汉化风格,所以使用的均为 CTFd_chinese_CN 下 3.4.1 版本的 CTFd

  1. 克隆 CTFd 代码并安装相关依赖
    #如果空白环境
    sudo ./prepare.sh
    #如果是在宝塔环境下安装(bt自带的python会产生冲突)
    sudo apt-get --fix-broken install
    #如果已经安装好python环境(建议使用3.7)
    sudo pip install -r requirements.txt
  2. 下载 CTFd_chinese_CN-v3.4.1 并将 CTFd 目录覆盖到你的项目目录
  3. 运行,默认运行在 http://127.0.0.1:4000,你可以通过更改配置文件使其监听 0.0.0.0,或者使用 nginx 反代,此处使用后者
    #配置文件CTFd/config.ini
    python serve.py

CTFd-whale

CTFd-whale 是 CTFd 的动态靶机,依赖 Docker 集群实现

  1. 安装 Docker 与 Docker-compose 并且启用 Docker Swarm
    apt-get install docker docker-compose -y
  2. 给你的 Docker 换源,不然会龟速下载
  3. 在插件目录下,克隆 frankli0324 修改过的 ctfd-whale
    #打开ctfd插件目录
    cd CTFd/plugins
    #确保插件文件夹小写
    git clone https://github.com/frankli0324/ctfd-whale
    #安装一些缺少的组件
    pip3 install flask_apscheduler flask_redis
  4. 由于插件使用的是集群的模式,所以这里要创建一个单个服务器的集群,然后将这个服务器加入集群
    docker swarm init
    docker node update --label-add='name=linux-1' $(docker node ls -q)
  5. 安装启动 Frps,Frps 为目前最好用的内网代理之一,通过这个将容器映射出去
    请访问 Frps-Github 获取目前最新的版本

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

    修改 /etc/frp/frpc.ini,YOUR_TOKEN请自己随机设置一个

    #frps.ini
    [common]
    bind_port = 7000 #防火墙记得开放相应端口
    bind_addr = 0.0.0.0
    vhost_http_port = 10000 #如果是http动态域名需要这个。80端口开启需要systemmd使用root权限启用frp
    token = YOUR_TOKEN
    subdomain_host = ctfd-node.hz2016.cn

    修改之后重启 frps

    service frps restart

    创建 FrpAdmin 容器

    docker network create --driver overlay ctfd_frp-containers
    docker run -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --network="ctfd_frp-containers" --restart=always "glzjin/frp"

    创建网络 frpcadmin 用于 ctfd 容器和 frpc 容器通信

    docker network create frpcadmin
    docker ps #查看容器ID

    查看 frpcadmin 网络的连接情况并记录 frpc 容器的网络 IP

    docker network connect frpcadmin

    根据上方回显,修改 /etc/frp/frpc.ini,此处 TOKEN 与 PORT 应该与 frps.ini 一致

    file

    file

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

    最后记得重启 frpc 容器

    docker restart

    由于莫名其妙报错 Unable to access frpc admin api
    但是反复排查又是没有问题的,于是看源码!

    #修改CTFd/plugins/ctfd-whale/utils/routers/frp.py第125行
    resp = self.ses.get(f'http://{self.url}/api/status')
  6. 完成 Whale 相关设置
内容 注释
Http Domain Suffix ctf-node.hz2016.cn 这里填写使用 http 方式访问靶机的泛解析域名
Http Port 10000 这里填写 frps 中的 vhost_http_port,该端口为 http 方式靶机访问的端口
Direct IP Address ctf-direct.hz2016.cn 这里填写服务器 ip,用于显示 Direct 方式访问的题目的 IP
Direct Minimum Port 10001 这里填写用于动态靶机 Direct 方式的开始端口
Direct Maximum Port 10010 这里填写结束端口

参考文献

CTFd+CTFd-whale 动态靶机环境搭建
ctfd 使用 ctfd-whale 动态靶机插件搭建靶场指南
手把手教你如何建立一个支持 ctf 动态独立靶机的靶场(ctfd+ctfd-whale)
记载一次 CTFd 平台搭建及运维

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇