CTF(Capture The Flag)即夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会。

CTF竞赛模式具体分为以下三类:
解题模式(Jeopardy)、攻防模式(Attack-Defense)、混合模式(Mix)

一、解题模式(Jeopardy)

可通过互联网或现场网络参与,解决网络安全技术挑战题目,并以分值和时间排名。题目主要包括:web渗透,逆向,漏洞挖掘与利用,密码,取证,隐写,安全编程等。

二、攻防模式(Attack-Defense)

在网络空间互相进行攻击和防守,挖掘网络服务漏洞并攻击对手来得分,修补自身服务漏洞进行防御来避免丢分。注重团队合作及智力技术的比拼。

三、混合模式(Mix)

结合了解题模式与攻防模式的CTF赛制,先通过解题取得初始分,然后通过攻击对抗进行得分。主要的CTF题型:

1、MISC(Miscellaneous)

即安全杂项,主要考察参赛选手的各种基础综合知识。题目涉及隐写术、流量分析、电子取证、人肉搜索、数据分析、大数据统计等,覆盖面比较广,主要考察参赛选手的各种基础综合知识。

Misc没有套路化的解题流程,具体问题具体分析。

参考工具:file、010Editor、Binwalk、foremost、dd、Stegsolve、Audacity、steghide、Wireshark等。
最终目标:熟悉文件类型结构分析、隐写相关、压缩文件结构、日志分析、流量分析、信息收集等。

2、Reverse

逆向分析,将二进制机器码进行反汇编得到汇编代码,在汇编代码的基础上,进行功能分析。

Reverse类题型要求参赛选手有较强的反汇编、反编译功底。题目主要涉及软件逆向破解技术,参赛者会得到一个程序,需在没有完整原始码的情况下分析程序,找到隐藏的信息,或者改变程序的运行流程。

逆向解题的基本流程:
(1)程序预处理,去混淆和过反调试;
(2)代码逆向,找到验证函数;
(3)验证函数数逆向,找到验证算法;
(4)破解验证算法,拿到flag。

最终目标:熟悉汇编语言、C语言、操作系统原理及其核心编程、程序加载、反汇编与调试等等。理解目标代码,能看懂目标程序编写语言。

3、Crypot(密码学)

Crypto类题型考察参赛选手密码学相关知识点。包括古典加密技术、现代加密技术甚至出题者自创加密技术,以及一些常见的编码解码,主要考察参赛选手密码学相关知识点。通常也会和其他题目相结合。

Crypto解题的基本流程:
(1)分析编码或加密所使用的技术;
(2)使用工具对密文解密;

参考工具:CryptoSearcher、Base64kit、HashCalc、RSATool2、John the Ripper等。
最终目标:熟悉各类编码方式(hex、base64、url、ascii、摩斯电码等)和加密方式(MD5、SHA、AES、DES、RSA、栅栏加密等)。

4、Mobile

主要分为安卓和IOS两个平台,以安卓逆向为主,破解apk并提交正确答案。

Mobile解题的基本流程:
(1)根据题目的apk文件,提出class.dex文件得到jar文件;
(2)获取jar文件中源码进行代码分析

参考工具:dex2jar、Androidkiller、jd-gui等。
最终目标:掌握安卓逆向分析、安卓语言等。

5、Web(漏洞挖掘与利用)

Web类题型是CTF的主要题型,主要考察参赛选手是否掌握常见的Web漏洞,如XSS、文件包含、命令执行、上传漏洞、SQL注入等。也有一些简单的关于网络基础知识的考查,如请求返回包、TCP/IP、数据包内容和构造。题目环境比较接近真实环境。

Web没有套路化的解题流程,具体问题具体分析。

参考工具:Brup Suite、fiddler、中国菜刀、sqlmap、开发者工具等。
最终目标:掌握Web漏洞原理与测试技巧、JavaScript、SQL、Linux命令等等。

6、PWN

Pwn类题型要求参赛选手有较强漏洞利用能力。在CTF比赛中它代表着溢出类的题目,其中常见类型溢出漏洞有整数溢出、栈溢出、堆溢出等。

Pwn解题的基本流程:
(1)分析二进制文件,找到其中漏洞;
(2)通过异常的输入,利用漏洞,执行目标代码,获取flag;
参考工具:IDA Pro、pwntools、gdb、ROPgadget等。
最终目标:掌握汇编语言、逆向基础、软件技术防护 、ROP面向返回的编程技巧、各类漏洞。

7、Stega(Steganography)类型,
即隐写术,题目的Flag会隐藏到图片、音频、视频等各类数据载体中供参赛者获取。

8、Recon(社工,情报搜索分析)

9、Forensic(网络流量分析,隐写分析,系统取证)

10、PPC(Professionally Program Coder)类型,即编程类题目,题目涉及到编程算法,相比ACM较为容易。