GZ出题——动态flag
0x00 项目一览
基本目录一览:
目录结构:
- your_term
- src
- 你的题目
- files
- start.sh
- flag.sh
- Dockerfile
0x01 两种方法
法一 · 直接输出flag
这个方法适用于:你希望写题的人在完成条件后直接输出flag。
src目录
src
目录下是我们的整个题目源码,大家写了PHP留言板项目后对PHP项目并不陌生。
你需要在src目录输出flag的文件里写入:
1 | echo getenv('GZCTF_FLAG'); |
files目录
start.sh和flag.sh的内容都如下:
1 |
Dockerfile文件
源码如下:
1 | FROM ctfhub/web_httpd_php_5.6 |
法二 · getshell
这个方法适用于:你希望写题的人要getshell并cat /flag。
src目录
只要给出能执行系统命令的点就可以了。
files目录
start.sh
1 |
其实start.sh用来初始化题目配置的,比较灵活,只是我们刚接触出题,不用搞太麻烦。
flag.sh
1 |
|
大家可以理解一下这段指令的意思,并不复杂:
创建flag文件并写入环境变量里的flag,再清空环境变量里的flag。
Dockerfile文件
源码如下:
1 | FROM ctfhub/web_httpd_php_5.6 |
0x02 调试
不能只让wells来调试,我们在自己的Docker Desktop上调试
第一步:上传镜像
打开Docker Desktop(先挂后台)
在整个项目下打开cmd,输入拉取镜像的命令,推荐使用小猫代理的cmd到达该目录并执行:
1 | docker build -t my-image-name . |
如下图步骤:
镜像上传成功
第二步:容器配置
打开下图的按键(必须是题目镜像)
在下图修改容器的各个配置:
容器名字和端口自己设置,但是端口有时候不行是因为端口被占用,比如端口:8888。
上图设置环境变量:GZCTF_FLAG
,就和我上文从环境变量里拿取flag的教程对接了。
最后访问容器,验证题目逻辑是否有误,flag能否正确显示。
0x03 小结
希望大家都学会上面的三块内容。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 山 · 水!
评论