总体评价

  • 课程难度:⭐ ⭐ ⭐ ⭐
  • 推荐指数:⭐ ⭐ ⭐ ⭐ ⭐

课程学习内容

先修要求:

  • 具体可以参考 Lab 0 的作业(也作为报名必交材料),个人建议至少得了解 Linux 命令和 Python 的基础语法(之后应该会写很多 Python 脚本),Web 方向建议掌握 MySQL 和 JavaScript 的基本语法,Rev 和 Pwn 方向需要了解汇编语言(如果是信安专业的话应该已经学过了,像我学CS专业的没有学很后悔,只能到下学期听小白老师的课)。如果这些都没学过也没关系,可以边做 Lab 边学(当然这比较痛苦,早点学还是有好处的)。
  • 做好心理准备,虽然给分很好(根据以往评价,目前作业上交还未截止),但是课程内容方向广、难度大,而且十分注重实践,因此需要一颗不怕折腾、敢于探索新知识的心。
  • 报名材料:戳这(我记得好像只给了一周多的时间准备材料,所以需要腾出一段时间来准备)

CTF-101 是由浙江大学 AAA 战队开设的一门短学期课程,主要讲授 CTF(Capture The Flag,夺旗赛)竞赛的五大方向的知识:Web(网络)、Misc(杂项)、Pwn(二进制)、Rev(逆向)、Crypto(密码学)。

课程持续两周:第一周是基础周,下午上课,学习这五个方向的基础知识;第二周是专题周,下午和晚上均有可能上课,自行选择其中的至少两个方向的专题,每个方向有两节课,学习进阶内容。第一天主要介绍课程大致情况以及 Lab 0 的作业讲解,最后一天请原 AAA 战队,现已毕业的学长过来作一次讲座。

任课老师

虽然课程表面上是由常瑞和申文博老师授课,但他们分别只在课程开头和结束时出面,基本上都是由 AAA 战队成员授课,每天几乎都由不同的学长进行授课(如果看到一个学长上过两次课,那证明他的实力一定很强)。各位学长都是久经磨练的“老赛棍”了,实力自然毋庸置疑,课程内容都是精心准备过的,这一点远超计院的某些课程。但是每位学长风格迥异,且有些学长是初次授课,因此教学质量参差不齐也是在所难免(如果要我上台授课,那我的表现可能更加糟糕)。尽管如此,我认为学长授课的一大好处是与我们之间的隔阂很小,大家遇到问题可以尽管向学长提问,学长们会尽其所能向你解答(前提是在问问题之前得展示自己的努力过程,参考提问的智慧)。

分数构成

  • 出勤分(5%):基础周全勤 + 专题周4次签到(每个方向两次课)
  • 基础周 Lab(55%):Lab 0(5%)+ 每个方向的 Lab 1(5 * 10%)
  • 专题周 Lab(40%):(至少)两个专题,每个专题有两个 Lab,每个 Lab 占 10%

每个 Lab 都有 Bonus(假设Lab 满分为100分,那么 Bonus 会多出15分),但基础周的 Bonus 和专题周的 Bonus 是独立、互不溢出的,所以拿高分应该还是比较容易的(目前看法,等出分的时候再确定)。

个人感受

我当初选这门课的原因很多,有在阅读图灵班学习指南的过程中发现这门“宝藏课程”,有短学期课程的宣传,也有学长的大力推荐(给的分实在太好了),而且我自己也想学一些可能在其他课上学不到的一些知识,因此我决定报名这门课。其实当初做 Lab 0 的痛苦经历曾几度将我劝退,但是可能出于自尊和想要变强的渴望,我还是挺过来了。尽管 Lab 0 没有完全完成,但我尽可能地将自己的思路写上去了,同时附上一份几乎没有什么含金量的简历,但好在“功夫不负有心人”,最终报名成功了,记得那时的我可是相当高兴呀😄。

