0xD009
3149 字
16 分钟
迟来的逗号——强网杯S8赛后感

0x0 S7失利#

自笔者开始参与 CTF 竞赛以来,已经过了两年多。

回想笔者刚入队时,正值强网杯 S6 线下赛,还帮忙看了几眼某道虚拟机题目,虽然最后起到的作用非常微小,但听到队伍最后取得了全国第 15 名的成绩时,也跟着感到非常开心与自豪。

随后一年,笔者自身技术有所长进,也侥幸被选为了新一届的队长,切切期盼着强网杯 S7 能一展风采,然而原定 5 月就举行的比赛不知怎的一直被推迟到了 12 月中旬的周末,还正好撞上了 CET6 和两场期末考试,自然拼尽全力无法兼顾。

最终,我实际的做题时间恐怕才勉强达到比赛时长的一半,在学弟的协助下也只做出了几道解数比较多的题(谁设计的强网先锋赛道,性价比太低了),还有一道题复制密文时错位了,到比赛结束都没有发现问题,导致我们最后排行第 40 名,无缘线下赛。

赛后,我进行了深刻反思,总结了不少经验教训,稍后与大家分享。

0x1 线上赛#

话说回今年 S8 线上赛,相比去年,战队首先是规模上有所扩充了,不仅仅是人数,积极性也大有长进,新队员们也成长起来,逐渐崭露头角,整个比赛氛围与去年不可同日而语;其次,我们这些主力的老东西们参赛经验已经非常丰富,组织能力和带动能力更上一层楼;最后,主力队员大多数都已保研,大四时间和精力非常充裕。

开赛第一天,虽然包括我在内有三位队员不得不各抽两小时给河南某 211 远程授课(当然,与比赛内容无关),但通过相对合理地安排好顺序,也没有让队伍做题的节奏乱掉,得分趋势总体比较平稳,基本上每一两个小时就能解出一题来,捷报频传,这对队伍士气的提高很重要。

虽然笔者在赛程的前半段一题都没有解出来,不过有队友们的定心丸,也并不紧张,稳扎稳打,最后终于在第二天凌晨灵光一现解出了第一道题 mips,此时它的分数已经相当低了,好在其余三道高分题我也都有思路,其中两道甚至只差临门一脚了,最开始看的是 ez_vm,虽然虚拟机逻辑比较复杂,但是通过调试观察数据变化,我们也确定它应该是 AES 相关的算法,起初判定为白盒 AES ,结果因为对白盒 AES 流程理解不深刻,后面又误判为顺序魔改 AES ,因为没有坚持第一感觉而错过了一血机会,后面也没时间再看了 ,然后看的是中午放出的 斯内克 ,是逻辑非常简单的贪吃蛇游戏,但题目描述明显有歧义,一直无解,后来还放了个无用的提示,最后下架返工了,这题我们已经写好了脚本框架,就等它第二天再放出来了,晚上放出的 remem 也已经修复好 ELF 文件,有了思路,总的来说一切向好,于是心满意足地回去休息了。

大概只睡了三四个小时,又马上爬起来看题,实在不想因为时间不足而留下遗憾,第二天的新题中,一道简单的推箱子 mapp 直接交给队友了,只在最后帮了一点小忙,一道比较复杂的安卓题只拿了个 fake flag 就先战略放弃了,性价比不高。斯内克如上文所说,很快就顺利拿下,剩下一道 remem 只剩一个方程要解,于是丢给了密码手队友。

不过密码手也相当忙碌,选择去吃最后放出的一道算法 MISC 题的大分,性价比显然更高,这道题最后也成功让我们一跃成为第 13 名,完全没有了晋级之忧。

最后半小时大家其乐融融地在一起讨论怎么解 remem 的方程,不过爆破时间也不够了,最后差这道题进前十,有点小遗憾。

虽然笔者个人有两道本该能做出的题目最后没有解出来,但这已经是 Nebula 参加强网杯以来线上赛的最好成绩了,而且相比次好成绩有很大突破,比赛两天后的国奖答辩中,我也很骄傲地讲了这事。

0x2 线下赛#

时间来到线下赛,由新任的一位大二队长学弟带队,我和一位博士学长、一位新人 Puzzle Hunt 大佬一同去往郑州参赛。

我在同年的暑期参加了解放军信息工程大学的“北辰计划”夏令营,该夏令营当时组织我们参观了网络安全科技馆,包括四楼的赛博厅,也就是强网杯线下赛的永久赛址,当时一方面感到遗憾,遗憾去年没能来到这里参赛,一方面又踌躇满志,但也担忧今年再重蹈覆辙,好在最后幸不辱命。

下图为参观时拍的照片:

实际比赛时:

比赛第一天,RW 赛题的附件就让我们喝了一壶,100+GB 的文件,现场 10M 的带宽得等整整一天才能传到线上的队友那里,博士师兄当机立断,离场另寻他处,然而访遍周边,维修店、网咖,上传速度还是不够快,于是他想出了一个相当惊人的办法:把移动硬盘邮寄回合肥。这听起来很离谱,但确实是效率最高的方法了,传统派,赢!这关键的一招最后帮助我们在 RW 赛道上取得了不少分数。

