news 2026/10/21 6:01:04

CTF入门基础全梳理:赛制、Web、逆向、密码学与Misc方向指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTF入门基础全梳理:赛制、Web、逆向、密码学与Misc方向指南

第一次带队报名某线上CTF,比赛开始两小时,我们还在第一道Web题上卡着。提交flag的时候还把拼写搞错了,心态直接崩掉。后来复盘才发现,大部分入门卡点根本不是题目难,而是连“CTF到底在考什么、题目怎么组织、该往哪个方向用力”都没理解透。这篇文章我想从一个踩过不少坑的普通选手角度,把最常用的一批CTF基础知识按方向整理出来,给还在门口观望的新手一条可以照着走的路径。内容不追求“秒杀大佬”,只追求你在赛前能把基础盘稳,看到题目不慌。

1. 先搞清楚CTF比的是什么——赛制与赛道

1.1 三类经典赛制:解题、攻防和混合赛

CTF全称是Capture The Flag,中文常叫“夺旗赛”。它的核心目标很简单:在题目环境中找到一串特定格式的字符串,也就是flag,提交后得分。但不同赛制下,节奏和策略差别很大。

第一类是解题赛,英文叫Jeopardy,也是大多数新手第一次接触的形式。题目会按Web、逆向、Pwn、密码学、Misc等分类放在平台上,每道题分值不同,难度不同,解出来就能拿分。这种赛制的好处是开放、自由,你可以死磕一道题,也可以到处看看哪道简单先拿分。坏处是容易“挑花了眼”,新手经常在难题上耗掉大量时间,最后连基础分都没拿满。

第二类是攻防赛,Attack-Defense,简称AWD。这种赛制更接近真实攻防:每个队伍有一批服务器,既要防守自己的服务不被别人打穿,又要想办法去进攻别人拿flag。攻防赛的节奏非常快,通常一开始就要批量部署waf、修改弱口令、备份源码,然后马上写exp去打别的队。新手如果没经过训练,很容易一上来就被打“裸奔”。

第三类是混合赛,通常是先解题后攻防,或者在同一场比赛中同时包含两种形式的题目。很多知名国内赛事会采用这种模式,前面几个小时解题拿分,后面进入攻防环节。新人备赛时最好把两种模式都练到,不要只刷解题平台的题。

1.2 新人选方向:从“信息收集”到“队伍分工”

很多新手问我,CTF是不是要求一个人什么都会。其实不需要。一支正常队伍至少有三到五人,各管一个方向。最经典的配置是Web一人、逆向/Pwn一人、密码学一人、Misc一人,再留一个机动位去查漏补缺,或者写自动化脚本。

选方向的一个实用原则:先按“兴趣”粗筛,再按“正反馈速度”定。比如你平时喜欢看网页源码,喜欢琢磨参数和接口,那就从Web入手。你如果喜欢解谜题、玩图片、折腾流量包,Misc会给你很大的正反馈。逆向和Pwn则更适合喜欢钻研底层和二进制的人,入门曲线相对陡,但一旦上手,护城河很深。

我见过不少新人一上来就学Pwn,因为觉得“帅”,结果学了两个月还看不懂汇编,直接弃坑。后来换到Misc,两周就能在比赛里拿分。不是方向好坏的问题,是匹配度的问题。CTF入门期最重要的是保持能持续解锁新知识的感觉。

1.3 入坑前的预期管理

这里说句实话:CTF不是速成的竞赛。它的知识点非常碎,而且每年出题人都在变着花样融合旧知识。想“入门到精通”,不是靠背几篇文章,而是靠几百道题的积累。

但好消息是,大部分赛题都是“常规基础+一个巧思”的组合。你只要把通用基础打牢,比赛中至少能稳住三成题目。比赛结束后,主办方一般会公开writeup,也就是解题思路稿,这是最宝贵的学习资料。建议每次比赛后都把做过的、没做过的题重新过一遍,哪怕只看别人怎么写,也比闷头刷题有效得多。

2. Web方向入门:出题人最爱考的六类基础

