CTF

什么是 CTF

CTF 全称 Capture the Flag,译为「夺旗赛」,是一种比赛形式。比赛中,选手会得到一个题面(可能是一段话、一个压缩包、一张图片、一个网站、一个链接、一份源码、一个程序等),选手需要根据题面,通过各种手法找到或得到诸如 flag{xxx} 的内容,这便是此题的答案。

走出洞穴的第一步

如果你还没有掌握一门编程语言,建议先从编程语言入手,C 语言或者 Python,培养对编程的感觉。只要你掌握了一门语言,再学习其他语言便能够触类旁通。

如果你此前从未接触过 CTF,你可能需要先了解其形式,即通过一些在线靶场或新生赛的低门槛题目进行适应。下面的一些公益新生赛事或平台或许会对你有所帮助:

随后,你应当选定一个方向,作为你主攻方向。例如,对网络感兴趣、有基础的同学可能更适合 Web 方向,而对程序运行底层逻辑、二进制感兴趣的可能更适合逆向(Reverse)和 Pwn,等等。

然后,当你接触到特定的题目时,你会遇到特定的知识点。设计得当的引导会控制好你所接触的「新事物」的量。这个时候,辅以实践,你再通过搜索、询问等各种方式学习知识细节,或许会轻松许多。

如果你在寻求更细节和全面的指导,可以查看 CTF Wiki 或由探姬师傅主导的 Hello CTF 等网站。注意,与传统的课堂教育模式不同,这些网站并不要求你立即并全部掌握其中的内容,而是充当一个手册供你速查。

对于自己无能为力的题,记得在赛后根据题解(WriteUp)进行复现。温故而知新,可以为师矣。

我还没有准备好

参与 CTF 赛事,是一个不断在历练中成长的过程,是对自我螺旋上升式的提升,是理论与实践相结合的又一深入尝试。请时刻铭记:充分发挥自己的主观能动性,在实践中成长。

搜索引擎是你生涯中最重要的伙伴之一,请珍爱并善于使用它。如何高效使用搜索引擎是对信息搜集和快速查找知识的考查,你需要通过大量实践和碰壁以养成该能力。推荐的搜索引擎有:

  • 必应(Bing)国际版
  • Google 搜索
  • DuckDuckGo
  • 带有联网或搜索功能的 AI

此外,BiliBili 也是不错的选择。

常见的搜索技巧有:

  • 搜索时采用关键词搜索,以便能最大限度匹配到需要的内容
  • 中文无法搜索到资源时考虑使用英文关键词
  • 借用 AI 得知具体的搜索方向和关键词

此外,必备的知识迁移能力和动手尝试(试错)能力是不可或缺的。

在这趟旅途中,请收藏对你帮助巨大或需要日后查阅的链接或文档。值得一提的是,偶尔的旅途记录或许将在某些时刻发挥意想不到的作用,例如知识速查、快速回顾等。

我只是个萌新,为什么他们叫我师傅?

CTF 圈子中,CTFer 们通常以 “ 师傅 “ 相互称呼。

什么是 WriteUp?

又称作 WP,是记录 CTF 比赛中解题过程的文章,通常包含题目描述、解题思路、解题过程、源码分析、脚本分析等内容。当然你也可以简单理解为解题报告 —— 题解。

什么是p’y?

师傅之间题目的交流,多个CTFer解同一道题

其他名词解释

  • 一把梭 代指一类解题过程或者方法,一般指将题目中给出的对应的附件 / 代码 / 密文等,直接丢到某个工具或者网站上,就能得到 flag 的解题方法。(闲鱼是最好的一把梭)
  • 套娃 一是指一些题目比如说加密题,嵌套了多层的加密,需要多次解密才能得到 flag,即一道题中可能涉及到多个知识点的考察; 二是带有一定贬义意义,通常指出题人只是为了出题而出题,单纯的、一味的、向题目中叠加 tricks,导致本来就不新颖的题目还变得更加复杂,使得题目的难度无意义的变高。

开始

前置条件

首先,请确保你拥有一台 PC、计算机的基本使用能力、可见互联网的探索能力。

请确保你具有以下账户:

  • 一个 Github 账号

  • Git

    这将作为你下载开源资源的主要工具,同时使用其附带的 Git Bash,允许你在 Windows 中使用一些简易的 Linux 命令。

  • 一个可用的 Linux 虚拟机:在任何网络攻防中,Linux 操作系统是必要的。

    Windows 下虚拟机可以选择 WSL/WSL 2.0 或 VMware Workstation 或 Virtual Box,可选的 Linux 发行版为 Ubuntu 或 Kali Linux.

    如果你是深度 Linux 用户,可考虑 Arch Linux 裸机.

  • 一个功能强大的文本编辑器

    它将伴随你大部分的时间,强烈推荐 VSCode.

