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 Suffix | node.vaala.ink 这里填写使用http方式访问靶机的泛解析域名 |
Http Port | 9123 这里填写frps中的vhost_http_port,该端口为http方式靶机访问的端口 |
Direct IP Address | chive.vaala.cloud 这里填写服务器ip,用于显示Direct方式访问的题目的IP |
Direct Minimum Port | 9125 这里填写用于动态靶机Direct方式的开始端口 |
Direct Maximum Port | 9129 这里填写结束端口 |
最后点一下更新就可以保存配置了,填写完成后新建题目测试是否成功,按下表新建题目,表中没有提到的保持默认就好
项 | 内容 |
---|---|
Choose Challenge Type | Dynamic docker |
Name | test |
Category | test |
Docker Image | vaalacat/push_f12 |
Frp Redirect Type | Direct 或者 Http |
Frp Redirect Port | 80 |
Initial Value | 1 |
Decay Limit | 1 |
Minimum Value | 1 |
Score Type | dynamic score |
新建题目过后点击启动,然后等待靶机创建,可以在服务器中 docker ps -a
查看是否启动,若启动成功则搭建完成
总结
我的仓库中所使用的端口一共有三类,需要修改平台信息请按照以下文件位置修改
- 9123:
默认 http 模式靶机访问端口,需要修改
frps.ini
、后台中的Http Port
、docker-compose.yml
- 9124:
默认为 ctfd 端口,需要修改
docker-compose.yml
- 9125-9129:
动态靶机 Direct 模式端口,需要修改
docker-compose.yml
、后台中的端口范围
完成以上文件的修改即可完成对平台用到端口的修改