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

在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.创建题目

新建题目,选择动态容器

点击编辑附件及flag按钮即可编辑动态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

<?php
  $flag=getenv('GZCTF_FLAG');
  echo $flag;
?>

运行以下命令创建镜像

docker build -t test .

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

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

总结

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

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值