至此,你已经具备了 CTF 入门的条件。

Web

CTF 中的 Web 方向通常指的是通过阅读阅读网站源码,或是根据网站已给信息,实现对网站的漏洞利用。

例如,通过输入框输入一些精心设计的内容,可以获取到网站的数据或者服务器权限。

这是由于网站是由前端和后端构成的。前端指的是你看到的、能接触到的内容,而后端则是服务器对你发起的网络请求进行一定的处理等操作。通过构造一些请求从而达到「欺骗」后端的目的,实现对后端服务器的部分控制。

常见的 Web 题型有 SQL 注入、模板注入(SSTI)、PHP 漏洞利用等。

收拾行李

Web 方向需要有较强的代码阅读能力(即便是未接触过的代码,不要求会写,但需能够阅读),以及搜索能力。

以下建议可能能够帮助你提升代码阅读能力,但任何事物都是循序渐进的,你也可以在做题的同时学习和成长。

  • 学习和掌握 Python 语言
  • 在做题中遇到难以读懂的代码时询问搜索引擎或 AI

下面是一些你需要了解的概念或过程,若你此前并不了解,请自行通过搜索引擎或视频网站学习:

  • IP 地址、端口、域名
  • 通过网址访问网页的通信过程
  • Linux 操作系统和其基本使用
  • 终端、命令提示符
  • Web 服务器,常见的 Web 服务器
  • 常见的编程语言,用于 Web 服务器编程的常见编程语言
  • HTTP 报文格式
  • 浏览器 Cookie
  • 正则表达式

此外,你还需要了解开源和熟悉 Github,并最好具备访问全球互联网的能力。

注意事项

Web 安全技术威胁性大,请勿用于攻击和测试境内的目标,未授权的攻击测试行为将承担巨大的法律责任。若您决心踏上这一旅途,请立志成为一名将技术服务于社会和人民的安全从业人员(白帽子)。

出发远航

下面将列举一些常见的考点,以便你在入门的旅途中找到搜索的方向。一些词汇你可能感到陌生,你也并不需要立即掌握它们,但需要你遇到时能学习并铭记在心,这将非常考查你的知识接受能力和自学能力。这里将不会列举相对进阶的知识点。

  • PHP 考点
    • 弱类型比较
    • PHP 伪协议
    • PHP 反序列化
    • PHP 版本引发的
  • MySQL 数据库考点
    • 联合注入
    • 报错注入
    • 布尔注入
    • 延时盲注(时间盲注)
  • 模板注入(SSTI)

常见的利用方式(思路)有:

  • 任意文件读/写
  • 远程代码执行(RCE)
  • 服务端请求伪造(SSRF)
  • 路径穿越

密码学

简单来说,密码学是一种用来研究如何加密来保护信息,如何解密获取信息的学问。

为什么学密码

可以了解、开创并实现现代密码学的 RSA 算法、未来将抵御量子计算机的格密码等的「后量子密码技术」,以及学到在特殊情况下我们用现代计算机来破解特定的 RSA 现代密码和后量子密码技术的攻击手段。

准备工作

你需要准备以下工具:

  • PC(一般不限操作系统)
  • Python 编程语言和环境
  • yafu 软件程序
  • 一款笔记软件或网站
  • 草稿纸和笔(随电脑携带的,经常需要演算关系式)
  • 大数分解 factordb 网站

其它一些帮助性较大的网站:

除此之外,在学习的途中还会遇到很多有意思的工具或网站。

学习路线

Python 编程基础

下载 Python,选择一款集成开发环境(IDE,如 PyCharmVSCode),并配置好 Python 环境。

密码学基础

