【2025】题目投稿说明
# 前言自平台创立以来,我们收到了众多小伙伴的热情投稿,贡献了大量高质量的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

!(./data/attachment/forum/202511/14/152734hygwp2q5zg22ho4d.png "Docker-Compose.yml")
在`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`端口!



## 靶场题目
可以使用VMware创建虚拟机,但是固件类型**千万注意**不要选UEFI!

尽量保证最小内存,节省服务器占用,大概1G1H就够用的情况下不选择升级。
IO控制类型选择 `LSI Logic SAS`

虚拟机磁盘类型选择SATA


推荐磁盘大小够用就行,`Windows`可以在`40-60`,`Linux`在`20-30`左右,不过看情况而定。比如有些项目就是需要大硬盘的可以忽略此条。
硬盘不要立即分配空间,此外虚拟磁盘需要存储为`单个文件`。

VMDK文件最好不要使用中文、空格这样的情况,可以在中间使用“-”连接,但是“-”不能用于开头或结尾。
接下来就可以用VMware搭建环境

搭建完成就是导出了
导出时直接选择导出为`OVF`,在弹出的弹窗中修改后缀为`ova`即可。
密码复杂性要求:
设计靶场时,使用Windows Server安装镜像初始需要密码复杂度要求,这里可以先设置强密码。然而如果是非考试知识点内要求,请禁用密码策略中【密码必须符合复杂性要求】。

同理,下方的【密码最长使用期限】42天也需关闭。

账户锁定策略

需增加账户锁定时间为30分钟,账户锁定阈值为3次无效登录,重置账户锁定计数器为30分钟之后。
普通版本注意事项
系统无用功能(题目设计需求除外)如小娜、应用商店、Ondrive、OneNote、Office建议全部卸载,浏览器默认保留Edge,其余按题目设计按需留存、卸载。
页:
[1]