2.1 SQL注入:从“有回显报错”到“闭合查询”

Web方向几乎是所有CTF的“主菜”,因为它考的是最常见的信息系统安全问题。其中SQL注入又是基础中的基础。很多新人以为SQL注入就是登录框里加一个万能密码,实际上题目更常考的是在参数后面注入语句,通过报错、盲注、联合查询等方式把数据库内容“挤”出来。

一道最简单的SQL注入题,通常会给你一个查询接口,比如?id=1。我习惯的第一步是测试单引号:?id=1'。如果页面报错,说明单引号可能进入了数据库查询逻辑。接着要判断列数,用order by 1、order by 2一个个试,直到报错。这一步是为了确定当前查询返回了几列,方便后面用union select拼接内容。

很多新人会问我,什么时候该用sqlmap。我的观点是:比赛中能手工分析就手工分析,别一上来就跑工具。sqlmap能跑通的前提是环境稳定、注入点明显,但CTF往往会加入过滤、waf或者无回显因素。手工判断闭合方式、注入类型,能让你在题目魔改时依然知道发生了什么。举个常见错误:有的题目过滤了空格,有的过滤了关键字select,如果你只会跑默认参数,很容易被卡死。

2.2 XSS、文件上传与命令执行:三种“信任滥用”

XSS全称跨站脚本,简单说就是攻击者把脚本塞到受害者页面里执行。CTF里纯XSS出现频率不如前几年高,但仍然是常客。真要碰到了,重点往往不是弹窗,而是如何构造一个能在目标浏览器里执行的payload,比如通过<script>alert(1)</script>来判断过滤规则,再一步步绕过。

文件上传则是另一个高发考点。服务端如果只看后缀名,不看文件内容,就会出问题。新手需要理解一句话木马、图片马这些概念,还要搞清楚配置文件解析、路径穿透等技巧。我一向建议在本地搭一个简单的PHP环境,自己写个上传点试试,这样比背payload理解深得多。

命令执行也很典型,常见出现在“Ping检测”这类功能。题面让你输入IP地址,后端可能直接拼接系统命令。你可以通过分号、管道符、换行符等尝试执行额外命令。这个方向最重要的是学会辨别“是哪一层过滤被绕过了”,是空格被过滤,还是关键字被过滤,还是整个输入都被直接拼接到shell里。

2.3 Web题的基本工具链与抓包调试习惯

Web方向没有趁手工具是不行的,但也没必要一上来装一堆。我的最小工具集是这三样:Burp Suite,用来抓包改包;Hackbar或浏览器开发者工具,用来快速改请求;一个字符集和编码转换工具,用来处理URL编码、Base64、Hex。

Burp Suite是必学的,哪怕只用代理和Repeater功能也够用。很多新手第一次用完一脸懵,不知道请求在哪里改。其实核心流程很简单:让浏览器走Burp的代理,然后在拦截到请求后发给Repeater,手动修改参数观察响应。CTF里大量动态flag和条件判断都要靠改包来完成。

这里强调一个习惯:每次改动请求前,先把原始请求复制保存到文本文件。因为比赛时很容易改来改去把自己绕晕,保存原始报文能帮你回到原点。我见过很多人在一道Web题上反复横跳,最后才发现是cookie里的一个字段漏看了,而原始请求里明明有提示。保留现场是排查问题最省钱的办法。

2.4 Web方向避坑清单

  • 不要忽略响应头。很多提示藏在Set-Cookie、X-Powered-By、自定义header里。
  • 过滤规则不是非黑即白。有的题过滤了select,但没过滤SeLeCt或%73elect,大小写和编码绕过要会。
  • 先看robots.txt、源码注释、备份文件,再动手注入。信息收集永远走在漏洞利用前面。
  • 遇到登录类功能,先想想验证逻辑到底在前端还是后端。前端校验可以直接绕过。
  • 执行命令时,分号和管道符是尝试顺序,不要只试一个。

3. 逆向与Pwn方向的基础认知

3.1 逆向入门:从拿到二进制到定位关键函数

