CISCN2021参赛纪行
今年的国赛是以学校名义去打的,队伍名是 fr3e,和我一个队的还有 web 狗 Dem0,pwn 佬 now4yreal 和 Wi1L
初赛
比赛时间是 5 月 15、16 号,初赛延续了以往的传统,上午 9 点到 11 点先整了两个小时的知识问答,150 道单选,50 道多选。基本一问三不知,每次做完都会怀疑自己究竟是不是信安专业的
然后是强度拉满的 22 小时 CTF(15 号 11 点到 16 号早上 9 点),当时是有事在天津,我缩在酒店里打了一天。第二天早上 9 点硬着头皮去航母主题公园参加学校的团建,人走在路上都要睡着了,但是看到了很多在舰 R 里认识的船,还被路边一个像老虎机的东西骗了 10 块钱,也是不虚此行了
具体说说 CTF 的参赛经历吧。整活还得看国赛,今年的赛制依旧发挥稳定,没有让人失望,来欣赏一下 360 定的操作手册:
三张卷子的名字也很搞:
在 b 乎上收了一张十分形象的图:
大家都调侃今年是 CTF 高考元年,喷的较为理性的有两点,作为当事人感触很深
- 阴间的放题时间及强制熬夜打比赛
- py 现象还是没有改善
作为一个超高校级划水逆向,三张卷子有 5 道 re,只会做 3 道
- 签到:忘了反正挺简单的
- golang:没有符号,恢复的脚本跑不通,没有 IDA 7.6,花两个小时找到核心逻辑。嗯,有几万次的递归,递归完会直接输出 flag,不会优化,卒
- ruby:之前接触过,把虚拟文件系统提取出来拿到 ruby 脚本,还能做
- baby.bc:这东西是啥?哦,llvm 编译的中间产物,工具链装一下,编译成 elf。IDA 分析,是一个条件更苛刻的幻方,不会算法,手填
- HMI:C# 写的工控题,modbus 协议没搞过,我甚至无法让题目中的那些仪器和观测值动起来,抬走
熬到 4 点钟实在是肝不动了,当时都放弃 HMI 在做 misc 了,没想到还整出来一道,于是直接躺平睡到比赛结束去团建(事实是提前起来补写 wp)。好在可靠的队友其他方向都解了很多题,将我抬进了分区赛,也感谢其他队的师傅们高抬贵手,py 都是点到为止(虽然最后 10 分钟的冲分场面依旧很壮观),甚至有人 py 到了作品赛的群 233
但有的师傅就没有这么幸运了
比赛规定一个学校最多进两个队,北邮包揽了全国的一二三名,导致出现全国第三无缘复赛的尴尬场面,最后天璇(成员都是研究生往上)主动退出,让还都是本科生的天枢和 Flybugs 进了复赛
分区赛
比赛时间是 6 月 26、27 两天,今年的分区赛来到了去年的决赛场所 —— 华中科技大学。不得不说,第一所网安基地还是有牌面啊,这次的比赛场地不是网安学院旁边的那个大展馆了,而是黄鹤网络攻防实验室,技术支持是绿盟
赛制的话,第一天是 CTF,第二天是 AWD
CTF 的题目难度分布着实有些迷,我一个 re,把 misc AK 了,还和 web 手一起做了两个 crypto,然后 re 只解了一道……最让我无法接受的是比赛过程中禁止使用手机,然后 re 里出了两道 apk???模拟器又装不上,调都没法调试,最后两道 apk,一道 1 解,一道 0 解,很迷
做完第一道 re,我纯静态看了俩小时 apk,决定放弃,直接打开也是 0 解的分值最高的一道 re。看了一会儿发现可以做,就是校验 flag 的逻辑比较长,它把输入分为了三段来分别检查,一通操作 + 动调后,解出前两段,抬头看时间,只剩 10 分钟,卒
第二天打 AWD,9 点开赛,先 fix(加固) 40 分钟,再互相打,不出所料平台崩了。其实在 8 点 40 左右测试环境的时候,就很难登上平台了,每次刷新需要等待的时间越来越长。9 点正式开赛,有的人能访问平台,拿到 ssh 账号密码,绝大部分的人都还在等浏览器的圈圈转,早登进平台的人把题目下下来已经开始找后门、修洞了,我们这边还在显示 您的战队已被禁赛
给绿盟现场运维反映了很多次,无果,他们选择摆烂。时间来到了 9 点半,别的队伍对于平台的访问情况有所好转,现场就我们和隔壁桌的两个队还显示被禁赛,这时候主持人来了句 “10 分钟后开放端口,选手开始攻击”,我直接绷不住了,别人都修了 30 分钟的洞,写了 30 分钟的脚本了,我连题都还没看到,你给我说 10 分钟以后别人要开始干我了???
我们再次向运维反映问题,因为其他队的网络情况恢复得差不多了,他们总算是有时间搭理我们了。然后他们说问题的原因是数据库的记录加错了,我都无力吐槽,我奶奶的数据库用得都比你绿盟明白
既然恢复正常了,那就登平台拿 ssh 上号吧,毕竟比赛还在进行,这些皮可以等结束以后再扯。等我们登上平台,又是一阵意想不到的惊喜,所有队伍的靶机 ssh 用户名和密码都是 ctf。不出意料,我们的两台 pwn 机登录密码被早就登上平台的其他人改了,联系运维重置环境又耽误了一段时间
web 这边已经炸了,靶机上全是马,于是我和队内 web 手转变策略,先只攻不防,等到得分稳定了再开始删马。因为这个时候审洞已经来不及了,所以我们上了个流量监测,开始抄流量,并套用之前准备的脚本,用别人的马种我们的马,总算是保住了一些分
那几个小时很折磨,颁奖之前对于到底能不能进决赛这件事心里也没个底,最后结果出来我们是第 12 名,前 13 支队伍都是一等奖,都可以进决赛,我们才没有找绿盟扯皮
后来和别的队交流,我和 Dem0 发现我们 AWD 时少打了一半的队,因为绿盟没有给其他队伍的靶机 ip,需要自己去扫,我们只扫了本网段的,谁知道附近网段还有靶机,这样还能进决赛属实是师傅们抬了一手
总之,这场比赛打得很糟心,隔壁桌的一个师傅打完直接哭了,他们也是被绿盟搞到 9 点 40 才登上平台。除此之外,比赛规定里写着禁止电子设备联网,现场却连个屏蔽器都没有,你是真当打 CTF 的个个都很自觉?和别的队交流的时候才知道他们在 CTF 环节网上冲浪得不要太爽,有的队在裁判组眼皮子底下上网、传题,都没被发现。他们那些队不要脸已经不是一次两次了,但为什么每次规则里明令禁止的东西,在现场监督时,却看不到承办方给予应有的重视呢?
决赛
比赛时间是 7 月 17、18 号,地点是哈工大 1 校区体育馆。早就听哈工大的同学说他们那边教室、寝室没有空调,去之前还担心会不会太热,过去之后才发现这些担心都是多余的 —— 至少体育馆和酒店是有空调的。决赛的技术支持是安恒提供的,赵总、Guoke 等大佬都在后台运维,全程无尿点,平台稳定得一 b,flag 提交接口一点也不卡,简直爱了
在学校特殊情况特殊处理后,本来本科生不能上天的我们坐飞机去了哈尔滨(机票比高铁还便宜)。16 号晚上入住后,我偷偷溜出来和哈工大的同学(之前高中一个班的)去了哈尔滨有名的金刚山烧烤店吃串,串挺好吃的,见图:
就是有点废耳朵,音响就在我头的正上方
17 号上场比赛的时候,我的右边耳朵几乎听不见声音,突发性耳聋属于是。不过无所谓,正好听不见赛场里无脑循环的两首 BGM
第一天的 AWD 挺稳的,虽然依旧难以审洞,但靠着主办方提供的流量也能做到题目全解,除了第一个小时,其他时间脚本一直在跑,分也渐渐攀升,排名在 18 附近波动
但是第一天的赛制除了 AWD,还有一个解题模式,做的是可信计算相关的题,还挺新颖。一共放了三道,只会做第一道。本来一开始看这个模式的名字我们都不想碰的,但后来我看做出来第一题的队伍越来越多,而且题目的分值很高,在安顿好 web4 之后,我就抽出身来研究可信计算
第一道是关于 blp 权限控制模型的,根据题目 pdf 的描述来补全权限控制框架,仔细读一遍题目要求再读读框架中已有的代码,理解意思之后,几行就能写出来,确实不是很难
第二和第三道是关于中间人攻击的,场景是 Alice 通过中转站向 Bob 发送加密文件,明文的文件是被一个随机数加密的,这个随机数会被 Alice 产生的公钥加密后发给 Bob,同时 Alice 也会给 Bob 发送她的公钥。攻击者扮演中间人,可以 hook 中转站的一些消息发送、接收的函数,只要能通过劫持的信息还原出明文文件,并欺骗 Alice 和 Bob,让他们认为双方在正常沟通,就能得到 flag
第二题我写完以后本地测试是对的,连上题目服务器测试死活不对,唉,只能说 GG
最后 AWD 和可信计算的分按规则加起来后,我们排到了 31 名,第一天的分数占总成绩的 70%,可以说基本奠定大局
晚上在哈工大同学的带领下,体会了一次铁锅炖,以及哈尔滨特有的正宗秋林-格瓦斯:
差点忘了中央大街的马迭尔冰棍:
第二天就是一上午的 Break & Fix,即 CTF。4 道 web、3 道 pwn,时间只有三小时。我和 Dem0 一直在看 easy_python 那道 ssti 模板攻击,很早就把 waf 绕过去,都读到题目源码和根目录下的所有文件了,我们甚至能查看 /etc/passwd 的内容,可就是无法查看 /flag.txt 的内容,想尽一切办法恢复被剔除的 subprocess 模块,但似乎恢复了还是不能直接读 flag,然后那道题果然到最后还是 0 解……
break 环节结束时,队里的 pwn 佬出了一道,然后我们 fix 把 easy_python 和出的那道 pwn 修好了,第二天的排名挺靠前的,奈何第二天的成绩只占 15%,终究只使得我们在总排名上较第一天前进了一名,喜提国二
总的来说,安恒的比赛打得很舒服,题目质量不错,运维专业团队,32 台服务器足以体现安恒对于比赛的重视,这才叫技术支持,希望有的公司好好看,好好学
第二天晚上的话,是华为赞助的晚宴,最后有抽奖环节,三等奖是手环或智能摄像头,二等奖是 FreeBuds,一等奖是 GT2 Pro 手表,特等奖是 Mate 40 手机,我拿到的是 19 号:
然后又是 50% 中奖率我啥也没抽到,和去年的剧情一样,麻了。晚宴还没吃饱,凌晨又点了个外卖,香!
总结
这几场打下来,还是安恒支持的比赛体验更好,其实其他的安全公司完全没必要在赛程中专门拿个 PPT 来见缝插针地介绍自己,办好每场比赛,给选手们好的体验,才是最好的广告。有的公司非要和选手站在对立面,用一种爱要不要的摆烂心态来面对选手需求和质疑,我就想知道,b 乎上不挂你挂谁?
另外,AWD 我还是菜啊,一定是我流量抄得不够快,正好准备用一年时间开发一个 AWD 攻击框架,不想再当脚本小子了 555