考试周之后不就便迎来了这为期两周的课程。我还记得第一节课我特地提前半小时到教室,结果教室里近乎座无虚席,我只能坐在前排了(其实对于喜欢的课,我也挺高兴坐在前排)(但之后来的人慢慢减少,到了最后一天只来了二十几个人)。在这两周内,光是在教室里听,我就学到了很多的知识,当然课后也得花点时间学一些解决Lab需要的知识,下面简单列举一些(标⭐表示我专题周选择的方向):

  • ⭐Web:计网基础知识、SQL 注入、PHP 和 JS 相关的漏洞
  • ⭐Misc:编解码知识、OSINT、图片和音像隐写技巧、流量和内存取证、区块链基础知识(以及很多的妙妙小工具
  • Rev:深入了解汇编、编译、链接的原理,ELF文件的静态和动态逆向
  • Pwn:代码注入漏洞(Shellcode)、栈溢出漏洞
  • Crypto:古典密码学、现代密码学知识(成功将数理基础很差的我劝退)

这几个方向我比较喜欢 Misc,因为感觉比较容易上手(简单的题可以直接用工具秒了)。因为去年 Misc 简单(在上Misc 专题二之前我也是这么想的),很多人选了 Misc,结果今年就给 Misc 上点强度,新增了区块链相关的内容。但是由于是全新的内容,当时我在线下听得迷迷糊糊的,到后面基本就没在听。等到做题的时候就傻了——完成私链部署的区块链题目,但是由于智云录课效果很差(没有把大屏的实时演示录进去)+ 少录了一小时,导致我不知所措,折腾了好几天都没有搞清楚怎么部署私链。但好在过几天 xg 后来补上了区块链的视频,解决了我的燃眉之急(xg 伟大,无需多言)。

而选择 Web 主要是根据我大学一年的学习经历:数理基础差,Crypto直接 pass 掉;没学过汇编 + 我的学习速度慢,Rev 和 Pwn 也 pass 掉了;学过Web前端技术栈 + 上过“无线网络应用”的课程,于是我自然选择了 Web 方向。说来惭愧,除了上面列举过的 Web 知识,其他内容我现在遗忘得差不多了,我想暑假后半段开始自学一下相关知识,准备参加一下今年的 CTF 校赛。

总体而言,这门课不仅让我学到了很多方向的新知识,以及许多有用的工具和方法(我逼自己用 Typst 写报告,因而成功熟悉了 Typst),还让我更深刻意识到自学和实践的重要性:课上的知识固然要听,但课后不花出时间努力,那么就一定无法掌握好这门课需要学到的东西(现实点说,就是做不好 Lab)。这是一门又痛苦又享受的课,我墙裂安利!

以下是我对课程的一些小建议:

  • 课件最好统一一下,个人比较喜欢用 xg 的 reveal-md 模板做的在线课件(暑假也打算学一下)。每位学长的PPT的风格大相径庭,有些PPT可读性有些差(有字太小、逻辑混乱等问题),导致课后回顾的效果不佳。
  • 智云课堂的录屏问题,感觉是这间教室的问题,希望下次换一个更大的教室,有一个更好的录屏效果(课后看录屏太折磨啦~)。
  • 这个建议可能不太合理:希望基础周的ddl统一定为最后一个lab 1的ddl(可以将所有的报告打包在一起),专题周的每个专题的两个lab的ddl都定为后一个lab的ddl,因为我本来想在课后好好消化一下课上学到的知识,做一些笔记之类的,结果因为我担心两周后的ddl,所以就得赶lab,但是做完(甚至还没做完)一个lab后,第二天就得学新的知识,又有新的lab,这样我每天的状态几乎是“疲于奔命”,每天忙于各种滞后的lab作业,导致我到后期学习起来感觉有一种说不出的压抑感。如果按照我的建议做,我每天课后就能腾出时间先整理课上讲过的知识,之后剩余的时间做lab,时间分配更加合理,且减少了一些(可能只有我有的)心理负担,这样学习起来更有效果、更有动力。
  • 希望每天的lab能够在课后及时布置,最好稍微提前一点布置,理由类似上一条建议。

资源