笔者第一天首先在 MISC 的 AI 赛题上浪费了一些时间,最后队友发现题目中的噪声裁剪都是 1/2 裁剪,所以可以根据长宽进行预分类,然后直接像素比对,传统派,又赢!之后又在 Crypto 的 st 上浪费了一些时间,感叹这题真不是人做的,然后随手解决了下午放出的签到题 S1mpLeVM ,开始重点看 PVB ,费力巴拉写了个 IDAPython 脚本把混淆的字符串解密出来了,得到了 Bvp 的关键信息,结果队友 Linux 系统上的火绒轻轻松松就检测出这是 BVP47 后门病毒,顿时感到自己十分小丑,随后就是读它的分析报告,磕磕绊绊终于在半夜解出了 ELF ,已经有点迷迷糊糊了,没想到 ELF 里的加密逻辑还如此复杂,逆了一个小时,眼皮打架实在坚持不住了,躺在床上休息了半小时突然灵光一闪,patch 了一下之后就解密出来了,想到第一天锁榜时我们时第 8 名,正好一等奖,感到大有可为,于是安然睡去。

然而第二天格局骤变,一夜之间,很多队伍,尤其是企业队伍,突然提交了大量 flag ,然后开始疯狂排 RW ,我们的目标不得不降级为保住二等奖。10 点放出的新题 UnsafeFile 我在 12 点就解出来了,至此 AK ,接下来大家交题的节奏明显放缓,甚至出现了连续半小时都没人交题的超长空窗期,本以为能轻松保二争一,尤其到下午四点左右,密码手再次发力,不惜线下单杀本校的论文作者,使我们来到第九名,只差临门一脚。

结果随着问卷题放出,突然有不少队开始疯狂交题,想必是屯了不少,我们最后也只是堪堪保住 14 名,不过比前年前进一名,也算是再创佳绩了。

值得一提的是,我们卡点排到了 RW ,并在五点过一分顺利解出了一道题,这感觉就像看篮球比赛,吹哨后球还悬在空中,扣人心弦,万众瞩目,最终顺利入网,全场欢呼。

最后总榜:

0x3 经验与感悟#

总的来说,强网杯可以说是国内强度最高的比赛了,晚上也能继续做题,不像国赛那样,第一天的题,第二天做出来不算分,所以打强网杯是很拼耐力的,比赛第二天一定要坚持住,战战兢兢,如履薄冰,不能过度被第一天的成绩影响,小胜不骄,小败不馁,否则很容易在最后阶段被甩到后面,功亏一篑,线上赛和线下赛都是这样。

其次,战队做题氛围的营造也是很关键的,CTF 是集体的比赛,如果士气不佳,是很难打出成绩的,我们虽然没有刻意去关注这一点,但通过赛后复盘,对比战队 S7 和 S8 的不同表现,也能发现端倪。赛时切忌单兵作战,要及时跟队友讨论汇报,包括进度或者遇到的困难,虽然大家各有各的方向,但如果把一些赛题化归为通用的子问题,壁垒也就没那么高了,有时还会有惊喜,而且,及时同步进度也可以活跃起队内讨论的积极度,增强队友的信心,提高整个团队的耐力,优化全体成员的比赛体验,这也有利于队员后续在 CTF 上继续发展,根据笔者的经验,越早实际参与到重大赛事中并获得正反馈的队友,他后面能坚持下来的概率就越高,包括笔者自己。而且线下交流的效果明显比线上交流好,今年很多队友都来战队活动室一起打了,讨论氛围很好。

在其他比赛上当然也是这样,但明显地,越是强度高的比赛,对整个队伍凝聚力的要求就越高,而不能矫枉过正地将一场比赛简单解耦为五个方向,尤其是我们这种小战队,人手并没有那么充足,必须发挥好每一位队员的长处。

0x4 结语#

打了这么久比赛,今年还因为升学阶段学业繁忙翘掉了长城杯和国赛决赛,一直遗憾没能在真正的大赛中取得荣誉证明自己,所幸经此一战,终于能为自己的 CTF 生涯画上一个阶段性的逗号。它似乎来的有些迟了,如果去年就画上这个逗号,也许我过去一年的成长轨迹会有所不同,也没那么多执念,没那么多纠结了,就像今年拿的国奖也有些迟了一样。不过笔者也切实体会到了“失败是成功之母”这话的真谛,真真正正地从两次迥然不同的参赛经验中获得了经验与启发,也有了自己的思考。

笔者深知自己暂时还达不到 CTFer 的第一梯队,他们都是既有天赋又勤奋的,而且深切地热爱着安全攻防,不慕虚名,其实几乎每个相对成熟的领域都是这样,最顶尖的一批人,都是天赋+努力+热爱,而笔者在学习和探索的过程中遇到困难时,常常用“算了吧,这么难的东西,想必能学会的人肯定不多,我不用和他们那种人比”这种话来安慰自己(包括本次比赛期间),兴许暂时凭着自己的小聪明有所成就,但终有一天会达到瓶颈,沦为“方仲永”一样的人,这是笔者需要警惕的,希望自此之后,自己也能够放轻甚至放下对虚妄的名利的追求,真正扎根底层基础去学习,不当半吊子。

0x5 彩蛋#

一到郑州自动拾取就打开了,能拾的全拾嘞:

迟来的逗号——强网杯S8赛后感
https://0xd009.github.io/posts/迟来的逗号强网杯s8赛后感/
作者
0xD009
发布于
2024-12-09
许可协议
CC BY-NC-SA 4.0