介绍
一个Java动态靶机镜像构建模板,用于CTFd搭建构建动态靶机镜像,本篇以2021年东华杯ezgadget作为例子
项目地址:https://github.com/LxxxSec/CTFd-JavaWeb-Template
随缘更新~
演示
docker镜像:lxxxin/dhctf_2021_web_ezgadget


如何使用
镜像构建
首先将本项目clone下来
git clone https://github.com/LxxxSec/CTFd-JavaWeb-Template
进入Template目录
cd Template
目录如下:

其中_files文件夹内存放了三个文件
flag.sh:设置动态flag的脚本start.sh:启动JavaWeb的脚本flag:flag文件
其中src文件夹内存放jar包

使用时,放入替换src目录中的jar包
然后修改Dockerfile文件中的jar包文件名,并且根据自己的Tomcat等Web服务器端口情况开放

同理,修改_files目录下的start.sh的jar包文件名

进入到Template目录,使用下方的命令构建镜像(最后的点号不要漏掉!)
docker build -t 你的昵称/镜像名称 .
构建完成后,建议本地启动验证一下,防止push到dockerhub后有错:
docker run -it -d -p 本地端口:JavaWeb端口 你的昵称/镜像名称
进入本地镜像:
docker exec -it 容器ID /bin/sh
首先在浏览器验证JavaWeb是否能够正常运行

然后进入容器执行cat /flag

如果返回为空即正常
因为CTFd动态靶机是通过传入环境变量$FLAG实现动态flag的效果,本地因为$FLAG为空,经过替换后自然为空
接下来把镜像push到docker hub即可
docker push 你的昵称/镜像名称
CTFd部署
首先当然需要一个CTFd动态靶场平台,搭建流程可以参考这个链接:https://www.xiinnn.com/article/33b63ea2.html
然后进入后台创建题目

选择动态镜像

分数根据自己需求即可,主要是下面三样设置,一定要配置好,容器内部端口不可以错

搭建完成后,不出意外的话,就可以访问了!

可以进入自己的云服务器题目对应的容器,动态flag也就生成啦!

TODO
- 对文件夹的权限没有控制好,这个到时候修改
- 争取支持更多的JavaWeb中间件
交流群
有什么问题可以在群里提问,大家一起帮忙解决啦~

