强网杯 2022 线下赛游记
由于疫情原因(?),队里貌似没什么人愿意去决赛,最后好不容易才凑出四个人。
2022/8/18 Day -1
我订的是上午十点多的火车,大概在下午两点到达了郑州东站。感觉在火车站打出租车的体验十分良好,排队没花多少时间,直到我上车发现两件事情:
- 郑州东站是离酒店最远的火车站
- 这里的出租车比我想象中贵不少
司机开车左突右闪,仿佛赶着投胎,导航疯狂提示严重超速,令人心生恐惧(
总之平安到了酒店,好像第一次免费住这么豪华的酒店。
下午在 WSL 里面装了 docker,因为对 Web 安全毫无概念,决定使用 pikachu 进行亡羊补牢的伟大工序,鏖战两小时后发现毫无效果(
晚上在酒店里吃 “商务简餐”,然而实质上就是盒饭。
吃完饭回来,我稍微写了一点 LUG 的新生活力课程讲稿。写到一半,Lstar 提议说联机糖豆人,然而我死活连不上游戏服务器,于是就变成了他们三个联机了。我受到现场气氛的感召,将工作(指新生活力课程)抛在脑后,打了一会 MHW,好像还玩了一会 Rewrite。
到了大概十二点多,我困了,就去睡觉了。
2022/8/19 Day 0
上午九点,Lst4r 跟我们说好像有电视台的给他打电话,说有拍照环节。于是我们下楼去拍了照片,感觉非常智障,还要我们喊口号,我们商议了一下,最终决定把校训喊出来,可以说是中气不足。
下午我好像在对着 pikachu 补习 Web,写了几道题,意识到这似乎完全没有任何用处。
晚上 Lst4r 提议出去吃河南烩面(决赛有个队伍就叫这名字)。我之前从来没吃过烩面,端上来之后发现是宽面,但我好像更喜欢细面一点;然后我们还吃了一点羊肉串,感觉不错。然而吃着吃着,主办方突然说环境测试七点截止,于是我们赶紧回去测试。然而测试感觉也没啥意义,我们接了根网线,确认能够连接平台,测试就算结束了。我们又找了 0x401 的大佬给我们拍了两张照片,又在那呆了十分钟,就走人了。
出来之后,我们去附近的超市买了一点吃的喝的,然后就回到了酒店。回来之后,我并没有做什么事情,打了一会 MHW,玩了一会 Rewrite,就睡觉去了。
有一天我把腰扭了,静流要帮我贴膏药,结果她竟然直接往我嘴里塞,我立刻明白过来她以为是内用,于是我赶紧大喊:“外敷!外敷!”
2022/8/20 Day 1
比赛大概是九点开始,我也忘了我那天是什么时候起床的了。
到了比赛现场,我们开始部署工作环境。部署到一半,工作人员给每个队伍都发了一个路由器(怎么又是路由器)和一个 U 盘,U 盘里面是所有 RW 题的附件。看到这个路由器,联想到前几年的固件题目,我们不禁心生恐惧。
主办方给的网线接口是通外网的,但是同样是在比赛开放之后才通网。我用这个满身是洞的路由器配了一个毫无意义的 WLAN。
九点比赛开始了。上来 KoH 放了两道题,brealid 和 Lstar 看到 hashrsa,发现可能跟 crypto 有点相关,非常激动,他们很快就交了份 exp 上去,并且靠一个天选随机数站了一会第一,拿到了一血,整了个实体 flag 回来。
EastXueLian 应该在看那个跟 Shellcode 有关的 KoH,似乎是要求交一份能够在各种架构上正常运行、并且能够读取当前文件夹下的 flag
文件内容的 shellcode,架构种类越多排名越高。我怎么觉得 Defcon 出过类似的题目。
我则在看 Totolink,这就是那个路由器对应的 Real World 题,400 * 3 的分值彰显着它签到题的本质。开赛五分钟还是十分钟,安恒的队伍突然把这玩意秒了,我们不禁心生恐惧。我在网上冲浪,发现这玩意一堆 CVE,但是 Github 上的现成 PoC 被删了。于是我用 Wayback Machine 在 Github 上找回了现成的 PoC。但我压根没打过 Real World,当时也没看懂题目描述,就以为要挂黑页才算挑战成功,就跟黑页搏斗了两个小时,最后上台的时候发现只要 RCE 一个 nc -l -v 8888
就行,剩下的都是节目效果(
经过一番波折(感谢 Lstar 拯救了我的社恐),下午 Totolink 这题被搞掉了。接下来,我们发现 RW 的 CMS 这题有很多人做,就一直在看。这是一个拿 PHPOK 6.2 框架搭建的网站,要求挖洞上传 Webshell,并将网站首页修改成格式固定的黑页,但是这个框架的版本太新了,没有现成的作业抄,我又不会 Web,就没有再看了。
临近 Day 1 结束的时候,出了几道新的 KoH 题,其中一道好像叫 qvm,要求逆向虚拟机,并且用这个题目给的虚拟机写 shellcode 算斐波那契数列的第 n 项,n 越大排名越高;同时主办方通知说 hashrsa 明天将不接受枚举解法,并且 hashrsa 和一道我们没做出来的 KoH 题将在第二天上午 11:00 下线。
这样第一天差不多就结束了,我们的名次在 13/32 左右,实在是令人惊讶地高。然后又去吃晚饭,我已经忘了吃的是商务盒饭还是自助餐了,总之如果是自助餐的话还是挺豪华的。
晚上我跟 Web 手看了一会 CMS,还是没啥想法;另一波人在看 KoH 的 minsha 这一题。这一题似乎是要求提交一个能够输出自身 sha256 值的 x86_64 ELF 可执行文件,他们在进行旷日持久的优化。八九点的时候,Lstar 让我帮他看看 qvm,我就开始帮他看,发现情况比他逆出来的部分复杂很多,我就接手继续去逆了。
就这样大概弄到一点半,CMS 没啥进展,但虚拟机我逆完了,感觉这个 I/O 和内存分配实在是诡异。我代码水平极差,不会写 exp,于是就写了个虚拟机的 Markdown 说明文档,丢给了 brealid 和 Lstar。brealid 展现出 OI 人的气魄,开始狂写。
到凌晨三点钟,我感觉没我啥事了,就去睡觉了。
2022/8/21 Day 2
早上迷迷糊糊起来,Lstar 跟我说 brealid 已经把 qvm 那题写到了 int 允许范围的最大值(n = 46),我就感觉这题能拿点分了。
开场之后,我们把 qvm 的 exp 打出去,发现我们在第 4 名左右的位置(具体名次记不清了)。Redbud 打出了 n = 1500 的记录(之后问了高大佬,不出所料,是 mcfx 搞的,他也不清楚 mcfx 具体写了什么,不知道是不是什么矩阵快速幂 + 高精度之类的),拿下了第一,后来貌似长亭的大爷也打出了正解,但其他队伍表现就比较平常,像 0ops、AAA、eee 这样的强队好像也没有做正解,只是做了一些简单的特判和打表。
我们在这个排位上持续了一段时间。后面 brealid 本来打算打打表的,但是“汇编器”(感觉叫翻译器更加合适)写得有点简陋,条件判断不太好写,他就开始着力去写“编译器”(我也忘了他写的是啥了)了。
这个时候 EastXueLian 在看虚拟机逃逸,据他说洞似乎很好找,但不太好用;而现场另外的三个人一致认为 RW 已经没法做了,连 Web 中最简单的 CMS 都做不出来,还不如把所有战力全部投入到 KoH 里面(事实证明了这一决策的正确性)。
我试图接手 minsha,结果发现连编译都成问题,就作罢了。
之后 KoH 又放了两道新题,一道 maze 一道 money,maze 是写走迷宫的 shellcode,shellcode 长度越短排名越高;money 是 Lstar 擅长的区块链题,他就开始配环境搞这题,并且一直维持在第 3/4 的排名,恰了不少分。我和 EastXueLian 去看 maze,发现长亭的大爷打出了 24 Bytes 的逆天玩意。我们经过讨论后一致认为这是用了 socket 将远端的地图搞到了本地跑结果,再上传到远端,但是自己没法复现出来。我们又试图写一点东西来骗分,结果发现连骗分的东西都写不出来(
午饭仍然是“商务盒饭”,甚至是夹生饭,差评!
就这样磨到下午三四点,我们的排名在 15/32 左右反复横跳,而前 16 名是二等奖。我们的 KoH 形势不算乐观,在剩下的五题中,我们有一题 maze 写不出来,三道题只有 1 分,只有区块链还在撑着。突然,brealid 把“编译器”写了出来,开始骗分。中间磕磕绊绊,我们的 qvm 题又回到了全场第四名的位置(OI 爷 Orz)。接下来我们的排名仍然在浮动,但是到 4:30 的时候,RW 题的排队通道关闭,KoH 由于是按轮次计分,排名基本上没什么悬念了。
最终,我们以 RW 几乎垫底、KoH 全场第七的成绩拿到了 15/32 的名次,获得了线下赛二等奖,恰到了烂钱。
晚上跟高大佬和 V1me 学长面基,跟涛哥吃了顿好的,回去打了会 Rewrite,就睡觉了。