在开启CTF竞赛学习之路前,我们要熟悉CTF的三大竞赛模式,了解简单的CTF竞赛中涉及的题目类别,最后就是我们用哪些工具拿到Flag。本文主要是起开宗明义作用,为日后的CTF做题提供基本的理论指导。
解题模式1
一般通过线上网络参赛,以解决网络安全技术挑战题目的分值和时间来排名,通常用于在线选拔赛。题目主要包含逆向、漏洞挖掘与利用、Web 渗透、密码、取证、隐写、安全编程等类别。
攻防模式1
参赛队伍在网络空间互相进行攻击和防守,挖掘网络服务漏洞并攻击对手服务来得分,修补自身服务漏洞进行防御来避免丢分。注重团队合作及智力技术的比拼。
混合模式1
结合了解题模式与攻防模式的CTF赛制。参赛队伍通过解题可以获取一些初始分数,然后通过攻防对抗进行得分增减,最终以得分高低分出胜负。
我目前接触的最多的就是解题模式。
在常规的CTF解题模式下,CTF练习平台(或者简单的比赛)的比赛界面如下图所示。
当我们动手去做题的时候,我们先要仔细读题干、再选择相应的题目去做。
常见的题干有以下几大类:
2.1 Reverse
Reverse类题型要求参赛选手有较强的反汇编、反编译功底。题目主要涉及软件逆向破解技术,参赛者会得到一个程序,需在没有完整原始码的情况下分析程序,找到隐藏的信息,或者改变程序的运行流程。
逆向解题的基本流程:
(1)程序预处理,去混淆和过反调试;
(2)代码逆向,找到验证函数;
(3)验证函数数逆向,找到验证算法;
(4)破解验证算法,拿到flag;
参考书籍:《逆向工程核心原理》、《加密与解密》、《使用OllyDbg从零开始Cracking》、《IDA Pro权威指南》、《Intel汇编语言程序设计》等等。
最终目标:熟悉汇编语言、C语言、操作系统原理及其核心编程、程序加载、反汇编与调试等等。理解目标代码,能看懂目标程序编写语言。
2.2 Pwn
Pwn类题型要求参赛选手有较强漏洞利用能力。在CTF比赛中它代表着溢出类的题目,其中常见类型溢出漏洞有整数溢出、栈溢出、堆溢出等。
Pwn解题的基本流程:
(1)分析二进制文件,找到其中漏洞;
(2)通过异常的输入,利用漏洞,执行目标代码,获取flag;
参考工具:IDA Pro、pwntools、gdb、ROPgadget等。
最终目标:掌握汇编语言、逆向基础、软件技术防护 、ROP面向返回的编程技巧、各类漏洞。
2.3 Crypto
Crypto类题型考察参赛选手密码学相关知识点。包括古典加密技术、现代加密技术甚至出题者自创加密技术,以及一些常见的编码解码,主要考察参赛选手密码学相关知识点。通常也会和其他题目相结合。
Crypto解题的基本流程:
(1)分析编码或加密所使用的技术;
(2)使用工具对密文解密;
参考工具:CryptoSearcher、Base64kit、HashCalc、RSATool2、John the Ripper等。
最终目标:熟悉各类编码方式(hex、base64、url、ascii、摩斯电码等)和加密方式(MD5、SHA、AES、DES、RSA、栅栏加密等)。
2.4 Misc
Misc类题型指的是安全杂项,主要考察参赛选手的各种基础综合知识。题目涉及隐写术、流量分析、电子取证、人肉搜索、数据分析、大数据统计等,覆盖面比较广,主要考察参赛选手的各种基础综合知识。
Misc没有套路化的解题流程,具体问题具体分析。
参考工具:file、010Editor、Binwalk、foremost、dd、Stegsolve、Audacity、steghide、Wireshark等。
最终目标:熟悉文件类型结构分析、隐写相关、压缩文件结构、日志分析、流量分析、信息收集等。
2.5 Web
Web类题型是CTF的主要题型,主要考察参赛选手是否掌握常见的Web漏洞,如XSS、文件包含、命令执行、上传漏洞、SQL注入等。也有一些简单的关于网络基础知识的考查,如请求返回包、TCP/IP、数据包内容和构造。题目环境比较接近真实环境。
Web没有套路化的解题流程,具体问题具体分析。
参考工具:Brup Suite、fiddler、中国菜刀、sqlmap、开发者工具等。
最终目标:掌握Web漏洞原理与测试技巧、JavaScript、SQL、Linux命令等等。
2.6 Mobile
主要分为安卓和IOS两个平台,以安卓逆向为主,破解apk并提交正确答案。
Mobile解题的基本流程:
(1)根据题目的apk文件,提出class.dex文件得到jar文件;
(2)获取jar文件中源码进行代码分析
参考工具:dex2jar、Androidkiller、jd-gui等。
最终目标:掌握安卓逆向分析、安卓语言等。