0x00 项目一览

基本目录一览:

image-20241017154016591

目录结构:

  • 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
#!/bin/bash

Dockerfile文件

源码如下:

1
2
3
4
5
6
7
FROM ctfhub/web_httpd_php_5.6

COPY src /var/www/html/
COPY files/flag.sh /flag.sh
COPY files/start.sh /start.sh

EXPOSE 80

法二 · getshell

这个方法适用于:你希望写题的人要getshell并cat /flag。

src目录

只要给出能执行系统命令的点就可以了。

files目录

start.sh

1
#!/bin/bash

其实start.sh用来初始化题目配置的,比较灵活,只是我们刚接触出题,不用搞太麻烦。

flag.sh

1
2
3
4
#!/bin/sh
touch /flag
echo $GZCTF_FLAG > /flag
export GZCTF_FLAG=""

大家可以理解一下这段指令的意思,并不复杂:

创建flag文件并写入环境变量里的flag,再清空环境变量里的flag。

Dockerfile文件

源码如下:

1
2
3
4
5
6
7
FROM ctfhub/web_httpd_php_5.6

COPY src /var/www/html/
COPY files/flag.sh /flag.sh
COPY files/start.sh /start.sh

EXPOSE 80

0x02 调试

不能只让wells来调试,我们在自己的Docker Desktop上调试

第一步:上传镜像

打开Docker Desktop(先挂后台)

在整个项目下打开cmd,输入拉取镜像的命令,推荐使用小猫代理的cmd到达该目录并执行:

1
docker build -t my-image-name .

如下图步骤:

image-20241017172821853

image-20241017173007727

镜像上传成功

第二步:容器配置

打开下图的按键(必须是题目镜像)

image-20241017173209528

在下图修改容器的各个配置:

image-20241017173340808

容器名字和端口自己设置,但是端口有时候不行是因为端口被占用,比如端口:8888。

上图设置环境变量:GZCTF_FLAG,就和我上文从环境变量里拿取flag的教程对接了。

最后访问容器,验证题目逻辑是否有误,flag能否正确显示。

0x03 小结

希望大家都学会上面的三块内容。