-
-
web和pwn题的简单动态flag实现
-
发表于:
2022-11-17 15:08
16426
-
作为一个菜鸡出题人需要有一些觉悟,这周花了三天时间去研究Dockerfile的写法,主要还是为了实现动态flag,思路理顺了就会发现,原来Dockerfile和动态flag这么简单,这里直接现写两个简单的题目来演示一下。
web题,首先是需要按照常规逻辑写一个网页,这里就写一个带flag的简单网页,把flag放在源代码里,并注释掉。代码如下,保存为index.php。
1
2
3
4
5
6
7
8
9
10
11
12
|
签到< / title>
< / head>
- - flag{testflag} - - >
echo "Do u want 2 sign?? " ;
?>
< / body>
< / html>
|
接下来编写Dockerfile,各语句解释就写在后面的注释里吧,正式编写请删掉注释。
1
2
3
4
5
6
7
|
FROM ctftraining / base_image_nginx_mysql_php_56
的,包含了基础的nginx,mysql,php环境,并且会自动运行flag.sh脚本(后面会提到),本题使用php环境。
COPY src / var / www / html
复制源码到 / var / www / html就可以了,其他类型网页按照实际部署情况COPY到docker中相应目录下就可以了
RUN mv / var / www / html / flag.sh / \
&& chmod + x / flag.sh
|
我所使用的平台无需暴露端口,如有需要可以使用EXPOSE 80暴露80端口。
接下来实现动态flag,还记得上面提到的flag.sh吗,先来看一下它的代码,同样相关解释写在注释里,正式使用记得删掉注释。
PS:flag.sh推荐在linux环境下创建,否则docker build时会报错,泪的教训。
1
2
3
4
5
|
sed - i "s/flag{testflag}/$GZCTF_FLAG/" / var / www / html / index.php
index.php中的flag,这里我使用的平台为GZCTF,因此动态flag环境变量为$GZCTF_FLAG,其他平台一般
为$FLAG
export GZCTF_FLAG = ""
|
整体目录结构

接下来的操作我默认你已经安装了docker和docker-compose,并且已经docker login了
使用build命令,构建题目镜像,name为dockerhub名(自行注册登录),webtest为镜像名(自定义),"."为版本号,代表latest,也可以自定义,不过拉取时记得加上版本号
1 |
docker build - t name / webtest .
|

push到你的dockerhub镜像仓库,name为dockerhub名,webtest为镜像名
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课