CTF基础介绍与入门讲解
什么是CTF夺旗赛
CTF(Capture The Flag,夺旗赛) 是一种流行的信息安全竞赛形式,起源于1996年的DEFCON大会。CTF竞赛通过解决各种网络安全相关的挑战,帮助参赛者提升技术能力,同时也为网络安全领域培养人才。
当然还有AWD比赛。那什么是AWD?
AWD(Attack With Defense)是一种结合了攻击和防守的网络安全比赛模式。参赛队伍在比赛中需要同时扮演攻击者和防守者,攻击其他队伍的靶机以获取积分,同时保护自己的靶机不被攻击。比赛的目标是通过挖掘和利用对手的安全漏洞来获取“Flag”,并提交以获得分数。每个队伍的初始分数相同,最终以得分高低决定胜负。
那么ctf需要哪些基础知识呢?
CTF基础知识
常用工具
打比赛的时候工具是必不可少的。俗话说功夫再高也怕菜刀,
KALI Linux
KALI,俗话说kali学的好,牢饭吃到饱。由此可见kali的威力,
Kali Linux是基于Debian的Linux发行版。它被设计为用于数字取证的操作系统,每一季度更新一次。由Offensive Security(OffSec)维护和资助。最早是由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,而BackTrack也是他们之前编写的用于取证的Linux发行版。
Kali中内置了大量的渗透测试,逆向工程的工具由此可见其强大之处,它是一个集成化的渗透测试专用操作系统,内置的语言环境都可以支持你开发自己的工具。你可以通过它完成渗透测试,赏金漏洞(SRC)和CTF等赛事。
SQLMap
Sqlmap是一款功能强大的开源SQL注入工具,它支持自动化检测和利用SQL注入漏洞,并能够接管数据库服务器。Sqlmap具有强大的检测引擎,提供了许多专业功能,适用于各种数据库管理系统,包括MySQL、Oracle、PostgreSQL等。它可以执行数据库指纹识别、数据读取、访问底层文件系统,甚至通过带外数据连接执行系统命令。
比赛中,我们常用这个工具来完成一些sql注入赛题。
Burp Suite与Yakit
Burp Suite 是一款功能强大的集成化渗透测试工具,专为 Web 应用程序的安全测试设计。它由 PortSwigger 开发,支持手动和自动化测试,帮助安全从业者发现和分析 Web 应用中的漏洞。Burp Suite 提供了多种模块和工具,适用于不同的测试场景。
Yakit 是一个高度集成化的 Yak 语言安全能力的输出平台,使用 Yakit,我们可以做到:
类 Burpsuite 的 MITM 劫持操作台
查看所有劫持到的请求的历史记录以及分析请求的参数
全球第一个可视化的 Web 模糊测试工具:Web Fuzzer
Yak Cloud IDE:内置智能提示的 Yak 语言云 IDE
ShellReceiver:开启 TCP 服务器接收反弹交互式 Shell 的反连
第三方 Yak 模块商店:社区主导的第三方 Yak 模块插件,你想要的应有尽有
我们主要使用这两个工具进行手工测试。
以上只是web区域常用工具.
那么都有哪几个方向呢?
web
CTF Web 方向是 CTF 比赛中最常见的赛道之一,主要考察选手对 Web 漏洞 的挖掘与利用能力。以下是常见的漏洞类型及其解题思路总结。
SQL 注入
原理:通过构造恶意输入,使后端数据库执行非预期的 SQL 语句。
常见类型:
联合查询注入:利用 UNION SELECT 拼接查询结果。
布尔盲注:通过页面返回的真假状态逐位猜解数据。
时间盲注:通过 SLEEP() 或条件延迟判断数据。
绕过技巧:
使用编码绕过(如十六进制、URL 编码)。
利用注释符(如 /**/)绕过关键字过滤。
通过 LIKE 或 REGEXP 替代 =。
防御:
使用预编译语句(Prepared Statement)。
严格限制用户输入。
XSS(跨站脚本攻击)
原理:向页面注入恶意脚本,窃取用户 Cookie 或执行任意操作。
分类:
反射型 XSS:通过 URL 参数传递并即时触发。
存储型 XSS:恶意脚本存储于数据库,持久化攻击。
DOM 型 XSS:通过修改 DOM 树触发,无需服务器交互。
绕过技巧:
编码绕过:如<img src=x onerror=alert(1)>
利用事件触发:如 onmouseover、onerror。
使用 Unicode 编码或 Base64 编码绕过过滤。
防御:
输入过滤与输出编码(如 HTML 实体化)。
使用 CSP(内容安全策略)限制脚本执行。
文件上传漏洞
原理:未对上传文件类型、内容进行严格校验,导致上传恶意文件。
绕过方法:
修改文件扩展名(如 .php → .php5)。
添加文件头欺骗(如 GIF89a)。
利用解析漏洞(如 Apache 的 test.php.jpg 解析为 PHP)。
防御:
使用白名单校验文件类型。
检测文件内容和文件头。
禁用危险函数(如 eval、system)。
SSRF(服务端请求伪造)
原理:利用服务端发起内部网络请求,探测或攻击内网服务。
常见利用:
读取本地文件:file:// 协议。
扫描内网端口:如 http://127.0.0.1:3306。
攻击内网服务(如 Redis、FastCGI)。
绕过技巧:
使用进制 IP(如 2130706433 → 127.0.0.1)。
利用短链服务或 DNS 重绑定。
防御:
禁用非常用协议(如 file://、gopher://)。
设置请求白名单。
反序列化漏洞
原理:未对反序列化数据做安全校验,导致执行恶意代码。
常见语言:
PHP:unserialize()。
Python:pickle。
Java:readObject()。
利用链构造:
PHP 中通过 __destruct() 或 __wakeup() 方法触发漏洞。
Java 利用 Apache Commons Collections 等 Gadget 链。
防御:
避免反序列化用户输入。
使用签名校验数据完整性。
SSTI(服务端模板注入)
原理:将用户输入拼接到模板中,导致执行任意代码。
常见框架:
Flask(Jinja2)。
Django。
Twig。
利用技巧:
输入 {{7*7}} 测试是否返回 49。
通过内置类获取上下文(如 Python 的 subclasses())。
防御:
禁止动态模板渲染。
使用沙箱隔离。
工具与实战技巧
Burp Suite:拦截修改请求,爆破密码或验证码。
SQLMap:自动化 SQL 注入,支持绕过 WAF。
编码转换:熟练掌握 Base64、URL 编码、Hex 编码互转。
学习建议
靶场练习:DVWA、WebGoat、PortSwigger Labs。
CTF 平台:CTFHub、攻防世界、HackTheBox。
知识扩展:学习 HTTP 走私、JWT 伪造等进阶漏洞。
通过不断实践和复现经典赛题,可以逐步掌握复杂场景的漏洞利用与绕过技巧。
Crypto
在CTF比赛中,Crypto题目主要涉及各种加密和解密技术。以下是一些常见的解题思路和工具:
- 摩斯密码
摩斯密码由点和横组成,可以通过在线工具解码。例如:
-... -.- -.-. - ..-. -- .. ... -.-
解密结果:BKCTFMISC
- 栅栏密码
栅栏密码是一种分组替换加密,可以通过在线工具解码。例如:
KYsd3js2E {a2jda}
解密结果:KEY {sad23jjdsa2}
- 凯撒密码
凯撒密码通过将字母按固定位数进行偏移来加密。可以使用在线工具或CrypTool解码。例如:
MSW {byly_Cm_sIol_lYqUlx_yhdIs_Cn_Wuymul_il_wuff_bcg_pCwnIl_cm_u_Yrwyffyhn_guh_cz_sio_quhn_ni_ayn_bcm_chzilguncihm_sio_wuh_dich_om}
解密结果:SYC {here_Is_yOur_rEwArd_enjOy_It_Caesar_or_call_him_vIctOr_is_a_Excellent_man_if_you_want_to_get_his_informations_you_can_join_us}
- Base64 编码
Base64编码通常以==结尾,可以通过Python脚本解码。例如:
import base64
strs = "e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA"
offset = ord('A') - ord('=')
list_str = [chr(ord(ch) - offset) for ch in strs]
base64_str = "".join(list_str)
plain_text = base64.b64decode(base64_str)
print(plain_text)
解密结果:key {68743000650173230e4a58ee153c68e8}
- RSA 加解密
RSA算法包括密钥生成、加密和解密。可以使用RsaCtfTool和libnum工具进行解密。例如:
from libnum import n2s, s2n
import base64
p = 15991846970993213322072626901560749932686325766403404864023341810735319249066370916090640926219079368845510444031400322229147771682961132420481897362843199
q = 28805791771260259486856902729020438686670354441296247148207862836064657849735343618207098163901787287368569768472521344635567334299356760080507454640207003
e = 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619
d = modinv(e, (p - 1) * (q - 1))
c = 38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192
n = p * q
m = pow(c, d, n)
print(n2s(m))
解密结果:flag {ok-c2tf-3389-admin}
通过这些方法和工具,可以有效地解密CTF比赛中的Crypto题目。
Misc
在CTF(Capture The Flag)比赛中,Misc是“Miscellaneous”的缩写,意为“杂项”或“混合”。它涵盖了那些无法归类到其他明确技术方向的题目,通常涉及多种技能的综合运用。Misc题目被称为CTF中的“百宝箱”,因为它的内容丰富多样,充满挑战性和趣味性。
Misc的常见题型
隐写术(Steganography):将信息隐藏在图片、音频或视频中。常用工具包括steghide、stegsolve、binwalk等。
流量分析(Network Traffic Analysis):通过分析网络抓包文件(如.pcap),提取关键信息。工具如Wireshark和tshark非常常见。
编码与解码(Encoding & Decoding):识别并解码各种编码方式,如Base64、Hex、Morse码等,可能需要多层解码。
压缩包破解:处理加密或损坏的压缩包,使用工具如fcrackzip或binwalk进行密码破解或文件分离。
文件修复(File Carving):修复损坏的文件头或提取嵌套文件。常见文件头包括PNG、JPG、ZIP等。
图片/音频处理:通过LSB隐写、频谱图或元数据分析提取隐藏信息。
Misc的核心考察点
Misc题目的核心在于信息隐藏与还原。它考验参赛者的观察力、耐心以及对工具的熟练使用。常见的解题思路包括:
使用file命令检查文件类型,避免被扩展名迷惑。
使用strings提取文件中的可读字符串。
借助binwalk或hexdump分析文件结构。
针对不同文件类型,使用专用工具(如stegsolve分析图片,Wireshark分析流量)。
Misc的意义
Misc是CTF比赛中入门的最佳选择。它覆盖了安全技能的多个方面,能够启发参赛者的思维,同时培养解决问题的能力。通过不断练习和总结,参赛者可以逐步掌握这类题目的解题技巧,为其他方向的挑战打下坚实基础。
总结:Misc题目虽然“杂”,但正是这种多样性让CTF比赛充满乐趣。它不仅考验技术,还需要创造力和细致的观察力,是提升综合能力的绝佳途径。
Reverse
在CTF(Capture The Flag)竞赛中,Reverse(逆向工程)是一种常见的题目类型,主要考察选手对程序的逆向分析能力。逆向工程的核心是通过分析二进制文件(如exe、dll、elf等),还原程序的逻辑、算法或实现细节,最终获取目标信息(如flag、密码等)。
逆向工程的核心概念
逆向工程的目标是从程序的二进制代码中提取有用的信息。通过反汇编、调试等手段,可以分析程序的执行逻辑、加密算法、数据结构等。CTF中的逆向题目通常要求选手:
找到程序中的隐藏逻辑或条件。
破解加密算法或解密数据。
分析程序的输入输出关系,获取flag。
常见的逆向工具
逆向工程需要借助一些专业工具来辅助分析程序的行为和代码逻辑:
IDA Pro:一款强大的静态分析工具,可以将二进制代码反编译为伪代码,便于理解程序逻辑。
x64dbg:一款动态调试工具,支持设置断点、单步调试等操作,适合分析程序的运行时行为。
PEiD:用于检测程序是否加壳以及编译器信息。
WinHex/010 Editor:用于查看和编辑二进制文件的十六进制内容。
逆向题目的解题思路
初步分析:运行程序,观察其行为,记录输入输出的变化。
查壳与解壳:使用PEiD等工具检查程序是否加壳,必要时进行脱壳操作。
静态分析:使用IDA等工具查看程序的伪代码或汇编代码,分析其逻辑。
动态调试:通过x64dbg等工具设置断点,逐步跟踪程序的执行流程,找到关键逻辑。
还原算法:根据分析结果,编写脚本还原程序的加密或验证逻辑,获取flag。
逆向工程的应用场景
CTF中的逆向题目可能涉及以下场景:
破解简单的加密算法(如Base64、XOR)。
分析程序的输入验证逻辑。
还原混淆代码或自修改代码。
破解Android APK文件或其他平台的二进制文件。
学习与练习建议
学习汇编语言、C语言和Python等编程语言,掌握程序的基本结构和逻辑。
熟悉常见的加密算法和编码方式,如RC4、TEA、Base64等。
多练习CTF平台上的逆向题目,如BUUCTF、nssctf等,积累经验。
阅读相关书籍和教程,如《IDA权威指南》,并结合实际题目进行操作。
逆向工程是CTF竞赛中的重要方向之一,也是信息安全领域的核心技能之一。通过不断练习和总结,可以逐步提升逆向分析能力,为破解复杂的程序逻辑打下坚实基础。
PWN
CTF Pwn是Capture The Flag(夺旗赛)竞赛中的一个重要方向,它涉及利用二进制程序中的漏洞来获取系统权限,通常目的是为了获取shell访问权限。Pwn这个词源自于"hacker"语言中的"own",意味着在比赛或游戏中取得优势或完全击败对手。在CTF中,Pwn通常指的是二进制漏洞利用,包括但不限于栈溢出、格式化字符串漏洞、堆利用等。
Pwn的学习路径
学习Pwn通常需要一定的基础知识,包括但不限于C语言、Python编程、Linux系统命令、汇编语言以及对ELF文件格式的了解。这些基础知识有助于理解和利用二进制程序中的漏洞。
初学者工具和知识
工具: 初学者可能需要熟悉Python 2.x(尽管Python 3也广泛使用,但有时会遇到兼容性问题),Linux操作系统(Windows用户可以使用WSL2或虚拟机),IDA Pro(逆向分析工具),Pwntools(漏洞利用框架工具),以及checksec(ELF保护分析工具)。
知识: 初学者应具备C语言基础、Python基础及其库的使用方法、源代码阅读和漏洞寻找能力、基础Linux命令等。
进阶工具和知识
工具: 进阶学习者可能会使用pwndbg(GDB动态调试插件)、Libcsearcher(集成libc查找工具)、one_gadget(一句话提权指令搜索工具)和ROPgadget(ROP指令流搜索工具)。
知识: 进阶学习者应深入了解C/C++语言、ELF文件结构、计算机系统的深层理解等。
Pwn的实践
实践Pwn通常涉及以下步骤:
使用checksec检查ELF文件的保护状态。
使用IDA Pro等工具逆向分析程序漏洞。
编写Python脚本(exploit)进行攻击。
如果攻击不成功,使用GDB进行动态调试,查找原因。
攻击成功后,获取flag并编写Writeup。
常见漏洞和安全机制
常见漏洞: 包括栈溢出、格式化字符串漏洞、整数溢出等。
安全机制: 包括栈保护(Stack Canaries)、非执行(No-eXecute)、地址空间布局随机化(ASLR)和位置无关可执行文件(PIE)等。
学习资源
学习Pwn的资源包括相关书籍、在线教程、博客以及CTF平台。例如,《CTF权威指南 (PWN)篇》是一个不错的学习资源。此外,参加在线CTF平台如BUUCTF、pwnable.tw等进行实践也是学习Pwn的有效方法。
总结来说,Pwn是CTF竞赛中一个复杂但极具挑战性的领域,它不仅有助于网络安全方向的学习,还能提高开发者的安全意识。通过不断学习和实践,可以逐步提高解决问题的能力和理解底层系统的深度。
总结
以上便为CTF入门的基础介绍,总结了网上的多篇文章和笔者自己的经验,请记住勤学苦练才能成就更好的自己。加油网安人。

浙公网安备 33010602011771号