介绍

一个Java动态靶机镜像构建模板,用于CTFd搭建构建动态靶机镜像,本篇以2021年东华杯ezgadget作为例子

项目地址:https://github.com/LxxxSec/CTFd-JavaWeb-Template

随缘更新~

演示

docker镜像:lxxxin/dhctf_2021_web_ezgadget

Java动态靶机镜像构建模板 - 图1

Java动态靶机镜像构建模板 - 图2

如何使用

镜像构建

首先将本项目clone下来

  1. git clone https://github.com/LxxxSec/CTFd-JavaWeb-Template

进入Template目录

  1. cd Template

目录如下:

Java动态靶机镜像构建模板 - 图3

其中_files文件夹内存放了三个文件

  • flag.sh:设置动态flag的脚本
  • start.sh:启动JavaWeb的脚本
  • flag:flag文件

其中src文件夹内存放jar包

Java动态靶机镜像构建模板 - 图4

使用时,放入替换src目录中的jar包

然后修改Dockerfile文件中的jar包文件名,并且根据自己的Tomcat等Web服务器端口情况开放

Java动态靶机镜像构建模板 - 图5

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

Java动态靶机镜像构建模板 - 图6

进入到Template目录,使用下方的命令构建镜像(最后的点号不要漏掉!)

  1. docker build -t 你的昵称/镜像名称 .

构建完成后,建议本地启动验证一下,防止push到dockerhub后有错:

  1. docker run -it -d -p 本地端口:JavaWeb端口 你的昵称/镜像名称

进入本地镜像:

  1. docker exec -it 容器ID /bin/sh

首先在浏览器验证JavaWeb是否能够正常运行

Java动态靶机镜像构建模板 - 图7

然后进入容器执行cat /flag

Java动态靶机镜像构建模板 - 图8

如果返回为空即正常

因为CTFd动态靶机是通过传入环境变量$FLAG实现动态flag的效果,本地因为$FLAG为空,经过替换后自然为空

接下来把镜像push到docker hub即可

  1. docker push 你的昵称/镜像名称

CTFd部署

首先当然需要一个CTFd动态靶场平台,搭建流程可以参考这个链接:https://www.xiinnn.com/article/33b63ea2.html

然后进入后台创建题目

Java动态靶机镜像构建模板 - 图9

选择动态镜像

Java动态靶机镜像构建模板 - 图10

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

Java动态靶机镜像构建模板 - 图11

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

Java动态靶机镜像构建模板 - 图12

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

Java动态靶机镜像构建模板 - 图13

TODO

  • 对文件夹的权限没有控制好,这个到时候修改
  • 争取支持更多的JavaWeb中间件

交流群

有什么问题可以在群里提问,大家一起帮忙解决啦~

Java动态靶机镜像构建模板 - 图14