32

CISCN2020线下决赛纪行

 3 years ago
source link: https://blog.kaaass.net/archives/1463
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近有点忙 ,好几篇文章写了一半都出不来。不过正好去了一趟武汉,就来写一篇流水账记录记录这次魔幻的CISCN线下决赛吧。啥也不说,YLBNB!

DAY0

签到日没什么好说的,下飞机大概一点多,基本只是签了个到然后参观了下华科。但是不得不说,华科网安学院还是真的下了很大投入的,从各方面配置上来看都堪称豪华。尤其是他们的靶场,说不酸是不可能的(

5相比之下,我们学校的只能叫机房

然后看了看场地,就回去准备第二天AWD的策略了。由于主办方前一天才通知改赛制,所以我们很多东西都没准备。晚上临时准备了一个抓流量的板子,下了几个docker环境简单配置了下,之后讨论讨论策略就睡觉了。

5暴风雨来临前

DAY1

DAY1就是正常的AWD,但是其中发生了很多事情让它变得很不正常。一开始我们队倒是挺正常,总共8个题,4web+4pwn,唯一的问题就是pwn的题号是跳着的(1、3、4,后来才知道是ylb在创新)。15分钟的修补时间都忙着上抓流量了,所以基本没什么空余时间修补,就有一个非常明显的shell。之后由于我们没有pwn手,我随机patch了一下pwn就专心在web上了。

第一波被打我记得是web3,应该是一个后门(shell.php)。重放一波的时候发现基本只有C段101~190左右有人,并且顺便找到了几个比较稳定的哥们(151~154,谢谢你们)。这样持续了几波,基本上分就正回来了。但是这几波里,ylb的作用慢慢就给到了——平台交flag要验证码,而验证码真的太TM难懂了!且不论随机的背景颜色和字体颜色,它用的验证码字体真的太难看出o0OilLIxXwWcC了,而且它还开了随机字符大小,整个验证码的阅读就是灾难,基本都需要随机个两三回才能找到清楚的。

5某队师傅随机出的究极验证码

而且不仅是内容阴间,这个验证码的判断也很阴间。一开始我就好奇,有时候前端反馈正确的验证码为什么提交之后才提示错误。结果赛后师傅们说,原来它前端校验是忽略大小写的,而后端校验则是不忽略大小写的。这样的验证码识别体验真的是差到离谱。而由于我是负责攻击的,好几轮我都抽不出时间来做任何其他操作,而且就这样频繁提交,每轮还是会多出好几个flag。

之后又拿到了个web4的payload,是一个eval。而跑web4的时候,交flag真的演变成了灾难——由于只有我攻击,所以只有我在交flag。web3的flag本来就已经交不及了,现在还多了个web4。后来实在交不动了,于是拉@BadMonkey佬来当外援帮忙交web3。但是坑爹的是ylb发功了,@BadMonkey佬那边根本跑不通脚本,连平台都连接不上,所以只能我一个人苦逼交flag了。最后我一个人交了将近100flag,这哪是什么网安比赛,根本就是打码竞赛。

又过了几轮,各个队伍对web3的第一个漏洞也逐渐修的差不多了,不过又截到一个ThinkPHP的漏洞(CNNVD-201812-489,所以他们到底是怎么知道的?)。差不多一个时间,我们web4也出了一个注入,@BadMonkey佬也恢复正常网络了,所以就变成两个人在交flag了。此时dxk佬发现web1、web2被种了不少不死马,而且都影响到了check,因此开始着手修理。同时,@Yesterday17佬开始做web2,到了中饭前的时候基本已经测试完成了(没错,还是拿151~154),就差个EXP。

中饭后平台已经处于摇摇欲坠的状态。此前开始逐渐出现“Flag已提交”但是不加分的问题,访问也越来越慢,到最后停赛时已经达到了半分钟~1分钟刷新一次。也许是顶不住压力,一点钟的时候ylb终于宣布停赛,暂停40分钟。此时的说辞还是,有队伍恶意攻击平台。

5虽然不是我们,但是差不多就是这样

结果,40分钟在茶歇中迅速过去,但是平台却迟迟没有复原。虽然中间突然诈尸了一下,但是到宣布恢复已经是三点左右的事情了。而ylb的处理方法又再次让我们大开眼界:后半段赛重置分数和所有队伍docker。这还没完,之后又发生了一系列灾难。先是15分钟的加固时间内,某些队伍一直可以正常攻击,而ylb的解决方法竟然是一直重置分数。然后就是,pwn的题目竟然变了!早上我们是1、3、4、5,下午变成了1、2、3、4。赛后询问发现,不同队伍的题目甚至是不一样的,真有你的YLB,AWD还能整出题目不同来。此外,自下午以来,我们队伍就再也没能重新链接到别队的服务器了。“虽然你不能防御,但是你可以看着别人打你啊~”

或许是意识到平台重启真的太多了(后面还有两次),于是比赛又一次暂停,而这一次暂停就再也没能恢复。终于我们是看到了世界名画《YLB在台上道歉》。六点之后,主办方把所有队的队长聚了一聚,开始了一波“安抚情绪”。我记得当时天枢的师傅直接给YLB问的哑口无言:你知道有多少人受影响了吗?你知道影响了什么吗?你不知道你怎么给出合理的解决方案?

YLB最后还是给了解决方案,晚上十点左右发布了新规则:DAY2采用CTF赛制。DAY1分数加权结合,使用13:04之前的成绩,但是方案待定。

DAY2

DAY2开始的不是赛题,而是一张第一天成绩的处理方案选择。商量下来给出的解决方案是,第一天成绩用13:04之前的,并且出问题的7个队伍平均分,剩下让我们选择第一日的分数权重——20%、30%或40%。因为我们DAY1打的还行(Rank20,对CTF断代重组的我校来说真的不容易了),所以我们选择了40%。

DAY2的比赛也有很大的问题。核心的问题还是各方向难度不均衡导致动态分失衡+没有网络。我们队去了2web+1crypto+1misc,而当时web与crypto的难度偏低,导致最后能获得的分数相当低。我的misc中段卡壳:由于极度缺乏参数,因此不太明白如何解一个openssl的加密文件。赛后我才知道,这是用在线工具直接加密的,如果用openssl则需要用旧版本的参数才能解。而当时我们根本没有外网,谁来给我们提供在线工具呢?我当时尝试了 openssl enc -ciphers 与秘钥算法的所有组合,结果你告诉我在线工具点一下就行。其他还有re1的risc-v、pwn1的arm这些断网环境下我们没环境的题也不想吐槽了。最终解题部分rank46,我还是认了,毕竟自己的misc没出而且也有队伍试出来了,还是太菜。

Fix环境基本没什么问题,因为问题都出在了分数。拿到成绩条,15分的Fix队均2~3分,我真的很好奇YLB是怎么Check和EXP的?合着大多数队伍就Fix了1题半呗?而且最致命的是,我们的成绩条上根本没有DAY1的成绩。我们这才知道,早上的询问根本没有意义,如果DAY2不出岔子,必然只采用DAY2的成绩。于是也不知道怎么加的,我们最终的rank是54。我们还不是最惨的,更惨的是边上的NEX,他们DAY1是Rank1啊!

总结

YLBNB!能把这种级别的比赛办成这样,公开程度、透明程度还没晚上华为晚宴的抽奖高,我还能说什么呢?到写这篇文章为止,我们都没有收到用比赛分数计算的成绩表,只有一个加权的模棱两可的结果。比赛这几天,华科的老师、志愿者敬职敬责(饭和茶歇真的很好吃),YLB对得起他们的付出吗?

不过,虽然这次比赛YLB出了很多问题,也或许如果算上DAY1我们也能捞上二等。但是一个不争的事实就是,我还是太菜了。如果说DAY1的表现还行,那我DAY2的表现完全就是拉跨——试了那么多种情况,唯独没有尝试 -md 参数。反过来想,要是我曾经做到过这样的题,我还会漏掉尝试 -md 参数嘛?平时做题太依赖网络和文档,一断网就不知所措,或许有赛制的问题,但是也肯定有我自己的问题。明年CISCN在哈工,希望能打出让自己满意的成绩。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK