0


GZCTF靶场从零开始搭建教程(二)>>动态Flag题目部署+本地上传Docker镜像部署

本教程根据以下内容创作

GZCTF官方文档: https://docs.ctf.gzti.me/zh
https://blog.csdn.net/qq_52820087/article/details/127851116

注: 关于动态Flag题目部署我只粗略概括, 更详细内容看上文第二篇大佬的文章, 并且下文只有web题的动态Flag部署,
没有pwn题的(问就是不会)

一. Web动态Flag题目部署

1. 创建如下结构目录(这里只做一个演示)

.
+-- src
|   +-- index.php
|   +-- flag.sh
+-- Dockerfile

接下来分别讲解每个文件的用处

a. index.php

这里简单的直接把Flag输出于页面上

<!DOCTYPE html>
<html>
<head>
  <title>签到</title>
</head>
<body>
<?php
echo "flag{testflag}";
?>
</body>
</html>

b. DockerFile

FROM ctftraining/base_image_nginx_mysql_php_56 

COPY src /var/www/html

RUN mv /var/www/html/flag.sh && chmod +x /flag.sh

上文选用了 ctftraining/base_image_nginx_mysql_php_56 来作为基础镜像, 该镜像可以自动运行flag.sh帮助实现动态Flag, 关于该镜像的更多信息可以通过如下仓库

https://github.com/CTFTraining/base_image_nginx_mysql_php_73

然后把 src 目录复制到了基础镜像环境中的***/var/www/html下, 接着把/var/www/html/flag.sh***移动到根目录下, 以便自动运行

这里再提一句, GZCTF中, Dockerfile不需要写 EXPOSE 来暴露端口, 直接在Web页面创建题目时填写即可, 如果写了反而会导致占用端口资源等问题

c. flag.sh

#!/bin/sh
sed -i "s/flag{testflag}/$GZCTF_FLAG/" /var/www/html/index.php

export GZCTF_FLAG=""

官方文档中提到, 容器采用 $GZCTF_FLAG 环境变量进行注入(通俗易懂的讲, 就是GZCTF会生成一个Flag放在 $GZCTF_FLAG 环境变量中), 所以我们只要把 $GZCTF_FLAG 放到我们想放的位置就可以了

所以就采用如上命令, 把预先留的flag{testflag}替换为 $GZCTF_FLA 的值

关于最后一句的用处, 我觉得应该是, 为了防止从环境变量中得到Flag, 从而绕过了原本题目

2. bulid镜像并push到DockerHub仓库上

a. bulid镜像

在Dockerfile所在目录下, 运行

docker build -t name/testweb .

name为dockerhub名(当然如果你不push到DockerHub上这里乱写也行)
testweb为镜像名(自定义)
"."为版本号,代表latest
在这里插入图片描述

 这里建议先学一下Docker的命令

b. 查看镜像

docker images

c. push镜像

docker login
docker push name/webtest

在这里插入图片描述

这里name/webtest记得替换, 下图框出的地址下文会用到

3. 进入GZCTF平台, 部署题目

a. 创建题目时, 选择动态容器

b. 设置容器镜像

在这里插入图片描述

容器镜像填入刚刚我们push上去的地址(即上文框出的地址, 比如docker.io/name/testweb),
服务端口根据传入的容器需求填写(即容器对外开放的端口)
剩下的参数自行决定

c. 设置Flag生成规则

点击上文界面的编辑附件及flag

如果没有需求, 直接这样也可以, 有更多需求可以查看官方文档

二. 本地上传镜像部署

1. build镜像

跟上文一样, build镜像, 看看有没有存在创建好的镜像

docker images

2. 打包镜像

docker save -o D:\image.tar name/testweb

-o后面跟着是保存路径, 其他参数执行替换

3. 打包的文件上传到服务器上

通过Xftp将tar文件上传到服务器上

4. 加载镜像

docker load -i image.tar

-i 后面跟着是.tar文件的路径

5. 进入GZCTF平台, 部署题目

跟上文配置几乎一样, 就在填写容器镜像时, 直接填

docker ps

列出来的镜像名即可(比如name/testweb)

三. 其他类型题目的部署

其他的根据GZCTF平台的提示上传附件等就可以了(有手就行)

欢迎关注订阅号催更, 接下来研究一下k8s部署GZCTF
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_39673370/article/details/140711518
版权归原作者 Haicaji 所有, 如有侵权,请联系我们删除。

“GZCTF靶场从零开始搭建教程(二)>>动态Flag题目部署+本地上传Docker镜像部署”的评论:

还没有评论