PicoCTF除了每年举办比赛,还提供了一个提供其历年比赛真题的在线平台。通过这个平台,学习者可以在熟悉CTF比赛题目的同时,了解各种信息安全的知识点。图1-1所示为PicoCTF网站首页。
图1-1 PicoCTF网站首页
初次使用PicoCTF时,需要进行注册。其注册页面如图1-2所示。
图1-2 PicoCTF注册页面
注册成功之后,返回首页就可以看到PicoCTF提供的多种功能,如图1-3所示。
图1-3 PicoCTF提供的多种功能
PicoCTF将所有题目分成了多个大类,这其实也是几乎所有CTF比赛都会采用的方案。因为“术业有专攻”,一个人不可能同时精通所有的网络安全知识体系,所以CTF比赛几乎都以团队形式参赛,由团队成员分别解答自己擅长的题目。
目前PicoCTF已将历年的所有题目进行了分类,如图1-4所示。
图1-4 PicoCTF的题目分类
由图1-4可以发现,这些题目被分成了Web安全、加密、逆向工程、取证、通用技能和二进制渗透6种类型。
● Web安全:图1-4中的Web Exploitation,指通过对Web应用程序进行分析和利用来获取敏感信息或实施攻击的过程。在Web安全的CTF比赛中,参赛者需要了解各种Web开发知识和漏洞。
● 加密:图1-4中的Cryptography,指将信息转换为不可读形式的过程,以保护其机密性。在CTF比赛中,加密通常涉及解密隐藏的信息或破解密码算法。在加密的CTF比赛中参赛者需要了解各种对称加密和非对称加密算法,如AES、RSA等。
● 逆向工程:图1-4中的Reverse Engineering,指对软件、硬件或其他基础组件进行分析和解构,以了解其内部机制和功能的过程。在CTF比赛中,逆向工程涉及分析与修改二进制文件、反汇编和调试程序等任务。
● 取证:图1-4中的Forensics,指通过收集、分析和保护数字证据来解决计算机犯罪案件的过程。在CTF比赛中,取证涉及分析给定的数据集,以找到隐藏的信息或解决给定的问题,参赛者需要了解数字取证的基本原理、取证工具和技术,如文件恢复、日志分析和内存取证。
● 通用技能:图1-4中的General Skills,是PicoCTF为新手提供入门用的技巧教学题,包含各种CTF比赛中经常用到的技能,包括编程、网络分析、操作系统知识和漏洞利用。这有点像其他CTF比赛中的Misc(杂项),但是PicoCTF中的此类题目普遍比较基础。
● 二进制渗透:图1-4中的Binary Exploitation,指对二进制程序进行分析和利用以获取敏感信息或实施攻击的过程,对应其他CTF比赛的PWN题目。在CTF比赛中,参赛者需要分析给定的二进制文件,理解其功能和漏洞,并开发相应的漏洞利用技术。
PicoCTF的练习界面十分友好,可以通过搜索框直接查找自己感兴趣的题目。例如,要搜索与Java有关的题目,可以使用直接搜索关键词“Java”,如图1-5所示。
图1-5 使用搜索框查找与Java相关的题目
PicoCTF练习界面的左下方按照赛事对题目进行了分类,如果答题者希望能够像参加真实比赛一样答完一整套题目,可以直接选择对应的年份。目前PicoCTF提供的赛事历年题目如图1-6所示。
图1-6 PicoCTF提供的赛事历年题目
对于每一道题目,PicoCTF都给出了十分详细的信息。下面以一道入门题目“Obedient Cat”为例介绍PicoCTF提供信息的方式。在题目列表中,该题的信息简介如图1-7所示。
图1-7 题目“Obedient Cat”的信息简介
如图1-7所示,这个页面一共给出了5条信息,分别如下。
① 给出了题目的分类,如本题分类为通用技能(General Skills)。
② 给出了题目的分数,一般来说,分数越低,题目越简单。但实际上并不完全如此,不同年份的题目的分数差距很大,答题者在解答不同年份的题目时将这个分数作为简单参考即可。
③ 给出了题目的名称。
④ 给出了已经解答出该题目的人数。
⑤ 给出了题目的好评度。
在图1-7所示页面中单击题目的名称,进入图1-8所示的页面。
图1-8 题目“Obedient Cat”详情页面
在该页面中给出了题目更详细的信息。
● 作者(AUTHOR)。
● 题目描述(Description):题目的详细介绍。
● 线索(Hints):题目的重要提示,同时也可能是网络安全的一个知识点。
● 下载链接(Download flag):通常是一个下载链接,或者是一个网页链接。
● 提交Flag(Submit Flag):在题目中找到的Flag可以在这里提交。
以“Obedient Cat”为例,这道题目提供了3条线索,这些线索其实也是PicoCTF的魅力所在。它们一方面给出了题目的提示,另一方面也帮助答题者更好地掌握网络安全的知识点。
这道题的第1条线索给出了这样的提示:“Any hints about entering a command into the Terminal (such as the next one), will start with a '$'... everything after the dollar sign will be typed (or copy and pasted) into your Terminal.”。
翻译过来就是“提示中以$开头的都是要执行的命令,这些内容都是应该在你的终端中输入的”。
这道题的第2条线索给出了这样的提示:“To get the file accessible in your shell, enter the following in the Terminal prompt:$ wget……”。
翻译过来就是“如果想要在shell中访问这个文件,请在终端的提示符中输入以下内容”。
第3条线索是一条命令“$man cat”。
实际上这3条线索已经给出了题目的解题步骤,显然这道题并非仅仅是测试,更多的是帮助参与者了解Linux答题环境及其常用命令,接下来只需要在Linux操作系统中完成上述操作。
除了使用自己的Linux操作系统,如Kali Linux 2(推荐使用的CTF答题环境),PicoCTF也提供了一个网页版的Linux答题环境供答题者选用。在答题页面中,单击右侧的“Webshell”按钮即可进入该Linux答题环境,如图1-9所示。
图1-9 答题页面的右侧的“Webshell”按钮
使用网页版Linux答题环境前,需要先输入答题者在PicoCTF的用户名和密码。输入正确的用户名和密码后的Linux答题环境,如图1-10所示。
图1-10 PicoCTF提供的Linux答题环境
接下来使用该环境来解答“Obedient Cat”这道题目。首先,在Linux答题环境下输入第2条线索给出的命令,下载Flag文件,如图1-11所示。
图1-11 在Linux答题环境下下载Flag文件
然后,输入第3条线索提供的命令“man cat”。此时系统将给出cat命令的详细使用说明。其实这道题并不是在考试,而是在帮助答题者在实践中掌握常用的Linux命令cat。
之后可以按“q”键退出cat的说明页面。cat是Linux系统中的常用命令,主要用于对文件进行操作。例如,用cat命令显示文件内容。
$ cat filename
上述命令将显示指定文件(filename)的内容。
最后,在Linux答题环境下输入下面的命令,查看刚刚下载的文件。
$ cat flag
成功得到这道题目的Flag,具体如下。
picoCTF{s4n1ty_v3r1f13d_2aa22101}
值得注意的是,PicoCTF比赛中大部分Flag是类似于picoCTF{*******}形式的字符串。
在获得Flag之后,返回“Obedient Cat”题目的详情页面,将Flag的值添加到文本框中,如图1-12所示。
单击“Submit Flag”按钮之后,就可以看到系统提示答题者获得了对应的分数。在系统的题目列表中,已经完成的题目会变成灰色(见图1-13)。
还有一点需要答题者注意的是,从PicoCTF 2022开始,大部分Web题目有了时间限制(见图1-14),不过即使时间结束,答题者也可以答题,只是Web环境需要重启。
图1-12 提交Flag
图1-13 完成的题目会变成灰色
图1-14 时间限制