你需要了解下面这些知识点:

  • 理解模运算
  • 逆元计算的运用(暂时不要求理解)
  • RSA 公钥加密算法(可参考文章:RSA 入门
  • 理解海纳百川的 k 和无所不能的公因数

逆向工程

逆向工程通常是在没有源代码的情况下对软件进行分析,相对于正向的代码编程来说,逻辑通常是反过来的,需要有好的代码分析和反向思维能力。

0x01. 学习 C 语言代码

C 语言是逆向工程的基础,务必重点学习以下内容。

  • 流程控制:if、switch、goto、break
  • 指针操作:引用,解引用,取地址,数组与指针转化
  • 数据类型:熟记 char、int、int64 等类型大小
  • 可逆运算:异或运算、算数运算、移位与循环移位运算

0x02. 学习常见加密

加密是逆向工程对抗的核心,务必熟记加密算法原理和特征,这样在面对混淆和魔改加密时才能游刃有余。

  • TEA 系列加密: TEA、XTEA、XXTEA
  • RC4 加密
  • AES/DES 加密
  • 16 进制编码
  • Base64 编码

加密特征识别可参阅:常见加密算法特征识别

常见加密不是一成不变的模板,死记硬背不可能通杀,请务必读懂加密过程和大致原理。

0x03. 脚本代码编写

脚本编写是一项很重要的能力,你需要熟悉 C 语言和 Python,并且减少代码出错的可能性。平时的解题脚本一定要收集好,并找时间整理,比赛争分夺秒,好的解题模板可以帮你快速夺得一血。

0x04. 逆向工具的使用

  • IDA: 二进制方向工具,90% 的题都会用到,务必熟悉使用

  • Jadx-gui: Java 代码反编译工具,安卓软件和 Java 程序都会用到。

  • Jeb: 面相安卓逆向的利器,有 Java 代码反混淆功能

  • Pyinstxtractor: 解包 Python 编写的 exe 文件

  • Uncompyle6: 反编译 Python 大部分版本字节码(PYC 文件)

  • Xdbg: 动调神器

Misc

「如果一道题不适合放在其它的方向,那么 misc 永远能收留它。」

—— yixinBC

「每一个 misc 手都是一个隐藏的全栈✌。」

—— w3nx1z1

安全领域不止 Web、逆向等方向,Misc 涵盖了剩下的一些部分,同时也对一些强分类方向的细枝末节进行考查,像是对安全领域的碎片进行整理,因此称为「杂项(Miscellaneous)」。常见的 Misc 题型包括:编码、隐写、流量分析、压缩包分析、AI、取证、社会工程学、区块链、沙箱逃逸等等。

学习 Misc 的第一步

Misc 突出的就是庞杂,涉猎内容十分广泛。但也正因如此,一些知识点往往并不是很高深(至少入门是如此),请放心地搜索并学习它。

在 Misc 的道路上走得远些对其它方向是有些帮助的,你可能会享受那种使用奇技淫巧解决问题的快感,当然,更多的时间则是在与出题人对脑洞。

下面是一些你需要具备的基础能力:✌

  • 极强的信息搜集能力,包括但不限于互联网搜索、文件信息收集、社会工程学等
  • 对至少一门编程语言(最好是 Python)的掌握

下面这些网站或许会帮助到你,它们是对常见题型的归类和整理,你可以当做速查手册:

还有一些方向内大师傅的博客,等待你的探索。

编码

编码指的是将一个字符串通过某种法则变化为另一个字符串。

隐写

隐写术是一种将秘密信息隐藏在普通数据中的技术。在 CTF 竞赛中,Misc 类别通常涉及到各种隐写技巧,包括但不限于文本、图像和音频隐写。

压缩包

有时你会得到一个损坏或加密的压缩包,你需要获取压缩包中的内容。这就需要多种修复、攻击等技巧。

流量分析

流量分析是Misc 中重要的考点,也是 Web 安全分析、工业互联网安全中技能的重要组成部分。当黑客攻入你的计算机并被你发现后,你可能能够通过网络设备等留下的日志,查看过去发生的网络流量等情况,从而分析出黑客的行为。

取证

通俗地讲,取证要求你化身电子侦探,找到隐藏在数字存储介质里的犯罪者活动记录,或恢复使用者的使用轨迹,比如解密聊天记录、恢复被加密的文件等等。正如其名,这项技术往往用于查找罪行相关物证或间接物证。

Pwn

Pwn 是干什么的?好吃🐎?

Pwn 是由 own 引申而来的,它表示玩家处于胜利的优势。在黑客语法的俚语中,Pwn 是指攻破设备或者系统,发音类似「砰」。对黑客而言,利用一些漏洞成功实施黑客攻击,获取到服务器的权限并操纵,那么,This server just got pwned!

Pwn 需要的不仅是基本的 C 语言、汇编语言以及逆向功底,还有程序运行相关的知识。因此,你也可以选择先在逆向(Reverse)方向深造,当有一定了解后再来学习 Pwn 便会轻便许多。

30秒了解CTF做题流程_

-------------本文结束感谢您的阅读-------------