写在大二上结束

Posted on Feb 5, 2022

又是很长时间没有更新博客了,前段时间各种事情比较多,没有学习什么东西,也就没办法输出成文章,寒假期间也有场 HCTF-game 再办,所以一直没法空下来,这个惯例的期末总结也是拖到了寒假快结束才开始写。回想一下上个学期,说来惭愧,感觉也没学什么东西。

无聊的大学课堂

有人说,大学的特点是上课影响学习,上个学期感觉尤为明显,与专业相关的课大概只有数字电路,形式语言与自动机,然后有个概率论算是门硬课,剩下的所有课我都不知道为什么要上,似乎完全就是浪费我时间了。不过好在这些水课老师都没怎么管,我上课的时候带个电脑干自己的事老师一般也不管,所以就当换个地方自修了,就是坐的难受一点,台上有个人在那说话稍微有点影响而已。

不过还是想批驳一下这个学期学的所谓的专业课,数字电路感觉没学到什么东西,我似乎也看不到未来能够用上的地方,有人说这是下个学期的计组的基础,我还真没研究过计组所以也不知道,不过想来计组也不可能太深,最多就是 Verilog 写个简单的 CPU 而已,数电这玩意也不会和计组有多大的交叉。说到 Verilog,,作为计算机系的学生,课堂上要求写的代码上个学期就数电一门课写了点代码,还是 Verilog 这种东西,大概是硬件相关吧,有许多奇奇怪怪的限制,反正我是到现在还没搞懂,好在不影响期末的大作业,乱七八糟写了点也就混过去了。我们班这奇怪的培养计划到处压缩课时,数字电路理论+实验课原本应该是 5 个课时,结果也压到了 3 个课时,不过也挺好,少在课堂上浪费时间,这课我确实还是不敢电脑带过去摸鱼。每周都会有一两个作业,我自然是大部分都抄了了事,期末的时候略为慌张,好在这课东西不多,考前瞄了两眼也就感觉没啥了,可惜的就是有个什么同步时序逻辑电路设计和分析的流程,有一步记飞了,导致最后两道大题都错了一步,大概飞走十分,别的乱七八糟的扣扣就只有 85 分了,好在实验分数还可以,最后绩点也还行。

然后是概率论,又是一门没啥用的数学课,这里我还真不接受有人说他有用,上课上的让我感觉回到了高中,老师每天都跟我们强调,概率论在考研数学里面占比多少多少,讲个知识点就来考研例题,也不说概率论在计算机里面有什么应用(当然我估计他大概率也不知道),自然的上课的时候我也就没听过了,和我同桌的学霸也就开始的几节课往前几排坐,后来就到最后排和我一起享受生活了,不过他课前课后还是花时间的,和我不一样,我连作业都抄他的(有时候要抄的比较多我就干脆不抄了),所以期末比较痛苦,当时是真担心挂科,所以花了不少时间两倍速速通了宋浩的概率论,速通完了之后大概了解了一下这课交了什么东西,又看了看历年的考卷,得出的总结就是我当时不学是正确的,学这玩意不就是浪费时间嘛,一方面大概率没用,另一方面就算用到的现学也没啥问题,反正真到用到了的时候肯定也忘了,反正现在让我去求个最大似然估计我应该也是求不出来的,更不要说那些枢轴变量了(想想那些基本分布我其实也不记得了)。最后勉勉强强没有挂科,哈哈哈。

还有一门自动机,这课我感觉上的挺可惜的,编译原理对于我来讲是非常重要的知识(毕竟现在暂定的未来研究方向就是主要针对 jit 引擎的浏览器安全,另外像 bpf 这样的攻击面我也挺有兴趣,虽然进展很慢),所以我是挺希望能在课堂上有所收获的,之前看了一下 CS-143 简单地入了个门,挺希望之后能够深入学习一些后端的东西,本来以为开这个课,是想对编译原理做改革,拆成前端和后端。结果上了才发现老师是想正经当计算理论课来上的。说起来自动机确实是计算理论的基石,然后这东西可以培养专业思维,但是漂亮话谁都会说,真的能不能用上这种所谓的思维和课堂上的教学能不能让学生获得这些思维,大概率是不行的。反正上课也不知道老师重点在哪,正则语言讲了大半个学期,上下文无关倒是很简略,图灵机更使一笔带过,就挺无语的。上下文无关的识别那些算法也是一个没讲,也完全没说这些东西在编译过程中有什么应用,估计班上大多数同学也不知道为什么要学这课吧,可以想象下个学期又要花大量时间在 LL,LR 那些算法上。指望下学期能教点 jit 之类的东西大概也是不可能的了。期末前还得战战兢兢地过一遍老师讲的各种转换构造方式,因为当时看了一下过去地作业简直是触目惊心,特别是 CFG 转 PDA,那个作业直接给了我 10 分(满分 100 分),我去和他争论才知道他没理解我用的转化方法(他在将转换方法的那节课正好是 SCTF 结束的那天的早八,我熬到两点才睡是真听不下去,只好通过 YouTube 大学学习了)就直接给我全判错了。正好有个同学抄了我那次的作业,然后就爆笑了。

最让我不爽的是工程经济学,从头到尾确实是没听过,期末前花了几个小时过了一下考试的时候发现确实是简单,最后考了个 87 分,感觉也还行,但是平时分居然只有 78 分,简直离谱。后来想想大概是去打祥云杯线下的那次请了假,然后好巧不巧正好那次课上做了一次课堂作业,我就属于没交的,平时分就惨了,可惜可惜。

