前言
想必大家对这次比赛的Web题目都有所不满,这件事我在比赛之中就已经知道了,而且我也在比赛中全程尽可能的去完善自己的题目,不断的放比较合适的hint,为的就是让大家有更好的参赛体验。但是还是有一些争议我有必要去解释一下。
Q&A
Q1: readflag这个是谁设定的,为什么要设置这个?
首先,这个东西我最开始遇到是在Insomni'hack teaser 2019
,大家可以去了解一下,当时我们就是已经拿到了shell,但是因为这个卡了蛮久的,错失了一血。赛后我根据它的功能自己简单重写了一个。
readflag是一个+了s权限一个读flag的程序,为的就是防止通过lfi等非预期读到flag,但这里的readflag在读flag前还有一重captcha,同时整个程序的ualarm时长特别短,需要选手通过编程来调用readflag读取flag。
为什么要设置它呢?其一就是它本质的功能,目的是为了防止非预期读flag,其二是我觉得它对于一场ctf比赛来讲还是比较有挑战的一件事,我在比赛过程中看到了各个选手尽可能的用自己熟悉的脚本语言去实现与readflag交互,这中间不免有一些坑。
说实话,设置这个我有点后悔,但有一些队伍已经拿到flag了我不好统一删掉,所以正常比赛就保留着了,但本次比赛并没有一血加成,而且有实力,有能力的队伍也都不会被这点小问题卡死到最后,目前我已经把这个程序和与该程序交互的perl脚本都在github公布出来了。但是我在赛中发现很多人一直在问为什么,而只有少部分人真正的把readflag拖下来分析一下的,其实我对这一点还是比较理解的,大家打CTF是图个乐趣,图个享受拿到flag的快感,我也有这种心态,但是我觉得我也好,大家也好,都要慢慢形成一种独立解决问题的习惯,因为很多时候我们所碰触到的bug很可能是其他人没遇到过的,有一些人就能自己慢慢去分析原因, 于是便诞生了0day,另一些人就很懒不想去分析,就更换了环境去尽可能的避免bug,于是与0day失之交臂。有点扯远了,但是这也是我对这件事的思考吧.....
总之,这种东西确实挺坑的,我也不会再用了。
Q2: 为什么996game这么刻意的加了eval?
首先996game这道题我是在比赛前一天临时出的题
(因为Web题目实在太少了),而且我本人也不怎么会javascript,更别提node了,所以题目质量不行是必然的。
我刚好给之前学校校赛(WHUCTF)出了一个misc,就是这个开源游戏通讯协议的分析。于是那天下午我就打算从这个入手看看能不能搞出Web有关的洞,发现Objectid
这个点,手动绕过bson那些检查之后我在想能不能直接进行mongo的nosql
注入,然而翻了文档,看了文法,在有限的时间内没有办法解决最后数据库会报错,于是最后心一横干脆就eval这个错误算了,然后打算看看参赛选手有没有绕过的办法。赛后我和ROIS的zsx也讨论了一下,发现了一些有意思的东西,这里就不细谈了。
所以这个eval加的确实很刻意,但没办法,请大家理解。
Q3: 为什么echohub要弄出一个栈溢出卡人
同样是因为真的有些题荒,而且我觉得这个蛮有意思的,可以让Web选手通过自己熟悉的语言取了解栈溢出以及ELF文件相关的机制和保护措施。最后又回归到Web选手的领域,想办法绕df,执行任意php代码等。
有很多人把这道题直接丢给了二进制师傅,但是我觉得没什么必要,代码完全是PHP写的,并没有用什么超出Web范围的技术和技巧,你只需要进行代码审计,找出漏洞,就这么简单。
还有一个原因就是我最近在学习二进制相关的知识,想通过出题让自己更深刻的理解相关内容吧。这里要感谢@markak @Swing 还有队内的@acd 对我二进制学习给出的一些指导。
Q4: echohub绕disable_function的方法是不是蹭热度
这里我跟大家澄清一下,我并不蹭0ctf的热度。
首先我想用这个点出题是今年年初就想好的,当时RR师傅在群里问最近有没有什么会议可以讲议题,他找到办法可以bypass df和openbasedir。我对这些比较有兴趣,就在当天又看了一下PHP,翻了一些历史的洞,发现一个持续到现在还没修的一个特性,就是ssrf打FPM,于是当算用它出一次题。
https://bugs.php.net/bug.php?id=70134
但是悲剧发生了,众所周知0CTF刚好有人也用这个点解题了, 我当时也在战队群提了一嘴这个,但是没继续尝试了。
但是题都出好了,也没得办法了,换题也没题换了,就出现这个尴尬的局面,我只能说很抱歉。(我太长时间没做Web研究了,没有新的内容分享给大家)
Q5: echohub pushdata为什么这么奇怪
这就是我写错了,抱歉,出题时间比较紧。
Q6: echohub 为什么PHP_VALUE设置disable_functions没用我还要在官方exp加入这一部分
我用这个东西生成的ssrf payload,自带的,不是我有意加的.
https://github.com/tarunkant/Gopherus
另外说一下sandbox.php设置那一大堆disable_functions没用的事,我比赛期间已经发现并当hint放出来了,这应该和上面一样,也是我的一时疏忽,抱歉了。
orz
总之比赛还算成功吧,除了差评也收到了一些好评,其实我挺感动的,因为比赛过程中我也觉得我这次题目出的太烂了......
希望自己能沉住心能发现新的有趣的东西,到时候再分享给大家吧。
echohub那题出的挺好的
写的很好,支持一下