究竟什么是 CTF?作为程序员,我如何为对初学者友好的人准备 CTF?

信息安全 术语 ctf
2021-09-01 05:24:42

我联系了我的一位老朋友,他在我学生时代是一个了不起的程序员,他邀请我和他的大学团队一起参加一个 CTF 活动。

这个小组似乎对初学者非常友好,对所有人都开放,但我仍然担心我在安全领域的知识还不够多,无法参与。所以我想为此做一些准备,弄清楚这是什么以及我可以做些什么来提高到基本水平。互联网研究只是让我对 CTF 是什么有了一个非常模糊的概念。

我已经掌握了一些编程语言的基础和中级知识,包括 C#、PHP/Javascript/etc(基础)、C(非常基础)、Java。我不知道这是否有任何用处,但我认为它不会受到伤害。

究竟什么是 CTF?作为一个初学者,我如何自己准备 CTF 活动?

4个回答

CTF(夺旗)就像游戏中的课程。一些网站提供简单的学习绳索,简单的挑战增加难度。例如http://overthewire.org/wargames/将教你如何在每个挑战中使用工具(十六进制转储、vi,甚至终端本身)。

主要目标通常是找到一些代码,要么嵌入文件中(stegano),要么隐藏在服务器内的文件中,您需要在其中滥用已知漏洞(常规 CTF),或者甚至利用程序的源代码来查找秘密密码(反转)。

就像任何编程挑战一样,慢慢来,学习工具,不要害怕寻求帮助或写作(显然不是你想要实现的 CTF),但它们可以提供有关使用工具的见解,取决于挑战的类型。

一些链接:

https://www.hackthebox.eu/:如上所述的各种 CTF 类别,从简单到困难,大量的文章

http://overthewire.org/wargames/:主要是常规的 CTF,文件隐藏在服务器中,以及查找/解密它的特定规则。适合初学者,会教你基本工具

说“CTF”有点像说“电子游戏”。你如何为电子游戏做准备?好吧,这取决于游戏是什么!俄罗斯方块与天际有很大不同,天际与马里奥赛车不同。

在不了解更多信息的情况下,您几乎无能为力。在一个 CTF 中,我需要了解网络、TCP/IP、Web 应用程序设计、加密和内存取证。在不知道需要它的情况下,没有办法为所有这些做好准备。

所有 CTF 的共同点是通常有很多逻辑难题。

准备 CTF 的最好方法是做 CTF。CTF 的大部分乐趣在于不知道你需要知道什么并快速学习你需要弄清楚什么。

什么是 CTF?这是一种计算机安全竞赛,称为 CTF,因为您捕获一个“标志”,一个唯一的字符串,并将其提交给评分基础设施以获得分数。CTF 几乎总是有时间限制的,通常是 24-48 小时(通常连续一个周末,这让世界各地的竞争对手不受时区限制)。有两种主要类型的 CTF - 危险和攻击/防御。Jeopardy 风格的 CTF 更容易组织,也更容易玩/对新玩家的惩罚更少。在危险风格的 CTF 中,组织者编写了一组挑战(在云上运行的易受攻击的二进制或 Web 服务、crackme 类型的逆向挑战、隐藏在磁盘映像或数据包捕获中的东西或加密消息),为每个挑战分配点值挑战,并将它们提供给竞争对手(通常在一个类似于危险的板上,挑战按难度和类别组织(二进制利用、逆向工程、网络利用、密码学和取证是典型的类别))。比赛开始时,参赛者可以访问挑战网格,您解决它们并提交标记以获得积分,最后得分最多的人获胜(通常会按时间打破平局以达到总冠军 - 越快越好) .

在攻击/防御 CTF 中,组织者仍然构建了一组易受攻击的服务,但每个团队都必须运行这些服务的副本,他们必须进行防御。您入侵其他团队以窃取他们的旗帜,并尝试修补您自己的服务以防止其他团队对您做同样的事情。A/D CTF 需要组织者进行大量额外的后勤和基础设施工作(VPN、每个团队的目标主机等)。如果您被踩踏(或有人对您的基础设施持保留态度)并且您无能为力,它们也可能会让新玩家士气低落。不过,它们也很有趣,并且可以使用一些不寻常的技能,例如二进制修补和利用反射。

在准备方面:学习,实践和工具。Florent Uguet 对兵棋推演的建议非常适合练习。您可能会发现有用的其他一些资源包括:

  • Trail of Bits 的CTF 领域指南有一些讲座、工具列表和旧 CTF 问题的演练。
  • picoCTF是一个针对背景很少的高中生的 CTF。比赛结束了,但组织者把问题留给人们学习。这是一个很好的起点,如果你有编程经验,你就会走在前面,应该能够很快地咀嚼早期的东西。我想还有一个新的 picoCTF 将于 10 月推出。
  • pwnable.kr有各种好的二进制开发挑战可供练习。
  • 您经常可以在网上找到过去 CTF 的挑战记录,这是熟悉特定 ctfy 习语或特定 ctf 中可能出现的各种问题的好方法。 ctftime.org除了托管即将到来的 ctfs 日历外,还汇总了文章。

在工具方面,我要提供的一条建议是在脚本语言方面变得更强大。CTF 一般都有时间压力,速度比完美正确更重要。Python 似乎是最常用的语言选择,并且有很多很好的工具可以应对 Python 中的 ctf 类型挑战(例如pwntools)。在那里熟悉一点可能也很好。

CTF基本上就是它在游戏中所知道的。它是夺旗,但不是偷旗,你必须实现多个目标,这些目标充当旗帜。

例如,比赛中的标志可能是对密钥验证进行逆向工程以开发密钥生成器。

由于您了解一些编程语言及其基本原理,因此如果您加强对逻辑的理解和调查技能,将会很有帮助。看看旧的 CTF,然后做一些。如果您偶然发现问题,请研究主题并了解机制。

就像施罗德已经说过的那样。准备工作非常困难,因为您很可能不知道任务是什么。

作为个人提示:放松。您可以和他们一起学习并享受探索系统缺陷的乐趣。试着度过一段美好的时光。