Background

看一些师傅们总困扰不知道怎么出一道比较好的CTF题目 给一些比较重要的比赛或者是学校的新生赛,我本身出题经历还算丰富 我这里给出一些我平常的思路和建议
我对好题目的定义 能学到新思路/涨知识/不被恶心到。

中策-新瓶装旧酒

如题,但我不觉得他是一个贬义词,比如你知道pickle反序列化漏洞这个考点,但是如果直接就放在比赛上,因为点实在是太过明显,可能难度不够,或者是没有很好的考察选手对题目的理解,那你也可以进行一些cms审计,发现某些cms中的漏洞然后放在比赛中,这个难度就会稍微提高不少。我举个例子,可能python的cms并不多,你就可以考察入手一些机器学习常用的库比如numpy,pandas numpy 的 load 函数中判断如果 allow_pickle 为 True,则调用 pickle.load 函数,在 pandas.read_pickle() 函数中,也会走 pickle.load()。这种很适合出在新生赛让新师傅们好好学习分析,那么我推荐一个我学弟出的比较不错的题目叫bottle poem 可以去体会他出题的思路。

上策-旧瓶装新酒

那这个就是比较常见的目前各大比赛的出题思路,也就是更有意思点的东西,比如MSSQL在某个版本新特性的一种绕过方式,又或者是Twig模板高版本可能导致的SSTI,这种通常需要出题人有一些储备,他看过和具体分析过源码和漏洞来找到的姿势,我举一个例子 就以twig模板为例子,你随便百度

{{["id"]|map("system")|join(",")
{{["id", 0]|sort("system")|join(",")}}
{{["id"]|filter("system")|join(",")}}
{{[0, 0]|reduce("system", "id")|join(",")}}
{{{"<?php phpinfo();":"/var/www/html/shell.php"}|map("file_put_contents")}}

能找到一堆这种poc,师傅们基本都知道原理 比如map sort filter reduce 基本都是过了php的array_map array_sort..
然后会造成一个回调函数,所以能调用system函数来执行rce,那么好了 我现在就ban掉这些你该怎么办呢?
我们以一个做题人的视角
1.可能你的过滤方法有问题
2.文档里可能有新的特性
3.源码里有新的操作的函数
那么我们回到出题人的视角,做到避免1 然后2和3自己去进行分析查找,如果你觉得这个点太简单了,那么继续串一下模板的语言特性,进行一些字符串的处理啊,来丰富你的黑名单。就会出一个不错的绕过题目。除了这个以外,还有一个常见的点就是缩短长度,缩短长度这种的一般来说适合可玩性高的题目,换句话就是如果你把缩短长度作为一个考点了 那跟你预期以外的解就多了,所以需要你好好斟酌

中策-小套不算套

不知道什么时候开始,套娃这个词越来越多被提及,但是其实简单的串联,我并不觉得是一个套娃类的题目 比如SQL to RCE sql注入出后台密码 后台能RCE,这个场景在实战中是经常可见的,你觉得算套娃吗?今年r3ctf中我贡献了一道php相关的题目叫r3php 考察了小皮面板的一个CVE(sql to rce)但我觉得题目本身如果这样的话难度不是特别高,我就研究了小皮面板的发包的思路,套了一层,给了一个可控头的ssrf,在进行攻击对话时需要注入一个新的头才能使发包格式正确,我不觉得他算一个套娃,也是一个蛮有意思的题目,反而是没有其他难度的一味堆叠内网之类的题目,才算是套娃。

下策-外国的月亮也能看

你不可否认的是国外的题目是能给你一些新的场景和思路的,但是抄是没必要的,你可以把他的思路学会,然后放在你合适的场景里,比如他的思路是他自己写了个解析url的系统,但是有点问题,可以绕过/目录穿越/等读取flag,那么你参考他的思路可以自己用其他语言写一个类似的,接下来可以进行一些分析进行我们上面说的一些整理,能帮你快速出题应付一些紧急任务,那么我觉得这种CTF题不一定是坏题,在能学到知识的前提,对各种语言的代码也比较熟络,那当然这个也算是下策

上上策-体会安全研究的乐趣

这种题目一般都是储备,比如可以在博客中找我关于express tricks的一个分析,就是基于我对express框架源码感兴趣然后发现的一些潜在的漏洞利用方式,那当然题目我并没有参与,但是他被当作题目出来了,也是一个蛮有意思的思路 那包括国外有很多某个chrome的trick 用来出xsleak等等等等 这都是安全研究的乐趣了,这个严格意义上来说并不是为了出题了,可能与本文有点不相关,只是笔者的一个看法。

Summary

行文可能没有很强的逻辑感,随便洋洋洒洒写了写,只希望给大家增加点出题的思路 希望大家enjoy CTF