逆向方向简单说就是给你一个编译好的程序,让你在不看源码的情况下分析它、破解它的逻辑,最终拿到flag或者让程序输出隐藏内容。新人最大的障碍是“不知道从哪里看起”。

我的习惯是先看文件类型。拿到一个二进制文件,先用file命令确认架构和是否加壳。如果是Linux ELF,我一般直接拖进反汇编工具,比如Ghidra或IDA,先反编译出伪代码。这一步不需要逐行读汇编,重点是用伪代码把程序的主流程理出来,找到main函数、输入点、判断点、控制流。

定位关键函数是逆向的核心。比较常见的方法是看字符串引用:strings命令可以列出程序里的可见字符串,如果看到类似Congratulations、Wrong、flag{等字样,一个快捷键就能跳到引用位置。找到判断“成功/失败”的分支后,分析它的逻辑条件,就能逆推出应该输入什么。

入门阶段我不建议一上来啃混淆或壳。先找几道不加壳、逻辑简单、判断条件明显的题目练习。用Ghidra反编译后,对照汇编视图理解“哪个寄存器参与了比较”“哪个内存被写入”,重复二十道题,基本就能形成手感。

3.2 Pwn入门:三块基石——栈溢出、格式化字符串和整数溢出

Pwn方向考验的是利用程序漏洞控制执行流程。它需要一点汇编、一点内存布局概念,但入门时不需要立刻变成内核专家。最优先掌握的三个点,也是CTF中最常见的三个考法。

栈溢出是最经典的考点。核心原理是:函数在栈上存放局部变量和返回地址,如果向一个缓冲区写入的数据超过了缓冲区大小,就可能覆盖掉后面的返回地址。一旦返回地址被控制,程序就会跳转到攻击者指定的位置。做这类题时,你要先搞清楚缓冲区和返回地址之间的距离,这个距离可以通过调试工具计算,也可以用pattern生成一串特征字符串来确定偏移。

格式化字符串是另一个常见漏洞。当程序把用户输入直接当作printf的第一个参数时,%s、%n、%x就能用来泄露内存或者写内存。Python的fmtstr工具在攻防赛里很好用,但理解原理更重要:它会按照参数列表从栈上“取”数据,我们通过控制格式字符数量来精准定位偏移。

整数溢出相对容易被忽略。当程序用无符号整数接收输入,又直接参与长度计算时,一个负数或超大数可能绕过检查。入门时记住一句话:长度、索引、数量三类变量都要做边界检查,出题人就是看不惯你没检查它们。

3.3 逆向与Pwn的共通道具

在这个方向,推荐的调试工具是gdb加插件,推荐的反编译器是Ghidra或IDA。很多新手喜欢找一个所谓“最强配置”,其实没必要。你只需要熟记几个快捷键:反编译、查看引用、跳转地址、设置断点、查看寄存器。

分析Pwn题时,远程环境通常会在一个socat起的端口上运行程序。本地调试没问题后,要用同样的libc版本和环境去打远程。很多新手本地能打通,远程就失败,大概率是偏移或libc版本不对。这里建议比赛前把常用libc下载到本地,在题目给的提示信息里找到版本,再做对应的适配。

4. 密码学:常见加密方式的识别与解法

4.1 古典密码与编码:先做“眼睛识别”,再上工具

密码学方向的题目不一定都需要高深数学。实际上大量低分题是在考察你的“识别能力”。看到一段密文,第一反应不是去跑脚本,而是先用眼睛判断它属于哪一类。

比如ZmxhZ3t...这样的字符串,特征是以大小写字母和数字混合结尾还有等号,基本可以直接认出是Base64编码。d4e5f6a7b8c9...这类十六进制字符常见于Hex编码或某种加密后的输出。如果是U2FsdGVkX1...,这可能是一段被某种密码库加密后的密文,可以尝试用在线工具测试。至于凯撒、栅栏、维吉尼亚这类古典密码,特征更明显:字母频率、间隔分布、短词形态都能给线索。

我的建议是手边常备一个密码识别工具集,比如CyberChef和在线古典密码工具。但别只依赖“自动检测”,因为出题人经常故意混合多种编码,比如Base64解出来还是Base64,再解一层才是flag。手动尝试每层解码,并记录过程,能帮你快速回溯。

4.2 现代密码题:RSA基本功与常见攻击模型

现代密码学里,RSA是竞赛出现频率最高的考法。它考的不是你懂不懂数论,而是你能不能识别“哪一种经典的错误配置”。

RSA的基础参数是p、q两个大素数,n = p*q,公钥是(e, n),私钥是(d, n)。CTF里最常见的几种攻击方式有:n分解(如果p和q选得太小或太接近),低加密指数攻击(e=3且密文特别小),共模攻击(同一个n发了两次,用了不同e),还有dp泄露、私钥文件损坏等。

新手不需要把这几种都背下来。我建议先看懂n分解。现在有很多现成的工具可以直接分解,比如yafu。遇到RSA题,第一步永远是:看题目给了什么参数。如果给了n、e、c,优先尝试分解n。如果n是128位或256位,在线分解很快;如果n很大,就要考虑是不是逻辑问题,比如p和q太小,或者n其实有公因子。

还要提一下对称密码,AES这类题目在CTF中往往不直接考破译,而是考模式识别。比如ECB模式明文分组相同,如果密文有重复块,就能猜出明文有重复内容。这类题更锻炼的是对结构体的敏感度。

4.3 密码学解题的输入输出意识

学密码学方向,最怕的是会跑脚本但不会读参数格式。解题时先确认题目里每个量的单位:是十进制还是十六进制,是字符串还是就在文件里。c = pow(m, e, n)是加密公式,但有的题目直接给了m的十六进制,你却当成字符串处理,结果全是乱码。

我自己的习惯是,每道密码题都写一个备注文件,记录题目给的每个参数、来源、格式、猜测方向。这样即使做不出来,复盘时也能快速对照别人的writeup。

5. Misc杂项:比想象的更吃基础功

5.1 文件隐写与图片隐写:一个固定的检查顺序

Misc杂项经常被当作“送分题”,但其实是知识面最杂的方向。它可能包含流量分析、文件分析、图片隐写、压缩包密码、编码题、取证题等。拿分的关键是有一套固定的检查顺序,而不是东摸一下西碰一下。

拿到任何文件,我建议按这个顺序查:首先用file看真实类型,可能扩展名被改了;然后用binwalk或foremost扫描是否有嵌入文件;再用strings看可见字符串;最后检查文件尾部的额外数据。这一步可以过滤掉一半的隐写题。

图片隐写里最出名的是LSB隐写,也就是把flag信息藏在像素的最后一个二进制位上。这种题用脚本读像素就能解。先看一下是否是24位图还是32位图,再决定提取顺序。我给新人写过最简单的一个提取脚本思路,就是遍历像素点,把红色、绿色、蓝色通道的低位取出来拼成字符串。不一定每次成功,因为出题人可能按行、按列或者按通道顺序处理,但你先把最直接的方案跑通,再根据结果调整。

下面是一个基础提取示例,注释里写了每一步在干什么:

from PIL import Image img = Image.open("flag.png") # 确保转换到RGB模式,方便逐像素读取 img = img.convert("RGB") width, height = img.size bits = [] for y in range(height): for x in range(width): r, g, b = img.getpixel((x, y)) # 如果红通道是奇数,说明最低位是1 bits.append(str(r & 1)) # 每8个位拼成一个字符 flag = "" for i in range(0, len(bits), 8): byte = bits[i:i+8] if len(byte) < 8: break flag += chr(int("".join(byte), 2)) print(flag)

这段代码只适用于最简单的“按行读取红通道最低位”的题目。如果输出乱码,就改成读取g通道、b通道,或者把y和x换一下顺序。多试几种组合,比盲目改参数更有效。

5.2 流量分析、压缩包与编码题:基础操作的组合

流量分析题是很常见的Misc分支。题目通常会给你一个.pcap文件,让你从网络通信里找隐藏信息。最基础的操作是用Wireshark打开,先用http过滤器看有没有HTTP请求,再用tcp contains "flag"搜索关键字。如果看到上传下载的文件,可以直接用“导出对象”功能把文件抠出来。

压缩包坑点也非常多。有的压缩包是伪加密,也就是修改了标志位,实际上并没有加密。遇到加密包先别急着爆破,你先用十六进制工具看压缩包头部标识。如果发现加密位被修改过,直接把那个标志位改回去就能解压。另外,有些压缩包可以尝试“明文攻击”,但前提是你知道压缩包内某个文件的部分内容。这属于进阶玩法,入门时可以把重点放在伪加密和弱口令爆破上。

编码题则是一种最常见的“基础搬运”。它的难点不在于某个算法,而在于你能否把一串看似乱码的东西识别成某种编码。我的建议是,把常见的编码特征做成一个对照表贴在笔记里:Base64结尾有=,十六进制全是0-9a-f,URL编码有大量%,Unicode显示为\u开头。比赛时遇到不能一眼识别的字符串,就按这个对照表去套。

5.3 Misc方向的时间分配策略

Misc最迷惑人的地方是“看起来简单”。有时候你在一张图片上折腾一小时,最后发现flag就在文件注释里。所以我的个人建议是:限时。每道Misc题只给自己二十分钟,如果二十分钟内没有进展,就先把能做的通用检查做完,然后换下一道。等整张卷子刷完,再回头来看难题。

原因很简单,Misc题目往往藏得“浅而碎”,你一直死磕一道题,不如先保证把其他题里同样浅层的分拿到。真正的深度隐写题往往需要特殊脚本和工具,短时间内不一定能搞出来,留着赛后学习反而更从容。

6. 刷题、建环境与长期成长

6.1 本地靶场搭建:用虚拟机做隔离,少走弯路

学CTF一定要动手搭本地环境,尤其是Web和Pwn方向。很多人喜欢在自己的主力机上直接跑各种漏洞环境,结果中了病毒或后门,得不偿失。我的习惯是搭建一台虚拟机,只用来做CTF实验。在这台虚拟机里装好常用工具:Burp Suite、IDA、Ghidra、Python环境、gdb,以及一些扫描脚本。

虚拟机的快照功能非常有用。每次比赛前创建一个干净快照,比赛过程中如果环境搞乱了,直接恢复,节约重装时间。另外,本地跑Web题目时,尽量用Docker容器来启动题目环境,因为很多开源题目镜像都会自带一个Dockerfile,用容器跑既隔离又方便清理。

这里还要劝一句:不要为了“秀操作”去互联网上扫描真实系统练手。CTF的价值在于在合法授权、离线环境里学习漏洞原理。这个边界守得住,你的学习路径才走得长。

6.2 从刷题到复盘:如何高效沉淀笔记

很多人刷题是“做出来就丢”,这很浪费。我发现真正进步快的选手都有一个习惯:写复盘笔记。笔记不需要很长,但要包含三块:题目考点、解题思路、关键操作。考点可以是一个标签,比如“SQL注入+空格绕过”“RSA+共模攻击”。解题思路则要写清楚从拿到题到出flag全过程的每一步。关键操作要记工具的命令、参数、脚本片段,方便下次直接复用。

我习惯把笔记按方向分文件夹,比如web/、crypto/、misc/、pwn/。在每个文件夹下,用题目名作为文件名。下次遇到类似题目,先翻笔记看有没有相关操作。这样你刷过一百道题,等于存了一百个“可复用套路”,比赛时检索起来非常快。

另一个习惯是定期整理“错误清单”。比如我把每次看错题面、用错工具版本、拼错flag格式的情况都记到一个文件里。比赛前过一遍,能避免重复踩坑。flag格式这个事听起来很幼稚,但实际上很多队伍在最简单的题上丢分,就是因为大小写、花括号、下划线的位置错了。

6.3 推荐的学习节奏与比赛规划

入门阶段,我建议先花两到三周只做一件事:跟着一个方向的基础教程把题目过一遍。这期间不需要追求难题目,哪怕一天只刷一道题,只要把原理搞清楚,都比一天看十篇“速成大法”强。之后再进入稳定期,每周固定刷几道题,参加平台上的在线赛。

比赛选择上,可以先参加新手友好型比赛,或者学校内部赛。这类比赛题目难度梯度清晰,会有很多基础分题。等你在基础题上比较稳定了,再尝试有AWD环节的比赛。攻防赛的临场反应能力,只能通过实战来提升。第一次被打穿是很正常的,但一定要让队友录屏、复盘,搞清楚对方的打法,下次才能防守住。

我个人在做题时还有一个体会:一定要给自己设定“出题人视角”。每做完一道题,反过来想想,如果我是出题人,我会把坑放在哪里?这个习惯会让你的思路开阔很多。题目里每一个看似奇怪的地方,都可能是出题人故意留下的线索。做CTF不是比谁工具多,而是比谁更能理解代码和协议背后的误差与边界。把这些基础盘扎实之后,你自然能从入门走向“看到题目不慌”的状态。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 6:01:01

内部工具免命令交付:自解压包+静默安装一键部署实战

你肯定见过这种场景&#xff1a;一个挺好用的软件&#xff0c;开发同学顺手写了发布到内网&#xff0c;结果到了行政、运营、甚至自家老板那&#xff0c;一个个都对着黑乎乎的终端窗口发怵。“你得先装个运行时环境&#xff0c;再敲几行命令……”话还没说完&#xff0c;对方已…

作者头像 李华
网站建设 2026/10/21 6:00:54

智慧园区智能化系统总体规划设计方案:从架构到落地

去年年中我做了一套《&#xff08;129页PPT&#xff09;智慧园区智能化系统总体规划设计方案》&#xff0c;从需求调研到最终定稿&#xff0c;前后磨了一个半月。发布之后几乎每周都能收到同行的私信&#xff0c;问得最多的不是某个摄像头怎么选&#xff0c;而是&#xff1a;这…

作者头像 李华
网站建设 2026/10/21 6:00:33

知识工作流操作系统:状态感知插件与声明式剧本实践

1. “knowledge-work-plugins”不是插件集合&#xff0c;而是一套知识工作者的数字工作流操作系统“knowledge-work-plugins”这个标题乍看像某个开源仓库的命名&#xff0c;甚至可能被误认为是VS Code里一堆零散插件的打包合集。但如果你真这么理解&#xff0c;就错过了它背后…

作者头像 李华
网站建设 2026/10/21 6:00:20

挖矿病毒实战排查与清除:从CPU异常到系统加固的完整指南

从事网络安全工作这些年&#xff0c;处理最多的其实不是那些高深莫测的0day漏洞&#xff0c;反而是挖矿木马这种"脏活累活"。几乎每个月都能遇到几台被入侵后沦为挖矿肉鸡的服务器&#xff0c;有的是内部同事的测试机&#xff0c;有的是客户生产环境里的数据库节点。…

作者头像 李华
网站建设 2026/10/21 5:57:49

第 11 篇 DMA 掩码与寻址能力协商:dma_set_mask 与 SWIOTLB

本文属于第三册“内核抽象&#xff1a;dma-mapping 接口的设计原则”&#xff0c;回答第 0 篇提出的问题 11&#xff1a; 驱动为何需要声明 DMA 掩码&#xff1f;掩码设置不当会引入何种性能代价&#xff1f; 本文首先说明掩码的声明接口及内核判断掩码能否满足的依据&#x…

作者头像 李华
网站建设 2026/10/21 5:57:24

地图服务模块实践:坐标转换、地理编码与渲染链路设计

做地图功能这几年&#xff0c;我最大的体会是&#xff1a;地图本身不复杂&#xff0c;复杂的是地图背后的数据链路。坐标从哪来、怎么落到图上、高并发下怎么不被打挂&#xff0c;这些才是真正花时间的地方。lingbot-map 是我在做某机器人项目时沉淀出来的一个地图服务模块&…

作者头像 李华