CTF入门三个月实战路线图:从零基础到独立完赛

发布时间:2026/9/23 3:48:55
CTF入门三个月实战路线图:从零基础到独立完赛
1. 先定个现实的目标三个月后你该会什么不该会什么1.1 三个月的目标不是“拿奖”而是“独立完赛”CTFCapture The Flag夺旗赛这几年在网络安全圈子里出现的频率越来越高很多高校战队、安全公司招人、甚至招聘简历上都把CTF经历写得很重。但大多数人第一次接触CTF时的状态和我当年一模一样收藏了一堆学习路线图和资料包结果三个月后还在“从零开始”。真正把CTF学起来靠的不是更多的收藏而是一份能执行的路线、一个能持续的节奏以及每天稳定投入的那一两个小时。这篇文章要讲的就是一份可以直接照做的三个月实战路线图。目标定得很实在三个月后你能够独立上手打一场正规CTF比赛能解出签到题和部分简单题能顺利提交flag能看懂大部分WriteUp也就是WP解题报告不会在比赛里全程蒙圈。能不能拿奖说实话三个月的训练量拿奖要看运气和天赋但“能参赛”和“能拿奖”之间隔着至少半年的实战积累我们要先把前者搞定。适合谁来读完全没有接触过安全、甚至编程都不太熟练的纯小白以及那些已经零零散散学了一点、但始终没有体系的朋友。如果你已经在某个方向上刷了几百道题这篇对你来说可能太基础但用来带新人、整理团队训练节奏也是不错的参照。1.2 每天两小时和每周一次集中训练哪个更重要先说一个反直觉的结论三个月能不能出效果不在于你周末爆发式学八个小时而在于你能不能做到工作日每天雷打不动地投入一到两个小时。CTF的知识点非常碎今天学一条命令、明天看一个漏洞原理、后天写一个小脚本看起来都不起眼但碎知识点之间是有依赖关系的断了三天再捡起来前面学的东西基本就还给资料了。我建议的节奏是工作日每天1.5到2小时周末挑出半天做集中刷题和复盘。三个月算下来有效学习时间能到180到240小时。这个量级用来“全面精通”肯定不够但用来“建立全局认知、熟悉一类题型、具备完赛能力”是完全足够的。1.3 三个月周期拆解一底二专三实战三个月不能平均用力我的拆分方式是阶段时间核心任务完成标志第一个月第1-4周广度覆盖Web、Misc、Crypto三大方向入门知道每种题型在考什么能独立做出各自方向的前十几道简单题第二个月第5-8周选定主攻方向专项深入在一个方向上稳定做出中等难度题能看懂高阶WP第三个月第9-12周模拟赛、复盘、查漏补缺完整打完至少两场线上赛赛后能自己复盘为什么第一个月不直接定方向因为CTF有Web、Pwn、Reverse、Crypto、Misc五大方向每个方向需要的基础能力差别很大。你不亲自碰一碰光看别人说“Pwn天花板高”“Web最实用”是没有体感的。第一个月把每个方向都摸一遍第二个月再选自己最有兴趣、也最容易出正反馈的那条路深耕效率反而更高。2. 装备与习惯开始学CTF之前要准备的四件事2.1 一台装了Ubuntu的虚拟机比Kali更适合起步很多新手会问“我是不是应该直接装Kali Linux”我的建议是第一个月别碰Kali装一台Ubuntu虚拟机就够了。原因很简单Kali里预装了几百个工具你根本不知道先用哪个光是面对那一屏的工具列表就会产生焦虑感。Ubuntu干净装什么工具自己心里有数遇到坑也更容易排查。虚拟机平台用VMware或VirtualBox都行跟着官方教程装一个Ubuntu 22.04 LTS然后装好Python 3、Docker、Chrome浏览器环境就算齐了。Windows笔记本也完全可以用WSL2替代虚拟机日常写脚本和跑Linux命令都很顺但涉及流量抓取、USB设备分析这类需要和硬件交互的题目时还是传统虚拟机更好用。2.2 Python不需要精通但要会用这五个库CTF圈的“通用语言”是Python但你不需要学到能写爬虫框架的程度能把下面五个库玩明白第一二个月的题基本就不会因为脚本卡壳requests发HTTP请求Web题最常用re正则匹配从响应里提取flagbinascii十六进制和字节串互转Crypto和Misc都会用hashlib算各类哈希值碰密码学题必用subprocess在Python里调用系统命令。举个例子你拿到一个Web题知道flag藏在某个请求的响应头里用Python写起来就是import requests r requests.get(http://target.com/flag.php) print(r.text) print(r.headers)这种脚本不需要背写到笔记里用的时候翻出来改改就行。CTF要的从来不是背代码而是知道“该用哪个工具解决当前问题”。2.3 记录和复盘的底层逻辑笔记仓库个人WP这一条是我特别想强调的。同样的题有些人刷一遍就忘有些人能从中提炼出一类题的解法差距就在记录。我建议从第一天就建一个笔记仓库用什么工具不重要GitHub私有仓库、本地Markdown文件夹都行关键是记录模板要固定题目名称和来源考点标签比如“命令执行”“USB流量”“RSA共模”解题过程中用到的关键命令、Payload和脚本当时的卡点在哪最后怎么解决的这道题能抽象出什么通用解法我见过太多人半年刷了三百道题回头问他“SQL注入的万能密码有哪些绕过方式”答不上来。因为没有沉淀。哪怕你每天只记录一道题三个月也有将近一百条笔记这些才是你真正攒下的资产。2.4 检索信息的能力才是CTF的第六个方向CTF五大方向之外还有一个隐藏方向就是信息检索。做题时遇到奇怪的报错、第一次见的函数、某个工具的输出格式看不懂绝大多数情况下你遇到坑别人已经踩过了。我的习惯是把报错信息原文复制到搜索引擎里搜比如“tshark usb.capdata 提取”“RSA给了两个n和一个e 怎么解”通常前几条结果就能解决问题。这里也有个心态问题遇到不会的东西第一反应不是“我太菜了”而是“这个知识点可以通过什么方式快速搞懂”。有了这个习惯你后面学任何新方向都会比别人快很多。3. 第一个月用三大方向快速建立手感3.1 Web从请求与响应开始越早接触越有感觉Web方向是CTF里最贴近真实网络安全工作的方向也是新手最容易产生成就感的方向。第一个月不需要深入理解浏览器原理把这几件事搞明白就行。第一件事是熟练使用浏览器的开发者工具F12学会看HTTP请求的URL、请求头、响应体、Cookie。CTF里大量题目就是让你通过修改请求来拿到flag比如把GET改成POST、把某个参数从0改成1、在Cookie里伪造身份。第二件事是了解Web方向的高频考点SQL注入、命令执行、文件上传、信息泄露、反序列化等。第一个月不用全会按照“SQL注入 → 命令执行 → 文件上传 → 信息泄露”这个顺序刷题就行。这里我特别推荐把前两周的时间花在SQL注入和命令执行上因为这两个考点原理清晰、题目多、套路固定新手很容易做出正反馈。3.2 Misc最容易拿分的“杂货铺”但杂而不浅Misc杂项是CTF里最“不挑基础”的方向也是最适合小白入门找信心的方向。它考察的东西很杂图片隐写、压缩包密码、流量分析、编码转换、音频分析、内存取证……好处是不需要太多前置知识坏处是工具特别多每类题目都要认一下对应的工具。第一个月我的建议是掌握下面这张工具清单的入门用法strings在文件里搜索可打印字符串很多flag直接藏在里面binwalk探测文件里是否嵌了其他文件自动分离foremost按文件类型还原文件常用于图片隐写stegsolve查看图片的各个通道、LSB隐写Wireshark流量分析之王先学会用Follow TCP Stream 看HTTP明文流量010 Editor十六进制编辑器观察文件头和结构。Misc题很多时候就是“用工具三板斧”先strings再binwalk不行就上 Wireshark 或者在十六进制里找可疑内容。第一个月能把这套流程跑熟Misc的基础就算打牢了。3.3 Crypto区分“编码”和“加密”是入门第一课Crypto方向大概是劝退新手最严重的地方很多人一看到数学公式就头疼。其实CTF里的Crypto题并不全是高大上的密码学理论入门阶段很大一部分反而是“解码题”Base64、十六进制、URL编码、摩斯电码、凯撒密码、栅栏密码。这里必须先建立一个关键认知编码和加密是两回事。Base64、Hex这类东西是可逆的编码目的不是保护信息而是转换表示形式用Python的base64库或CyberChef这类工具就能直接解。而加密需要用密钥比如凯撒密码、维吉尼亚密码、AES、RSA。第一个月Crypto只需要做两件事第一把常见的编码和古典密码认全会查表、会用工具解第二把RSA入门题刷上十道左右记住最基础的解密流程已知n、e和密文c如果能分解n得到p和q就可以算私钥d再解出明文。这个过程背后的数论原理暂时不理解也不影响做题但最好还是了解一下模运算和欧拉函数对后续深入有好处。3.4 第一个月先别碰Pwn和Reverse原因在这里五大方向里Pwn二进制漏洞利用和Reverse逆向工程是最吃前置知识的两个方向。Reverse需要懂汇编、懂PE/ELF文件格式、会用IDA和GDBPwn则需要懂内存布局、栈帧、ROP链。这些知识不是不能学但在三个月路线里它们的时间性价比不如Web、Misc和Crypto。第一个月的重点是快速建立“我能做出来题”的成就感Pwn和Reverse恰好是最难给新手成就感的方向。所以我的策略是第一个月完全不碰第二个月根据兴趣决定要不要了解第三个月如果发现比赛里这两类题分值很高再针对性地补基础。4. 第一个月怎么练入门靶场和日刷题量4.1 新手入门靶场怎么选靶场是CTF学习的核心场所就像健身房的器械一样光看视频不上去练是永远不会有肌肉的。第一个月我建议同时用两个平台CTFHub和BUUCTF。CTFHub是按技能树分类的靶场Web、Misc、Crypto下面又细分成一个个具体考点比如SQL注入下面会分“整数型”“字符型”“报错注入”等等非常适合按部就班地刷。BUUCTF的题目大多是历年国内外赛事的原题题目量大但难度不均新手容易一进去就被难倒。所以我的用法是在CTFHub上按考点刷基础题刷到某个考点有感觉了再去BUUCTF找同考点的高质量题目练手。4.2 每天刷多少题刷到什么程度算“会了”关于刷题量我给一个具体可执行的参考工作日每天2到3道题周末集中复盘一周做过的题。这三个月的路线我不主张“一味多刷”更重要的是刷一道会一类。判断自己是不是真会了一道题标准很简单把这道题的思路不看任何资料地复述出来并且能解释每一步为什么要这样做。如果你能做到不看WP独立重做一遍那这道题才算真正变成你自己的。每天做题之后顺手记录到笔记里这条习惯比多刷两道题重要得多。5. 第二个月选定主攻赛道把一道题吃透比刷十道有用5.1 怎么判断自己适合哪个方向第一个月把Web、Misc、Crypto都摸了一遍之后第二个月就要做一次方向选择的决策。我的建议标准就一条哪个方向让你“做题的时候不觉得痛苦、解出来之后还愿意继续看”就选哪个。这个标准听起来很主观但比各种“职业前景分析”靠谱得多。如果Web题你总是有动力去追根究底那就深耕Web如果Misc的流量分析让你感觉像侦探破案那就专攻Misc如果Crypto的数学推导让你兴奋那就别犹豫。说实话三个月时间只够在一个方向上形成真正的深度全面开花是不可能的。5.2 从一道命令执行题看Web题的完整分析链路第二个月我会重点训练一类题的分析链路。就拿热词里出现过的PHP命令执行passthru来当例子。题目代码往往长这样?php if (isset($_GET[cmd])) { passthru($_GET[cmd]); } ?拿到这种题第一步是识别危险函数。passthru()会把外部命令的原始输出直接打印到页面上和system()、exec()、shell_exec()一样都属于PHP命令执行函数但细节不同exec()只返回最后一行输出shell_exec()返回完整输出system()直接输出passthru()适合处理二进制等特殊输出。知道这些区别你才知道出题人为什么用这个函数。第二步是构造第一个探测请求。先用?cmdls看看当前目录里有什么文件再用?cmdcat flag.php尝试读取flag。如果flag.php里的PHP代码被直接执行导致看不到源码可以用?cmdcat index.php配合浏览器的view-source功能查看原始PHP代码或者用curl访问源码页再处理。第三步是绕过过滤。常见过滤手段有把空格过滤掉可以用${IFS}代替空格把flag关键字过滤掉可以用通配符cat fla*把cat过滤掉可以用tac、more、less、head、tail等命令替代。这类绕过技巧没有统一的解法平时刷题时注意积累笔记的作用这时候就体现出来了。如果命令执行是无回显的命令执行了但页面不输出任何内容还有两个思路一个是通过DNSLog等手段带外接收数据另一个是把命令输出重定向写到web目录下的文件里然后再访问这个文件。但这类操作只建议在CTF靶场和授权实验环境中使用。5.3 流量分析专项从.pcapng文件里提取USB按键数据流量类Misc题是近年比赛里的常客其中.pcapng格式的USB流量题更是高频题型。这类题看起来很难实际套路非常固定非常适合作为第二个月的专项训练题。拿到.pcapng文件先拖进Wireshark在过滤栏输入usb.capdata会看到很多形如00000c0000000000的十六进制数据。USB键盘流量包通常是8字节其中第3个字节就是按键码比如0x04对应A键0x05对应B键0x06对应C键0x1e对应数字1。另一个关键点是第2个字节0x02表示同时按下了左Shift键这时候按键码对应的是大写字母或符号。提取数据的命令可以写成tshark -r usb.pcapng -Y usb.capdata -T fields -e usb.capdata接下来的事情就是写一个Python小脚本把按键码映射成字符把所有按键拼在一起得到一串字符串里面往往就藏着flag。这类题考的不是什么高深算法而是你懂不懂USB协议的基本结构、会不会用Wireshark提取字段、能不能耐下性子写脚本。这就是Misc方向的典型风格。5.4 Crypto专项MT19937这类题为什么值得死磕再举一个Crypto方向的例子MT19937也就是Python里random模块默认使用的梅森旋转伪随机数生成算法。这类题的热度这几年一直很高因为它介于“纯数学”和“实际编程”之间考的是对随机数生成机制的理解和工具的熟练度。题目特征很典型给你一串由Python的random.randrange(32)生成的随机数要求你预测下一个随机数。如果你知道MT19937的内部状态是624个32位整数那你就会想到当我拿到连续624个输出之后就可以用现成工具randcrack恢复这个随机数生成器的内部状态进而预测之后的所有随机数。做题脚本大致长这样from randcrack import RandCrack rc RandCrack() for num in outputs: # outputs 是题目给出的 624 个随机数 rc.submit(num) print(rc.predict_getrandbits(32))很多Crypto题会用它生成的“随机数”当异或密钥或者混淆数据你只要能预测出后续输出就能还原出真正的明文。这类题的启发是CTF的Crypto远不止是数学题识别算法特征、调用现成工具、把数学原理落到代码上这套能力才是比赛里真正值钱的。6. 第三个月从刷题到参赛中间只差这一步6.1 赛前一个月模拟赛和每日一题怎么安排第三个月的核心任务就是“模拟赛”。如果你前两个月是按每天一到两小时、周末半天刷题的节奏过来的第三个月你就应该开始找比赛的节奏感。比赛和刷题完全是两种状态。刷题可以随时暂停、随时看资料但比赛有时间压力每个题都跟其他队伍在比速度而且赛题往往不像靶场题那样按考点排好。所以我建议第三个月的安排调整为工作日每天做一道当日推荐题随便哪个平台都行重点是保持手感和速度周末参加一场线上赛或者自己组织一场小范围的团队模拟赛。线上赛去哪里找国内各个安全社区和CTF平台经常发布赛事信息留意一下就能找到。不用挑规模大的比赛很多小型赛事反而更适合新手题目难度分布对初学者更友好。6.2 线上赛的真实流程注册、签到、拿分顺序第一次参赛的人最需要先熟悉流程。比赛开始前半小时进入官网确认账号能登录、能看到赛题列表然后等比赛开始。开赛后千万不要从第一题顺序往下做而要按“拿分效率”排序。签到题和Web/Misc方向的简单题永远是第一优先级因为这些题可能五分钟就能拿分。Crypto里套了模板的题排在第二优先级Reverse和Pwn的题如果第一眼看不出考点就直接跳过。比赛时间有限先保证把能拿的分全部拿到再回头啃硬骨头。交flag的时候有几个细节容易踩坑注意flag的格式和大小写有的比赛要求带flag{}外壳有的只填内容提交后如果显示格式错误先检查是不是多了空格或者换行每提交一个有效flag都会实时计分看到分数跳动的时候确实是这三个月最爽的瞬间。6.3 赛后复盘把WriteUp变成自己的“错题本”比赛结束后别急着休息真正的学习才刚刚开始。赛后复盘我通常分三步走。第一步收集题目和官方WriteUp。大部分比赛结束后会公开官方WP还有参赛者自己写的解题报告。把所有题目和WP收集到一个文件夹里。第二步逐题对照自己的笔记。做出来的题想一想有没有更优解法没做出来的题看WP理解考点后合上WP重新做一遍。做题时必须亲自动手而不是看完觉得“原来这么简单”就关掉。第三步把新知识点拆解归档到个人笔记。这个题考的是哪个方向用了什么工具有没有通用的payload以后遇到类似特征我该从哪入手把这些写下来这场比赛的收获才算真正沉淀下来。6.4 团队赛怎么分配角色如果第三个月能报名参加团队赛还有一件事需要提前想好五个人怎么分工。CTF战队通常按方向分工Web、Pwn、Reverse、Crypto、Misc各一人。新手团队常常出现的问题是三个人挤在Web题上其他方向没人看。正确的做法是开赛第一天就确认好每个人的负责方向一人主攻一个方向其他队友的题如果卡住了可以有一个人去帮忙。队长这个角色也很重要负责统揽全局哪道题被解出来了、哪道题快被解出来了、哪道题卡了多久、要不要建议队员先换题。队长不一定是技术最强的但一定是对比赛节奏最敏感的那个。7. 路线图配套靶场与题目资源清单7.1 入门期最值得用的四个靶场平台特点适用人群注意事项CTFHub按技能树分类考点清晰新手按部就班刷题建议作为前期主战场BUUCTF题量大收录历年赛题刷完基础题后的进阶选择难度不均衡新人易受挫攻防世界老牌平台题目质量高有一定基础后刷题部分老题环境不稳定polarCTF难度分梯度贴近实战边学边打比赛合适适合第三个月模拟赛另外NSSCTF等新平台环境稳定、题目更新快也可以作为补充。我的建议是不要贪多一个主平台刷透两个辅助平台刷特定考点就够了。靶场再多打开三天就关掉和没有一样。7.2 从热词看当前CTF出题趋势如果你关注各类CTF资讯平台的热搜词会发现几个挺明显的趋势一是AI相关题目开始出现“AICTF”逐渐成为新赛道有的比赛会要求选手利用大模型做推理、做漏洞分析二是车联网安全等垂直领域的CTF赛事多了起来题目场景更贴近真实产品三是经典的Web命令执行、流量分析、USB流量类题型依然是永远的主流。对三个月学习路线的影响是第一、二个月老老实实打好经典题型的基础第三个月可以留出一点时间了解AI相关安全工具和最新的比赛动态。经典题型的解法是“存量”新趋势是“增量”没有前者撑腰后者就是空中楼阁。7.3 一份能持续使用的学习资源清单最后给一份不是特别长但足够用的清单。CTF Wiki可以把入门知识体系重新过一遍重点看Web、Crypto、Misc章节CyberChef英国情报机构GCHQ开源的“网络瑞士军刀”解码、解密、格式转换全部在线解决各类安全社区和公众号用来获取最新的赛事信息和优秀WPB站上的解题视频适合看别人怎么走通一道完整题目流程但看完一定要自己动手重做。资源不求多关键是每一样都用起来。哪怕你把CTF Wiki的所有目录读一遍、把CyberChef的常用功能玩一遍、把三个考试题视频跟着做一遍你的基础认知就已经超过八成的新手了。8. 这三个月最容易翻车的五个坑我替你踩过了8.1 收藏了三天就放弃问题出在没有正反馈“收藏了三天就放弃”是新手最大的坑我太有体会了。收藏本身不产生任何学习效果真正能让你坚持下来的是“我今天做了一个题拿到了flag”的正反馈。所以新手第一个星期一定要把目标设得足够小第一天装好虚拟机跑通一条命令就算成功第三天做出来第一道签到题就是胜利。正反馈越频繁你才越能熬过前面那段“什么都不会”的黑暗期。8.2 卡题45分钟的“及时止损”原则我见过太多人卡在一道题上一下午饭都不吃最后还没做出来。CTF做题有一条不成文的“45分钟定律”一道题如果连续做了45分钟没有任何进展立刻放下去看WP或者问队友。不要觉得看WP丢人WP是你最好的老师学习拆解别人的思路比你一个人死磕三个小时有价值得多。看懂了WP之后一定记得合上答案自己重新做一遍。8.3 只读WP不重做等于白看承接上一条。很多人看WP时连连点头觉得出题人思路“妙啊”然后关掉页面下次遇到同类题照样不会。因为看懂和被教会之间差的正是“亲自动手”。我在团队里带新人的时候有一条规矩看完WP必须当场重做重做的时候不能再看答案卡住了可以讨论但必须自己把题目跑通。这条规矩的效果立竿见影。8.4 基础还不牢上来就啃Pwn每个月我都会遇到几个新手学了几天Web就一头扎进Pwn结果被汇编、栈溢出、ROP链劝退。我不是说Pwn不能学而是三个月路线里Pwn的时间窗口在第二个月后半段并且要建立在你会用GDB、看得懂简单汇编的基础上。如果暂时学不动不丢人先回到Web或者Misc方向把信心捡起来等有了一定积累再回头挑战。8.5 不记录过程过几天连自己写的代码都看不懂这个坑特别隐蔽很多人刷了不少题但从来不写笔记。第一次做出来某道题时也许觉得“这很简单不用记”但两个月后你再看到当时写的payload大概率想不起来为什么要这么写。养成记录习惯之后你会发现笔记仓库才是整个三个月学习里最值钱的东西。哪怕你最后没去参赛翻开笔记你学到的每一点东西都还在那里。9. 三个月之后的下一站9.1 CTF到SRC竞赛和实战的差别三个月能完赛之后很多人的下一个念头是能不能去挖真实漏洞、找SRC漏洞平台提交漏洞赚钱这里我得先泼一盆冷水CTF和真实SRC是两码事。CTF是人为构造的、有明确答案的靶场SRC面对的是真实业务系统需要你对资产、业务逻辑、代码实现都有更深入的理解。建议先把CTF题刷扎实再了解SRC平台和漏洞报告规范。任何人挖漏洞都必须遵守授权和边界不要越权测试这个底线任何时候都不能破。9.2 继续深造的三个方向三个月如果走完了你已经站在了网络安全行业门槛上。接下来可以有三个深化的方向。如果你对Web方向感兴趣可以系统学习OWASP Top 10漏洞类型、代码审计的常见思路、内网渗透的基本方法这条路直接指向Web安全工程师方向。如果你喜欢底层可以开始啃汇编、ELF格式、Windows PE结构、IDA逆向插件开发这是走向二进制安全工程师的路。如果你对流量分析、电子取证、日志分析感兴趣可以往安全运营与应急响应方向走这更像传统意义上的“网络安全工程师”。9.3 保持手感的最小成本方案最后分享一个我自己用了很久的习惯毕业后工作再忙我也保持着“每周一道题、每月一场线上赛”的频率。CTF这种技能非常吃手感一段时间不碰就会生疏但也不需要天天高强度训练。每周挑一个晚上做一道以前没做过的题每个月报一场不用花太多时间准备的线上赛维持比赛节奏感。这样你的技能曲线不会断还能一直跟在圈子的技术前沿后面。说实话回看我自己最开始带人的那段经历三个月能走多远真的不取决于智商和编程基础取决于你能不能在前两周顶住那种“什么都不会”的挫败感。把目标定小一点把动作拆细一点今天装好虚拟机明天跑通第一条命令后天提交第一个flag。三个月后回头看你会发现自己已经走进了网络安全这个大门。