前言
我又办一场CTF新生赛。
背景
直接原因
还是先从背景写起,办比赛的直接原因是,省里给学院下达了任务,要求我们在这个月办一场CTF比赛,来配合网络安全宣传周做一些宣传。今年的网络安全宣传周在9.15-21,所以我们最迟得在21号办完这个比赛,最终我们还是延续了去年的赛制,选择在周六周天这两天举行比赛。
上述这个来自上层权力的不可抗力因素,是比赛在这个时间点举行的直接原因,但这个原因对我来说并不怎么重要,这并不是我参与的根本原因。我在收到学院老师的消息后,就按协会传统完成了换届,将这个存在感不高的协会交给了学弟cry,并将举行CTF新生赛这个kpi工作也一并交给了他。
内在冲突
在当时那个时间点,我的注意力再次被内部冲突占据了。我在等待,等待学院公布保研名额,等待学院公示保研名单。一方面,我好像上岸了,不必准备秋招,不必焦虑出路了,我只需要等待,等待奇迹完整发生在我身上。但是另一方面,这使我感到荒谬,按照预期,我应该会慢慢退出地球online这个游戏——出家,流浪或者随便死在哪里。通过不行动这一行动,使环境与我对世界的理解相符,但是宇宙并没有回应我的预期,而是给了我一条世俗的道路,使我获得了保研资格。
宇宙对我预期的不回应,悖论地强化了我的预期——我们生活在一个冰冷、荒诞和无意义的世界,宇宙并不总是回应人对意义的渴求,我应该退出这样的世界。但是宇宙不回应我的方式,是用保研这样有强烈世俗意义的事件回应我,这让冲突显现出来——我对世俗意义的渴望和对终极意义的渴望之间的冲突。
前者来自教育,来自家庭、社会和国家的教育,后者产生于自我教育,产生于我对世界的探索。但是我找不到一个如同二二得四的公式能计算出自我教育>教育,或是相反的结论。自我本就不是一个具有固定本质的实体,也不存在一个灵魂深处的“真我”,自我是流动的,教育和自我教育都只是参与这个流动自我生成的因素之一。
草台班子
回到办CTF比赛这个话题,我的注意力被内部冲突占据,原本并不准备参与组织新生赛,但是协会的确没什么活跃成员,我丢给cry,cry大概率也找不到什么人手,也许只能找身边的同学,将这个比赛办成一份小组作业。我对此有些不忍,有对比赛的不忍,也有对cry的不忍,cry在去年新生赛后与我有过很多次交互,有些可以被称作意义的东西涌现在了这些交互之上,我没法直接以准备保研作为理由置身事外。(也许是因为保研与保研失败在宇宙层面同样无意义)
最终是拉上了moyuin学妹以及lucian学弟,四人组成了草台班子。
赛前
部署平台
由于今年比赛的资金来源与去年不同,今年不必写方案,也不必发公众号推文,赛前工作只是搭建比赛平台,简单宣传、出题即可。
又由于我去年做了很完整的备份,今年部署平台只需要买台服务器,把去年的备份传上去,再docker compose up -d就行了,去年的数据也都还在。
在组建草台班子,到我们开始出题中间,cry他们燃了起来,为信安协会弄了个wiki,希望能减少新生们的信息差,之后他们在群里说起了什么“为 hnu 最后燃烧一次”之类的话,我借着他们的激情写了篇解决我自己问题的文章。
出题
我在16号弄完本校保研面试才开始准备出题,在这之前的预热赛沿用了去年的原题。
我们最开始出的osint题,这块最不容易出题,去年是我舍友翻遍了他的旅游相册,才勉强出了几题。
他们三翻了一下他们的旅行相册,在群里说了一些出题思路。我也翻了我的相册,翻了一下昨天晚上通宵散步时拍的照片,找到了一张凌晨两点多,外卖小哥睡在公交站的照片,并在群里说了出题思路,让选手们找这是哪个公交站。这张图右侧有一个六沟垅地铁站的指示标志,但是这里实际并不是六沟垅地铁站,可以根据左侧的沙利文或者津市牛肉粉定位到准确位置。
后面顺着这道题,又找到了另外一张,凌晨两点多银盆岭大桥上仍然在干活的民工照片。用这两张照片水了两道osint题。
第三道osint题,尘封的轨迹,灵感来自我朋友qrw的博客文章配图,我觉得有些辨识度,就google识图找了一下,能找到是川外小铁路,再和Gemini聊了一下出题方向,决定让选手们溯源铁路历史,找到这个铁路最初为哪个工厂服务。
最后一道osint题沿用了去年的题,让他们在出题人的博客里面找flag,但是实际上可以在github上找最近的提交记录,只是我们将正确的flag放在了Lucian博客中,这让这道题难度增加许多。
其他方向的题,网络鲨鱼也沿用了去年的题,只是今年没有把flag放进数据包,并且在出题过程中灵机一动,把我的博客地址作为干扰项丢了上去。但是两位过来捧场的学长居然在我博客里面找到了有用的线索,这是我也没预料到的。
哈基米那题来自我的知乎首页,我关注的一个佛教领域答主点赞过这篇文章。web题原本准备沿用去年的题,因为时间确实不多了,周四晚上才开始出web,不过还是用cursor 水了几道。
一位已经毕业多年的学长,为我们提供了三道blockchain方向的题目,大大缓解了我们出pwn方向题目的压力。
赛中
比赛从周六的上午九点进行到周天的下午五点。
day1
原本准备使用bot来播报比赛消息,但是bot没能完成,最终还是使用了流云.bot。
day2
凌晨十二点,mufanc学长依旧半夜屠榜,拿下了大部分题目。
赛后
做题情况
比赛没有人ak,但是所有的题目都有被做出来。
审wp
交wp的人不多,这些wp里面有很多直接粘贴了ai的回复。不过也能理解,他们第一次参加CTF比赛,还没有“wp也是比赛的一部分”的观念,以及他们很大程度上还不能理解ai生成的内容,只是照着ai的回复操作,然后解决了题目。
由于绝大多数wp里面直接粘贴有ai生成的解题思路,我没有像去年一样在wp中看见活生生的人,但是这也合理,毕竟今年在预热赛时就鼓励他们使用ai来解题了。
l1uyun
这也许的确是我最后一次参与ctf了。
在准备发这篇文章时,我已完成了推免系统的流程,成功保研了本校,也许以后还有机会再办一场HNUCTF2026,谁知道呢。