【青少年CTF】题目投稿必看说明
# 前言自平台创立以来,我们收到了众多小伙伴的热情投稿,贡献了大量高质量的CTF题目。随着社区的不断壮大和平台的持续演进,题库类型也日益丰富。在保留Crypto、Reverse、Misc、Pwn、Web等经典CTF题型的基础上,我们陆续拓展了多个专项方向,包括训练靶场、应急响应、OSINT(开源情报)、数字取证、工控安全,以及前沿的AI模型安全等新兴领域。
**感谢每一位参与共建的你,让我们一起探索更广阔的安全世界!**
# 投稿方式
平台中点击「投稿题目」即可进入。


当然,也可以在文章末尾的「阅读原文」中进行投稿。
# 投稿要求
模板: https://pan.baidu.com/s/1XNgqBB_-NqB52B393uKmfg?pwd=x2qx
## 静态题目
Misc、Crypto、Reverse等静态附件题目,需要按照上述模板要求,填写下方图片中示例文件夹的内容。

题目描述文档(根目录的**描述.txt**),请按照下述示例内容填写。

> 题目名称:黑白之秘
> 题目描述:这个东西你一定会解答吧?
>
> 题目难度:1
> 题目FLAG:flag{test_flag}
>
> 提示信息:
> 提示1:二维码识别
**题目附件**目录中,为了防止传输过程中出现差异、文件损坏,需要打包为**附件.zip**

**题目工程文件**中放的是出题过程中重要节点的文件,比如一道Morse密码题目,我们需根据“原文”、“脚本”、“密文”进行,当然这里并不是强制要求。
**解题脚本**中放的是,这个题目如果需要自写脚本或者能够自写脚本,就建议大家放置脚本,脚本支持`.py`、`.bat`、`.sh`、`.c`等类型。
## Web题目
Web题目要求大家启用动态FLAG,这里我详细的说一下我们的动态FLAG是如何体现的,并给出几个代码示例。
我们提供了部分环境的模板,地址为:
https://github.com/qsnctf/qsnctf_base_docker_images


在`docker-compose.yml`文件中,定义了容器的`image`(镜像名称)、`ports`(端口)、`environment` (环境变量)
我们这里一般需要修改的只有`image`,也就是需要修改成自己的镜像名称,比如你叫张三,题目是一个`sql`注入,你可以命名为`zs/web:sqlinjection`
#### 环境变量FLAG输出
比如,你想通过PHP读取环境变量的FALG,但是在测试过程中发现读不出来:
```php
<?php
// 这里是题目操作代码
······
// 读取env的FLAG
$flag = getenv('FLAG');
// 输出FLAG
echo $flag;
?>
```
此时需要注意,我们默认模板中的`flag.sh`文件是将FALG置为not_flag的,默认是将flag输出到根目录下的`flag`文件。
所以我们还需要改写`flag.sh`
```bash
#!/bin/sh
echo $FLAG > /flag
export FLAG=not_flag
FLAG=not_flag
rm -f /flag.sh
```
↑ 这是原来的`flag.sh`
↓ 这是改过之后的`flag.sh`
```bash
#!/bin/sh
echo $FLAG > /flag
rm -f /flag.sh
```
其实就是把`export`这一块给删了就好了。
#### 读取FLAG文件输出
其实读取flag文件什么都不需要改
```php
<?php
// 这里是题目操作代码
......
// 读取/flag文件
$flag = file_get_contents('/flag');
// 输出FLAG
echo $flag;
?>
```
#### 数据库里的FLAG
想把FLAG写入到数据库中,其实操作还是比较简单的。

我们的`docker-entrypoint`文件是先导入了数据库的`db.sql`文件,然后再执行了`flag.sh`

所以直接在flag.sh中直接操作数据库就好了。
```bash
mysql -e "USE qsnctf;UPDATE user SET password='$FLAG' where username='user'" -uroot -proot
```
#### 注意事项
在部署其他端口服务,比如`Flask`、`Django`、`fast-api`项目时端口不一致,`docker-compose.yml`文件中只需要修改ports下最后那个端口号。


`environment`中的FLAG,只是测试使用的,本地构建推荐使用
```bash
docker compose build
docker compose up -d
```

一个题目,只能有一个`service`,也就是服务、数据库等应该在一个Docker中,而不是分多个Docker。
## Pwn题目
Pwn题目需要提供题目附件,如有libc需求(如ASLR地址随机化、需要Libc函数、需要Libc地址泄露等),需要提供相应的libc,否则选手将无法解题。
#### 注意事项
Pwn题目端口要指定在`10000`端口!



页:
[1]