全网最简单的GZCTF平台web题目动态FLAG实现

06-01 1364阅读

在CTF比赛中,WEB方向的题目常常因为静态FLAG的存在而容易被作弊者利用。为了防止这种情况,动态FLAG成为了一个重要的解决方案。然而,市面上的动态FLAG实现方法大多复杂,需要编写脚本或拉取GitHub上的Docker镜像,这对于新手来说并不友好。本文将介绍一种全网最简单、最高效的GZCTF动态FLAG实现方法,适合那些想举办自己的比赛但又不清楚如何防止WEB方向题目作弊的人。

什么是动态FLAG?

动态FLAG是指在每次用户访问题目时,FLAG的内容都会发生变化。这样即使有人通过某种方式获取了FLAG,也无法在其他时间或其他用户身上使用。动态FLAG的实现可以有效防止作弊行为,提高比赛的公平性。

为什么选择GZCTF?

GZCTF是一个轻量级的CTF平台,易于部署和使用。它支持多种题型,包括WEB、PWN、RE等,非常适合小型比赛或个人练习。通过GZCTF,我们可以轻松实现动态FLAG功能,而无需复杂的配置和脚本编写。

GZCTF平台安装教程>>GZCTF 平台 一键安装完整教程-CSDN博客

一.平台创建题目

在GZCTF中创建web方向题目包括静态容器和动态容器,这里主要讲解动态容器。

1.创建题目

新建题目,选择动态容器

全网最简单的GZCTF平台web题目动态FLAG实现

点击编辑附件及flag按钮即可编辑动态flag

全网最简单的GZCTF平台web题目动态FLAG实现

这里以flag{[GUID]}测试,其他形式的flag页面有说明

二.动态FLAG的实现方式

在GZCTF平台中内置了一个环境变量'GZCTF_FLAG',这个环境变量会存储动态FLAG

官方文档:Dynamic Flag - GZ::CTF

常规方法包括创建一个flag.sh替换字符

#!/bin/sh
sed -i "s/flag{testflag}/$GZCTF_FLAG/" /var/www/html/index.php
export GZCTF_FLAG=""

或者手动编写动态flag生成规则,都非常麻烦

最简单的方法是直接在后端内获取这个环境变量,以下是web方向一些环境的获取环境变量的语句

php:

getenv(''); 

python:

import os os.environ.get('') 

Node.js (JavaScript):

process.env[''] 

Ruby:

ENV[''] 

Go:

os.Getenv('') 

Java:

System.getenv('') 

三.创建镜像

写一个小型题目作为实验测试,使用php环境

目录如下

web/
├── Dockerfile
└── src/
    └── index.php

Dockerfile

# 使用 PHP 7.4
FROM php:7.4-apache
#复制文件
COPY src/ /var/www/html/

index.php

 

运行以下命令创建镜像

docker build -t test .

全网最简单的GZCTF平台web题目动态FLAG实现

创建完成后在平台输入镜像名称,之后创建并访问测试容器

全网最简单的GZCTF平台web题目动态FLAG实现

像我一样直接返回动态FLAG即为成功🆗

总结

通过直接在后端获取环境变量,我们可以非常简单地实现动态FLAG功能,而无需复杂的脚本或Docker配置。这种方法非常适合新手使用,能够有效防止WEB方向题目的作弊行为。希望本文能帮助到你,祝你的CTF比赛顺利进行!

如果你有任何问题或建议,欢迎在评论区留言讨论。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码