Moxin 发表于 2025-11-13 21:01:20

【2025】题目投稿说明

# 前言

自平台创立以来,我们收到了众多小伙伴的热情投稿,贡献了大量高质量的CTF题目。随着社区的不断壮大和平台的持续演进,题库类型也日益丰富。在保留Crypto、Reverse、Misc、Pwn、Web等经典CTF题型的基础上,我们陆续拓展了多个专项方向,包括训练靶场、应急响应、OSINT(开源情报)、数字取证、工控安全,以及前沿的AI模型安全等新兴领域。

**感谢每一位参与共建的你,让我们一起探索更广阔的安全世界!**

# 投稿方式

平台中点击「投稿题目」即可进入。

![](./data/attachment/forum/202511/14/151650g3nov744a30w30xk.png)

![](./data/attachment/forum/202511/14/151721od1hdzdsmuucws1g.png)

当然,也可以在文章末尾的「阅读原文」中进行投稿。

# 投稿要求

模板: https://pan.baidu.com/s/1XNgqBB_-NqB52B393uKmfg?pwd=x2qx

## 静态题目

Misc、Crypto、Reverse等静态附件题目,需要按照上述模板要求,填写下方图片中示例文件夹的内容。

![静态题目模板](./data/attachment/forum/202511/14/152502cejwwqgajpa4gg8w.png "静态题目模板")

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

![](./data/attachment/forum/202511/14/152545jvgv564uv6vvyuvv.png)

> 题目名称:黑白之秘
> 题目描述:这个东西你一定会解答吧?
>
> 题目难度:1
> 题目FLAG:flag{test_flag}
>
> 提示信息:
> 提示1:二维码识别

**题目附件**目录中,为了防止传输过程中出现差异、文件损坏,需要打包为**附件.zip**

![压缩包示例](./data/attachment/forum/202511/14/152624q88www00kcf3ukuz.png "压缩包示例")

**题目工程文件**中放的是出题过程中重要节点的文件,比如一道Morse密码题目,我们需根据“原文”、“脚本”、“密文”进行,当然这里并不是强制要求。

**解题脚本**中放的是,这个题目如果需要自写脚本或者能够自写脚本,就建议大家放置脚本,脚本支持`.py`、`.bat`、`.sh`、`.c`等类型。

## Web题目

Web题目要求大家启用动态FLAG,这里我详细的说一下我们的动态FLAG是如何体现的,并给出几个代码示例。

我们提供了部分环境的模板,地址为:
https://github.com/qsnctf/qsnctf_base_docker_images

![环境模板](./data/attachment/forum/202511/14/152657wy5wc4mt3c3a5wwm.png "环境模板")


!(./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写入到数据库中,其实操作还是比较简单的。

![](./data/attachment/forum/202511/14/152914a5t5yqpulppy83p5.png)

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

![](./data/attachment/forum/202511/14/152947nfl0zc05ceccczlz.png)

所以直接在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下最后那个端口号。

![](./data/attachment/forum/202511/14/153034pk0izhio3mrvm003.png)


![](./data/attachment/forum/202511/14/153047gjoqxvhx3vjowpiw.png)

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

![](./data/attachment/forum/202511/14/153123ruv8kurhr81brktz.png)
一个题目,只能有一个`service`,也就是服务、数据库等应该在一个Docker中,而不是分多个Docker。


## Pwn题目

Pwn题目需要提供题目附件,如有libc需求(如ASLR地址随机化、需要Libc函数、需要Libc地址泄露等),需要提供相应的libc,否则选手将无法解题。

#### 注意事项

Pwn题目端口要指定在`10000`端口!

![](./data/attachment/forum/202511/14/153216h6fpdpm0z8xl3d86.png)

![](./data/attachment/forum/202511/14/153228mm2inifmv8c2izg8.png)


![](./data/attachment/forum/202511/14/153300fvxx4vt14x2xl0r6.png)


## 靶场题目

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

![](./data/attachment/forum/202511/14/153431z9n25a5y5ou9y2p9.png)

尽量保证最小内存,节省服务器占用,大概1G1H就够用的情况下不选择升级。

IO控制类型选择 `LSI Logic SAS`

![](./data/attachment/forum/202511/14/153440go5n24u8kmnlzzem.png)

虚拟机磁盘类型选择SATA


![](./data/attachment/forum/202511/14/153455sosonnrs8os2wcyu.png)



![](./data/attachment/forum/202511/14/153651gp7mmmmm7gmtor94.png)
推荐磁盘大小够用就行,`Windows`可以在`40-60`,`Linux`在`20-30`左右,不过看情况而定。比如有些项目就是需要大硬盘的可以忽略此条。

硬盘不要立即分配空间,此外虚拟磁盘需要存储为`单个文件`。

![](./data/attachment/forum/202511/14/153537uq5j5qfnnxpjz0qp.png)

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

接下来就可以用VMware搭建环境

![](./data/attachment/forum/202511/14/153607ifhsgszszrfgfz1s.png)


搭建完成就是导出了

导出时直接选择导出为`OVF`,在弹出的弹窗中修改后缀为`ova`即可。

密码复杂性要求:

设计靶场时,使用Windows Server安装镜像初始需要密码复杂度要求,这里可以先设置强密码。然而如果是非考试知识点内要求,请禁用密码策略中【密码必须符合复杂性要求】。

![](./data/attachment/forum/202511/14/153334yr09jhq0fb3q4950.png)

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

![](./data/attachment/forum/202511/14/153343cnspbmes5bh5zohn.png)

账户锁定策略

![](./data/attachment/forum/202511/14/153350mn8kcv0nzmc4z8kn.png)

需增加账户锁定时间为30分钟,账户锁定阈值为3次无效登录,重置账户锁定计数器为30分钟之后。

普通版本注意事项

系统无用功能(题目设计需求除外)如小娜、应用商店、Ondrive、OneNote、Office建议全部卸载,浏览器默认保留Edge,其余按题目设计按需留存、卸载。
            
页: [1]
查看完整版本: 【2025】题目投稿说明