目录
史上最简单的CTFd动态靶场的搭建方法
-
**参考链接:**https://www.yuque.com/dat0u/ctfd
-
**参考文章:**https://blog.csdn.net/songchaofly/article/details/121966961
-
需要docker环境和docker-compose
下载解压安装包
首先下载集成的压缩包
wget http://116.62.164.167/ctfd_file/ctfd.tar.gz
解压
tar -zxvf ctfd.tar.gz
部署docker集群
先初始化:
docker swarm init
注意: 如果出现一下界面,说明环境里面初始过集群指令。重装或者误操作都会出现,这时候需要武力删除,执行完指令之后再执行初始化指令。
武力删除指令:
docker swarm leave --force
删除之后重新初始化docker
集群,正确的结果如图:
将刚刚初始化的这个集群加入到节点当中,命令执行后,返回的就是节点ID了,暂时不用管这个节点ID。注意这个linux-1
在后面的插件配置地方有,名称不能错。
docker node update --label-add='name=linux-1' $(docker node ls -q)
创建docker容器
创建插件的frp容器
这个容器实现的是动态靶场容器的端口映射问题,以及创建动态容器并为动态容器分配端口的问题。
cd ctfd/frp-docker-for-ctfd-whale/
docker-compose up -d
-
由于我已经安装好了,所以我用别人的插图
创建CTFd的docker容器
cd ../
docker-compose up -d
创建完毕之后,查看镜像状态
docker ps -a
如上图所示可以看到ctfd_frpc_1这个容器的状态是一直在重启。
先查看一下ctfd_frp网络
docker network inspect ctfd_frp
这个时候只有ctfd_ctfd_1这个容器是在ctfd_frp网络里的。
配置frp网络
现在指定文件到指定目录下:
docker network connect --ip 172.1.0.3 ctfd_frp ctfd_frpc_1
docker network connect --ip 172.1.0.4 ctfd_frp frp-docker-for-ctfd-whale_frps_1
然后重启一下这两个容器:
docker restart ctfd_frpc_1 frp-docker-for-ctfd-whale_frps_1
重启完成之后再查看一下ctfd_frp网络
docker network inspect ctfd_frp
最后查看状态,发现ctfd_frpc_1没有一直重启,就安装完成了。
部署whale
登陆网页,进入admin后台,在插件中打开whale
此图是网上复制的,参考意义,如果出现访问权限问题,那么你一定要检查重新配置,基本上都是配置或者添加题目出现问题。
属性 | 配置 |
---|---|
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 | 单位为秒 |
其中Frp config template配置内容如下:
[common]
token = randomme
server_addr = 172.1.0.4
server_port = 6490
pool_count = 200
tls_enable = true
admin_addr = 172.1.0.3
admin_port = 7400
添加第一题
添加题目注意事项:Docker Image
写镜像名称;Frp Redietct Type
写镜像里面的指定端口号:
初次加载的时候会很慢,因为需要去仓库里面拉代码,可以通过docker images 看到历史的题目。第一次加载的时候看看容器状态,如果启动了,在系统里面销毁靶机,等容器结束之后再重新启动,这样再访问,大部分环境都是可以的
最终结果展示
复制启动的地址到URL里面访问
Comments | NOTHING