简介
简单介绍一下就是将GZCTF平台里自带的动态的flag显示到自己想要的位置。
教程开始
先设计一下文件夹
web下面,注释:加粗代表文件夹,没加粗代表文件
├—-web
└ ——–source
└——-|—-html
└———–|—-flag.php
└———–|—-index.php
└——-|—-Dockerfile
└——-|—-init.sh
├—docker-compose.yml
第二部分:目前只有上传github上面的
docker-compose.yml
version: "3"
services:
web2:
build:
context: ./web2 # 指定 Dockerfile 所在的构建上下文目录
dockerfile: Dockerfile # 指定 Dockerfile 的名称
image: spike/qiandao:latest # 为构建的镜像指定名称和标签,需要改成你自己 github 的名字
restart: always
设置这个文件好处就是能直接生成无需再次命名:docker-compose build
init.sh
#!/bin/sh
# 将环境变量 GZCTF_FLAG 的值写入 /flag.php 文件
echo "$GZCTF_FLAG" > /var/www/html/flag.php
# 清除 GZCTF_FLAG 环境变量
unset GZCTF_FLAG
# 启动 PHP 服务器并替换当前 shell 进程
exec php -S 0.0.0.0:80 -t /var/www/html &
# 等待 PHP 服务器启动
sleep 5
# 删除 init.sh 脚本
rm -f "$0"
# 保持脚本运行
wait
上面代码意思就是将GZCTF自带的$GZCTF_FLAG的flag值直接写入到/var/www/html/flag.php
Dockerfile
# 指定基础镜像
FROM php:7.0-fpm-alpine
# 删除默认的 web 根目录中的所有内容
RUN rm -rf /var/www/html/*
# 创建空的 flag 文件并设置权限
RUN touch /flag && chmod 666 /flag
# 将本地的 html 目录复制到容器中
COPY html /var/www/html
# 将初始化脚本复制到容器的 html 目录中
COPY init.sh /var/www/html/init.sh
# 设置权限(此时仍为 root 用户)
RUN chown -R www-data:www-data /var/www/html && chmod -R 755 /var/www/html
# 设置初始化脚本为可执行
RUN chmod +x /var/www/html/init.sh
# 暴露 web 服务器的端口
EXPOSE 80
# 以 root 用户启动脚本
ENTRYPOINT ["/var/www/html/init.sh"]
# 切换到 www-data 用户执行后续命令
USER www-data
第三部分:上传自己的源码
我下面就先举个例子,简单的将flag显示到注释里面
<!DOCTYPE html>
<html>
<head>
<title>你能找到flag吗?</title>
</head>
<body>
<?php
// 读取flag.php文件的内容
$flagContent = file_get_contents('flag.php');
// 查找文件中注释内的flag内容 (flag{} 格式)
preg_match('/flag\{.*?\}/', $flagContent, $matches);
// 如果找到flag内容,将其放入HTML注释中
if (isset($matches[0])) {
echo "<!-- " . $matches[0] . " -->";
}
// 输出页面的其他内容
echo "<h1>你看到你想要的了吗F12试试呗</h1>";
?>
</body>
</html>
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容