ctfd使用ctfd-whale动态靶机插件搭建靶场指南


引言

由于之前的文章使用的是赵师傅的仓库,里面的 ctfd 版本不能保持官网最新,很多师傅都提到了这个问题,于是重新部署了一下 ctfd 并做一下记录 首先要注意的是系统版本,经过众多师傅的反馈发现 Ubuntu 20 会出现不可预测的 bug,请尽量使用 Ubuntu 18 部署 该文章历史版本:github

部署

这里我使用 frankli0324 师傅 fork 后修改的赵师傅 ctfd whale 的版本进行搭建,并对配置文件和项目文件进行了一些定制后打包到了我自己的仓库方便部署

准备

安装环境

由于动态靶机是使用 docker 实现的,所以首先要准备安装一下 docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 

然后还要准备 docker-compose

sudo pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple

配置环境

由于插件使用的是集群的模式,所以这里要创建一个单个服务器的集群

docker swarm init

然后将这个服务器加入集群

docker node update --label-add='name=linux-1' $(docker node ls -q)

最后要准备的是给 docker 更换镜像源,这里推荐将 daocloud 和 aliyun 的源都添加进去,不然会很龟速,修改文件 /etc/docker/daemon.json,两个镜像都需要自己取申请一下,改完后类似下面这样

{
    "registry-mirrors": ["https://233666.mirror.aliyuncs.com","http://233666.m.daocloud.io"]
}

也可以给 docker 设置镜像源代理

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

然后添加内容,这里是我自己的代理

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"

重启生效

sudo systemctl daemon-reload
sudo systemctl restart docker

安装

下载

首先使用我仓库中的 ctfd,已经做好了镜像换源等工作。

git clone https://github.com/Un1kTeam/CTFd --depth=1

配置

cd CTFd
nano conf/frp/frps.ini # token 一定要随机
nano conf/frp/frpc.ini # token 一定要随机

这里给出 frp 两个配置文件的内容供参考,大致就是只需要修改 token

  • frps.ini
[common]
bind_port = 7000
vhost_http_port = 9123
token = your_token
subdomain_host = node.vaala.ink
  • frpc.ini
[common]
token = your_token
server_addr = 172.1.0.3
server_port = 7000
admin_addr = 172.1.0.4
admin_port = 7400

然后安装插件并启动

git submodule update --init
docker-compose up -d

不出意外就应该成功了,使用

docker ps -a

查看是否有没有正确启动的镜像

平台设置

浏览器访问 9124 端口进入平台,完成平台基本配置,然后进入后台,右上角的插件中进入 Whale 设置,其中,左侧 Docker 菜单栏如果没有特殊需求无需更改,只需更改左侧 Frp 菜单栏中的内容

内容
Http Domain Suffixnode.vaala.ink 这里填写使用http方式访问靶机的泛解析域名
Http Port9123 这里填写frps中的vhost_http_port,该端口为http方式靶机访问的端口
Direct IP Addresschive.vaala.cloud 这里填写服务器ip,用于显示Direct方式访问的题目的IP
Direct Minimum Port9125 这里填写用于动态靶机Direct方式的开始端口
Direct Maximum Port9129 这里填写结束端口

最后点一下更新就可以保存配置了,填写完成后新建题目测试是否成功,按下表新建题目,表中没有提到的保持默认就好

内容
Choose Challenge TypeDynamic docker
Nametest
Categorytest
Docker Imagevaalacat/push_f12
Frp Redirect TypeDirect 或者 Http
Frp Redirect Port80
Initial Value1
Decay Limit1
Minimum Value1
Score Typedynamic score

新建题目过后点击启动,然后等待靶机创建,可以在服务器中 docker ps -a 查看是否启动,若启动成功则搭建完成

总结

我的仓库中所使用的端口一共有三类,需要修改平台信息请按照以下文件位置修改

  • 9123: 默认 http 模式靶机访问端口,需要修改 frps.ini、后台中的 Http Portdocker-compose.yml
  • 9124: 默认为 ctfd 端口,需要修改 docker-compose.yml
  • 9125-9129: 动态靶机 Direct 模式端口,需要修改 docker-compose.yml、后台中的端口范围

完成以上文件的修改即可完成对平台用到端口的修改

参考

- The End -