总体来讲上个学期 GPA 是比大一下要高一点,但是也不是很高,不过有 0.7 的绩点加分,所以最后排名应该也还行,再加上上个学期比赛很多,评奖学金的时候那四十分竞赛分应该可以轻松加满,这样看来,一等奖学金应该难度不大。也算是不枉考试周那段时间的折磨吧。

下个学期专业课骤增,一些比较重要的专业核心课都开了,也没了数学课和物理课这些乱七八糟的,专业选修课我也特别挑了没有期末考的课,所以大概率下个学期考试周会比较轻松了哈哈哈。

比赛上的收获

上个学期比赛比较多,基本上每周末都有一场,但是要说收获真的挺有限的,现在国内垃圾比赛的 pwn 题都挺无聊的,一般是无聊堆题加点乱七八糟的东西,要说能学到东西,还真挺难的。一些战队办的比赛还是能看到很高质量的题目的,但是这些题都属于比较细分的方向,而且感觉真挺劝退的,就没怎么接触。让我比较惊喜也感觉比较可惜的是深信服办的“深育杯”,又出现了 JerryScript pwn,虽然比赛期间没有看,但是赛后尝试了一下复现,也实现了 oob 这些的利用,再加上 JerryScript 的代码量比较小,各个过程比较符合直觉,复现过程体验很好,可惜就是这玩意代码一变偏移就会变,所以最后还是没做到 getshell(调试改偏移什么的太痛苦了)。

最遗憾的是 SCTF 没做出来那道 kernel,毕竟到现在为止也没在比赛里真的做出来 kernel 题,想来当时简直就是近在咫尺,赛后和出题人师傅交流才知道总体的问题就是覆写了堆块的 next 指针。按理说我没理由会写到那个指针,因为要劫持的字段在指针后面,我也自然会尽量避免多覆写。但是为什么会去写嘞,因为我在分析 vmlinux 的时候定位错了调用被劫持指针指向的函数过程的执行流程中的一步,那一步里面多了一个取锁操作(实际是没有的),所以我以为需要把那个锁的字段也写成 0,这样就不得不覆写 next 指针。当时我在调试时在取锁过程中下了断点,却发现没有成功断下来,不过我考虑到的确成功的实现劫持执行流,以为是哪里出现了 bug 才导致没断下来,就放过了,真是非常可惜。而且即便是覆写了 next 指针,当时的测试虽然不能退出程序,但是通过其他的线程进行系统调用仍然不会崩溃,自然的想到了用 modprobe_path 来实现提权,结果我居然没找到这个变量的位置,以为是出题人特意关掉了(我居然没想到通过搜该变量初始值来找他的位置,赛后学长通过这个方法找到了我才知道)。SCTF 那一次参与的人很多,我很遗憾的 0 输出了,还是感谢队友的带飞,这大概也是去年协会打的最好的一场比赛了把。

上学期因为疫情和战队成员参与度、实力等各种原因,很遗憾,都没有参与线下赛,大概只有我跑了趟长春和学长一起打了一下祥云杯,这个比赛的诚意没话说,确实可以,场馆挺大气的,最重要的奖金高,而且前六的战队还送证书(打比赛送证书,确实大气)。题目质量大概由于断网等原因,不能说很难,我们第二天解题的时候靠两个异构堆 pwn 也能排的比较靠前,第一天的 AWDP 也是第一次参加,也非常感谢学长的帮忙了。线下赛断网其实挺反人类的,特别是第一天 AWDP 一道 pwn 还有一个 ARMv8 的 PAC 系列加密质量这种蛇皮指令,在学长的带领下我们两个现场通过 qemu 源码反推出加密过程,整个过程确实是血脉偾张,可惜最后时间不多了,而且我们两个都不熟悉 ARMv8 的 rop(合适的 gadgets 比较难找),写了个半成品就结束了。不过幸好是断网了,而且断的应该是挺彻底的,公平的 3 v 3 我们确实不太虚,最后运气也还行,正好第六。

CTF 比赛打了将近一年了,也感觉差不多了,低质量的比赛也准备少浪费点时间里,之后还是希望能够尽量多研究一下高质量比赛中的难题,也希望提高自己的水平,比赛中能少点坐牢。

说到高质量比赛,去年年末的时候老学长邀请我去了 Tea Deliverers,能够和大佬一起参与高质量国际赛,围观神仙的操作还是很开心的,哈哈哈。

安全上的学习

上个暑假开始学习了编译原理,感觉挺有意思的,也打算追着学长的步伐搞一搞 v8 相关的利用,比较遗憾的就是这一块的进展很慢,搞了一个学期也就是复现了一下 StarCTF-OOB,了解一下基本利用套路,然后跟着 zerodayinitiative 的博客复现了一下 CVE-2021-21220,了解了一下 jit 中的漏洞如何实现 oob 然后类型混淆。可惜就是文章中对一个细节部分没有介绍,我到现在还没搞懂,大概只能通过分析源码来完成,而 v8 的源码,唉~,真是一座大山啊。争取下个学期多少啃一点,至少把这个细节搞通。上个学期比赛比较多,平时又被各种文化课折磨,很惭愧,确实没学很多东西,下个学期还是争取多学一点。

展望未来

下个学期希望能在浏览器上面有更深入的学习,另外也准备研究一下符合执行相关的东西,同时也希望比赛期间能有更多输出。也差不多要准备暑假实习了,争取能找个合适的单位看看工业上的安全是怎么样的吧。