史上最简单的CTFd动态靶场的搭建方法

发布于 2022-07-19  12 次阅读


史上最简单的CTFd动态靶场的搭建方法

下载解压安装包

首先下载集成的压缩包

wget http://116.62.164.167/ctfd_file/ctfd.tar.gz

image-20220720002219858

解压

tar -zxvf ctfd.tar.gz

image-20220720001757827

部署docker集群

先初始化:

docker swarm init

注意: 如果出现一下界面,说明环境里面初始过集群指令。重装或者误操作都会出现,这时候需要武力删除,执行完指令之后再执行初始化指令。

img

武力删除指令:

docker swarm leave --force

img

删除之后重新初始化docker集群,正确的结果如图:

img

将刚刚初始化的这个集群加入到节点当中,命令执行后,返回的就是节点ID了,暂时不用管这个节点ID。注意这个linux-1在后面的插件配置地方有,名称不能错。

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

img

创建docker容器

创建插件的frp容器

这个容器实现的是动态靶场容器的端口映射问题,以及创建动态容器并为动态容器分配端口的问题。

cd ctfd/frp-docker-for-ctfd-whale/
docker-compose up -d
  • 由于我已经安装好了,所以我用别人的插图

    image-20220720004550553

image-20220720004532673

创建CTFd的docker容器

cd ../
docker-compose up -d

image-20220720004723482

创建完毕之后,查看镜像状态

docker ps -a

image-20220720004757974

如上图所示可以看到ctfd_frpc_1这个容器的状态是一直在重启。

先查看一下ctfd_frp网络

docker network inspect ctfd_frp

image-20220720004838713

这个时候只有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

image-20220720005001494

最后查看状态,发现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

image-20210809194948251

添加第一题

添加题目注意事项:Docker Image 写镜像名称;Frp Redietct Type 写镜像里面的指定端口号:

初次加载的时候会很慢,因为需要去仓库里面拉代码,可以通过docker images 看到历史的题目。第一次加载的时候看看容器状态,如果启动了,在系统里面销毁靶机,等容器结束之后再重新启动,这样再访问,大部分环境都是可以的

img

image-20210809195220878

最终结果展示

img

复制启动的地址到URL里面访问

img


“缘分让我们相遇乱世以外,命运却让我们危难中相爱”