/myctf

A ctf competition program.

Primary LanguagePythonMIT LicenseMIT

MYCTF

MYCTF 是一个简单易扩展的CTF程序,用于举办小型比赛,基于sqlite和文本数据库。

依赖于:tornado peewee mako

支持 python3 或 python2.7

基于 FPage 生成

特性

  • 简单方便:不需要任何服务和额外配置,开箱即用。

  • 保证公平:详细的排名规则,首先按分数排名,分数相同时先做出题的人排在前面,不受字典序影响

  • 分数加值:每道题默认有5分附加分,首个解题者拿5分,第二个4分,以此类推。

使用说明

1. 开始

首先,你应该知道什么是CTF。

当你决定举办一个小比赛的时候,可以先按最底下说的办法把服务开起来。

然后登录到 127.0.0.1:9000 去注册一个账号,因为首个注册的帐号是管理员。

端口9000可以在配置文件中修改

2. 准备题目

当你大概搞明白系统是怎么回事,就可以准备题目了。

题目准备有两种办法,一种是直接编辑 ctf 目录下的题目文件,json格式。

另一种就是去后台编辑题目,我推荐这种,而且支持富文本编辑(注意并不会做过滤!管理员注意不要故意坑答题者!)。

题目的格式放在下面了,建议用之前也先看一看为妙。

3. 管理后台

进度管理:希望管理员勤按保存,因为进度不会在答题时实时保存(调试起来很方便……),save.json是保存出的文件,注意这点。

题目管理:编辑没啥可说的,当你以手动的方式在ctf目录加了一道题或者对题目进行了修改,就可以使用重新加载题目来重新读取配置。但是如果删除题目,系统中的题目不会跟着消失。这跟后台删除不同。

重置答题系统:记录清零,分数清零,所有题目重载(当然用户是保留的)。

一些截图

首页

首页

完成答题

答题完成后,题目会被标记为绿色。ccc是先完成题的用户,所以排在a11的上面,而不是按照字典序排列。

全局开题

有人完成前置题后,新的题目开放

做题

查看题目

后台

后台主界面

后台题目管理

后台题目管理

题目编辑

附录 - 题目格式

{
    "id": 3,
    "title": "问题 3",
    "score": 50,
    "key": "123",
    "depend": [],
    "depend-g": [],
    "txt": "test",
    "extra": 0
}

tips: 这个json是魔改的,在加载之前会首先替换掉换行符,所以可以在txt写题目的时候回车。

参数解释:

  • id、title:id和标题,地球人都懂,id不重复就行了。

  • score:做出这个题目可以得到的分数。

  • key:解题的flag。

  • depend:用户做了这些题,这道题才会开放(例如[1,2])。

  • depend-g:整个系统中有人做出这些题,这道题才会开放。

  • txt:题目内容,支持html标签。

  • extra:附加分值,若不写则为默认的5分

开启服务

pip install tornado peewee mako
python app.py

LICENSE

MIT

TODO-LIST

  • 自动保存

  • 后台可以扣分