说实话,我第一次接触CTF的时候,完全是一脸懵。网络安全、CTF、Crypto、Web这些词我全都见过,但连在一起就成了天书。看别人的WriteUp,仿佛在看另一种语言;打开题目,界面弹出来一堆看不懂的英文和乱码,半天连入口都找不到。所以我特别理解新手那种"收藏了一堆宝典还是不会做题"的挫败感。
这篇东西,是我从零开始打CTF这几年,把Crypto和Web两个方向从入门到能独立刷题的完整思路、工具清单和踩坑记录重新沉淀了一遍。它不保证你看完变大佬,但至少能让你知道:每道题在考什么、你需要学什么、工具怎么用、题目做不出来时该往哪个方向想。适合刚开始接触CTF,或者已经断断续续刷题但总觉得没有章法的朋友。
1. 为什么我来写这份CTF全领域入门指南
1.1 从乱撞到有章法的真实经历
我刚入CTF时最大的问题,不是不努力,而是努力得毫无方向。今天看到有人解出Misc题,就去搜二维码分析;明天看到大佬摆弄Burp Suite,又跑去学抓包;后天听人说密码学很有前途,立马翻出数论课本开始啃。结果三个月过去,会的还是只有打开网页看源码,连flag长什么样都没见过几个。
后来我才慢慢意识到,CTF不是比谁会的知识点多,而是比谁能在有限时间里,快速识别出题目背后的考察点并用对应工具链求解。这个"识别"能力,才是刷题积累的核心。Crypto和Web之所以被我选作主攻方向,不是因为它们简单,而是因为它们最容易形成"输入-处理-输出"的可复现套路,非常适合新手建立正反馈。
1.2 Crypto和Web为什么值得优先啃
先说Crypto。密码学题目有一个很大的优点:题目告诉你要求什么,剩下的全是纯逻辑。你拿到一串密文,要么是编码,要么是古典密码,要么是现代加密算法。每类都有固定的解题路径。哪怕你不会写代码,先学会用工具,也能解掉一批签到题。这种"短平快"的成就感,对新手期来说太宝贵了。
再讲Web。Web题更接近真实世界里的漏洞利用思路,学到的知识不光能打比赛,还能迁移到以后做渗透测试或者代码审计。而且Web题目的交互感强,你能在浏览器里一步步点、一步步改,看着自己把"不可能"变成"拿到flag",是很有吸引力的。更现实的原因是,国内很多CTF比赛Web题数量多、题量稳定,作为拿分方向性价比很高。
1.3 这篇指南能帮你解决什么问题
我会尽量把新手期最常遇到的三类问题讲透:第一,题目看不懂——不知道题目在问什么、给的文件是什么格式;第二,工具不会用——装了半天东西,不知道在哪个环节下手;第三,刷题没章法——同一个知识点换了个马甲就不认识。所以你不需要一口气读完,我建议你先看章节标题,挑最卡住自己的那部分开始。
2. Crypto方向:从玩转编码到啃下RSA
2.1 先别急着上证书,编码和古典密码才是地基
很多新手一上来就搜"RSA怎么解",结果被模反函数、欧拉定理绕晕,直接劝退。我的建议是先别碰RSA,先花几周时间把编码和古典密码玩熟。
编码不是加密,它只是信息的重新表示,但CTF里非常爱考。Base64是最常见的,特征是末尾可能有等号,字母数字混合。还有Base16/32、Hex、URL编码、Unicode编码。每一种编码都对应一个字符串特征,记住特征就够了。比如看到一堆%E4%BD%A0,第一反应是URL编码;看到\x66\x6c\x61\x67,就是Hex转ASCII。
古典密码则是算法思想,不涉及复杂数学。凯撒密码、栅栏密码、维吉尼亚密码、培根密码、摩斯电码、猪圈密码,这些在Misc和Crypto签到题里频繁出现。我的经验是:拿到密文,先丢进支持大量解码的工具里批量扫一遍,如果某个算法的输出突然变成人类可读文本,这道题基本就解完了。
2.2 题型结构拆解:题目给你什么,你要找什么
Crypto题拿到手,第一步永远是分类。给你一堆字符串,大概率是编码;给你一段英文单词全乱掉顺序,可能是栅栏或列移位;给你一个ciphertext和一串数字,可能涉及RSA;给你一个Python脚本,里面定义了加密逻辑,那就是让你逆向。
我的分类习惯是:
- 看到了
encrypt关键字和自定义函数,直接读代码,搞清楚它做了什么变换。 - 看到
p、q、e、n这些参数,基本就是RSA套餐。 - 看到
AES、DES、RC4这类现代加密,一般会附带密钥或者能通过脚本爆破,题目里经常藏着"如果密钥太短"之类的提示。
2.3 工具链:在线工具箱与Python脚本的搭配
新手最忌讳一个工具不够就慌。我的建议是准备两套方案:在线工具做快速尝试,Python做精确复现。
在线工具我常用的是CyberChef,它就像一个密码学版的计算器,左边输入,右边输出,中间拖拽各种解码模块。很多编码题和古典密码题,拖几个模块就出来了,不用写代码。
当在线工具搞不定时,写Python就是必须的了。我强烈建议新手学会Python的基本文件读写、字符串处理、循环和函数。不需要多深的编程水平,但至少要能看懂别人WriteUp里的例子脚本。你不会写没关系,先学会改,把在线工具的输出粘贴进去,把网上现成的脚本参数改一改,也是一种学习。
2.4 进阶路线:哈希、对称加密、非对称加密与RSA
当你刷完一堆签到题,可以开始接触现代加密了。
哈希不是加密,它是单向的。CTF里最常见的是MD5、SHA1、SHA256,以及各种变体。如果题目只是让你判断哈希类型,可以用hash-identifier这类工具。如果想爆破短文本,比如4位数字加字母的哈希,直接写脚本穷举即可。这算是Python脚本入门最舒服的练习。
对称加密AES和DES,重点看模式。ECB模式直接分块加密,相同明文块得到相同密文块,特征很明显,可能存在字节攻击;CBC模式则需要关注IV和填充方式。新手不需要深入会计每一个细节,但至少要认得这些名词,并且能在题目代码里指出哪一行是密钥、哪一行是IV。
RSA是很多人的噩梦。其实签到的RSA题套路很固定:n太大就分解;e特别小比如3,就用低加密指数攻击;e和phi(n)不互素就用有限域开根;给了两组n共用p,那就求最大公约数。每一类都有现成模板,但这背后的原理值得你找一篇讲透彻的文章认真读一遍。我自己的体会是:RSA题做多了,慢慢就会对"数字之间的关系"产生直觉。
2.5 Crypto新人最容易迷惑的三个瞬间
第一个瞬间:拿到一串不知道是什么的字符。这时候不要盲目猜,先看特征。二进制是01串,Base64特征是有+/=,十六进制一般长度是偶数,英文单词乱序则可能是维吉尼亚。第二:发现工具解出来的是一堆乱码,然后就不继续了。乱码本身也是信息,可能是GBK编码显示成UTF-8,也可能是需要再Base64一层,或者里面藏了一个zip文件头。第三:跑别人的脚本报错。大概率是Python2和Python3的版本问题,或者缺少某个库。把报错信息复制到搜索引擎里,直接就能解决,千万别灰头土脸地关掉。
3. Web方向:从第一道签到题到独立解题
3.1 Web题归根结底是在玩Request和Response
你打开浏览器输入网址,浏览器向服务器发送一个请求,服务器返回一个响应。Web安全里几乎所有漏洞,都发生在这个"请求-响应"的交互过程中。
理解这一点之后,你的浏览器就不再是一个"显示网页的工具",而是一个"可以手动修改请求的调试平台"。按F12打开开发者工具,切到Network面板,刷新页面,你就能看到网页背后的每一个请求。想看请求头,点开某个请求,里面会有User-Agent、Cookie、Referer这些字段。CTF Web签到题特别喜欢在这些字段上做文章,比如服务端只接受从某个特定来源发来的请求,那你就需要在请求头里加上对应字段。
3.2 信息收集这步决定了你能不能继续
Web题有一条不成文的规则:题目环境里什么都是线索。网址路径、页面源码、注释、robots.txt、备份文件、Git泄露,全部都要看一遍。
我第一次做Web题时,卡了很久,后来发现flag就写在网页源码的HTML注释里。那种感觉又气又想笑。后来我养成了一个习惯,拿到任何Web题,先按F12从头划到尾看源码,再看有没有敏感目录,再抓包看看响应头,甚至看JS文件里有没有端到端逻辑。很多题目其实并不难,难的是你漏掉了第一层信息。
3.3 四大基础漏洞的识别与利用思路
新手优先学这四个:SQL注入、XSS、命令执行、文件上传。
SQL注入本质上是把输入拼进SQL语句,让数据库执行了原本不想执行的条件。题目里最常见的是登录绕过和报错注入。不要急着学各种花哨手法,先把' or 1=1 --这种最基本的逻辑搞明白,知道为什么能绕过,再接触联合注入、布尔盲注。
XSS通常是前端漏洞,反射型、存储型、DOM型三者的区别要搞清楚。但是CTF里的XSS题一般会带Cookie盗取、CSP绕过这类前置知识,新手期能读懂题目代码,找到可控输出点就已经很厉害了。
命令执行,通常是服务器把参数拼进系统命令。你需要在命令行里利用;、|、&&这些控制符截断原命令。做这类题时建议先在本地终端多试几次,搞明白命令拼接的边界,尤其要记得Linux和Windows的命令差异。
文件上传题,核心是服务端有没有校验文件类型和内容。绕过方式是改Content-Type、改扩展名、上传图片马。新手最容易踩的坑是只关注扩展名,忽略了文件内容里本身就带着PHP代码。上传成功后,还要找到文件被存储的路径,才能通过访问触发解析。
3.4 实战中必须要养成的抓包习惯
很多Web题,你在浏览器地址栏输入的内容会被转义掉,或者浏览器自动做了一些你感知不到的处理。这时候你需要一个能代理流量的工具。
Burp Suite是Web选手最常用的。安装之后,配置本地代理,把浏览器流量指过去,就能在Proxy面板里看到所有请求。你可以把请求发给Repeater,手动修改参数后重新发送,观察响应变化。这个流程对SQL注入和命令执行来说几乎是必备的。新手刚开始会觉得Burp Suite界面复杂,其实你只要学会用Proxy和Repeater两个模块,就能应付大多数题目。抓包不是高深技巧,就是一个"看清楚并手动控制"的过程,多抓几次就熟了。
3.5 环境坑:很多人其实死在搭环境,而不是题目本身
Web题经常要求你本地起一个环境,比如装PHP、MySQL、Apache/Nginx。新手最容易在这里崩溃:版本冲突、端口占用、数据库连不上,题目做到一半就不想干了。
我建议直接用现成的集成环境,把PHP和MySQL一起装好。更省事的方案是直接用Docker,题目给的docker-compose.yml一条命令就能把环境拉起来。如果这个方向你完全没接触过,就先学Docker的基础操作,up -d、logs、exec这三个命令就够了。等你能稳定跑起一套环境,你的解题效率会翻倍。
4. 一台电脑搞定全方向:我的CTF工具箱与配置清单
4.1 操作系统选择:建议用Linux虚拟机或者WSL
我见过很多新手在Windows上折腾各种依赖,最后崩溃在环境变量里。如果你打算长期玩CTF,建议尽早切换到Linux环境。不用装双系统,用虚拟机或者WSL就够了。
WSL的优点是启动快,和Windows文件互访方便;虚拟机的隔离性更好,更适合用来跑包含恶意代码的样本。我自己的选择是虚拟机跑一个Ubuntu,里面装好Python3、Docker、常用文本编辑器,再把Burp Suite跑在Windows宿主机里,两边配合。如果你还是依赖Windows,也没关系,后面提到的工具基本都有Windows版本,但你在查WriteUp时,看到很多Linux命令会一脸懵,所以迟早要适应。
4.2 编码、密码、杂项常用工具
一个CyberChef真的可以解决大量编码问题,但如果要更顺手,工具清单可以这样配:
- 编码转换工具:随波逐流CTF编码工具,是一个集合了大量编码和密码功能的图形化工具,很适合新手在不知道用什么解码时批量尝试。
- 二进制分析:HxD或010 Editor,查看文件头、改文件字节。
- 网络抓包:Wireshark,分析pcap流量文件,Misc方向几乎逃不掉。
- 图片隐写:Stegsolve,能逐通道查看图片信息,新手必装。
- 压缩包爆破:AZPR或者fcrackzip,简单字典爆破。
这些工具都不需要一开始装齐,遇到题目缺什么再补什么,比一次性装一堆更高效。
4.3 Python脚本:写点一次性脚本能解决90%重复劳动
不要觉得写脚本是大佬专利。我自己的习惯是,每个星期把最近刷题时用过的Python代码片段保存下来,比如读文件、转码、爆破、RSA解密的模板。下一次遇到类似题型,直接复制修改比重新写快得多。
比如蜂鸣音(原文可能有别的比喻?)你需要做的是:建立一个自己的ctf_scripts文件夹,放几个常用的模板,包括:
- 十六进制转字符串脚本
- Base64、Base32循环解码脚本
- 简单的凯撒爆破脚本
- AES/CBC解密脚本模板
- RSA常见攻击模板(分解n、低指数、公约数)
这些代码你一开始可能看不全懂,但跑起来就能看到结果,慢慢改,慢慢理解,就会了。编程能力不是CTF的前置门槛,是你在刷题过程中通过反复使用逐渐长出来的。
4.4 浏览器、代理与Burp Suite的基础配置
浏览器建议装两个:一个日常用(Edge或Chrome),一个专门装各种安全插件。安全浏览器里必装的是修改请求头的插件,可以用来快速篡改User-Agent、Referer等。另一个就是强制不缓存插件,避免测试时读到旧资源。
Burp Suite的入门配置,其实不用铺开很多:Proxy模块里确认代理端口是8080,浏览器设置好HTTP代理指向127.0.0.1:8080,然后切到Proxy的HTTP history,刷新题目页面,就能看到请求记录。如果页面加载很慢或者报错,八成是代理没配对或者证书问题,搜索关键词 "Burp Suite 证书 安装" 就能解决。等你能顺利抓包了,再把重点放到Repeater上,把一个请求里可控的参数仔细改一遍,观察响应差异。
5. 从刷题到打比赛:学习路线和心态调整
5.1 新手刷题平台怎么选
市面上的CTF刷题平台不少,我建议新手优先选择有详细WriteUp、难度标记清晰的平台。初期可以找一个综合题库,按难度从Easy开始刷。题目量不用多,关键是每道题做完后一定要看几篇别人的WriteUp,对比自己的解题思路。
不建议一开始就挑战大型比赛的真题,那里的题目难度波动很大,容易让人产生"我是不是不适合"的错觉。从签到题开始是更明智的路径。很多比赛的签到题基本就是送分题,用来安抚参赛者的情绪,做这种题的意义在于建立"Web题大概长什么样"的认知。
5.2 从签到题到中等题:循序渐进
刷题节奏建议分三轮。第一轮,只看题解,目的不是做题,而是了解题型分类,比如哪些题属于信息收集、哪些题属于SQL注入、哪些题属于RSA基础攻击。第二轮,自己动手做签到题,遇到卡壳就翻答案,翻完后把这道题对应的关键知识点记录到笔记里。第三轮,找中等难度的题,尝试独立解出。
注意,同一知识点的题刷三到五道之后,就要主动去找变种。比如学会了联合注入,就去试布尔盲注、时间盲注、报错注入,看它们之间有什么不同。如果永远只做同一个模板,就算重复一百次,也只是在练熟练度,没有在练识别能力。
5.3 赛前准备与赛中策略
打一场真实比赛前,除了知识储备,你还需要做三件事:第一,熟悉比赛平台的提交flag格式,很多新手拿到flag不造怎么提交,白白浪费分数。第二,提前把常用工具装好,别在比赛时才开始下载Burp Suite。第三,准备一个能快速记录的文本,把比赛中的每一步操作的关键信息复制进去,防止赛后复盘时失去上下文。
赛中策略,我个人的心得是:先把所有题目都点开看一眼,哪怕是盲区,也花几分钟读取题目描述和附件。某个题做不出来不要死磕,时间花在可能解出来的题目上,性价比更高。比赛时紧张是正常的,但你要知道,绝大多数队伍都不是全解的,能稳住节奏就已经超过很多人了。
5.4 赛后复盘:WriteUp比做题更重要
CTF圈里流传着一句话:一场比赛最重要的不是得分,而是赛后复盘。比赛结束后,主办方和大佬们会放出WriteUp。这时候你要把自己做过的题和没做过的题都看一遍,哪怕是根本看不懂的题目,也要记录下解题的核心思路在哪个方向上。
我自己的复盘模板很简单:题目名称、考点、我的解法和卡点、标准解法涉及什么新知识、这个知识点还能用在哪里。这些笔记会在日后刷题时反复被翻出来,慢慢变成你自己的知识网络。比起收藏一大堆别人的笔记,自己写下来的,哪怕只有一句话,价值也要高很多。
6. 小白避坑指南:这些弯路我真的替你走过了
6.1 只收藏不行动等于零
我知道看到这里你的收藏夹里可能已经多了一堆文章,但这篇如果不跟着做,你很快又会回到"不懂-搜索-收藏-吃灰"的循环里。我的建议是给自己定一个非常小的目标:今天,装好CyberChef,去题库找一道最简单的编码题试试;明天,把Burp Suite的抓包配置跑通。不要管懂不懂,先动手,遇到问题再回来查。
6.2 不要一上来就追最新的CVE和0day
新手看到新闻里某个漏洞很火爆,就去搜利用方式,十有八九是浪费时间。CTF考察的是经典漏洞的变形和组合,不是最新漏洞的复现。你连SQL注入的闭合逻辑都没弄明白,去追什么0day,纯粹是自我感动。把基础漏洞的原理吃透,远比知道十个漏洞的名称有用。
6.3 学好英语和搜索引擎是隐性战斗力
很多工具文档和错误信息都是英文,而且CTF题目的描述、比赛规则也常用英文。这不是让你去考四六级,而是在遇到报错时,学会把报错里的关键词提取出来,去搜索引擎里查。说实话,我见过的很多新手,查问题从来不提取关键字,而是把整段报错粘贴进去,搜出来的东西毫无参考价值。你要学会把报错拆成几个词组,再组合搜索,这是很多人忽略的硬技能。
6.4 找一个社区或队友,但不要被焦虑绑架
有一起刷题的队友是极好的。你们可以互相出题、互相讲题、互相补知识盲区。但也要注意,不要每天只看别人刷了多少题、拿了多少奖,然后陷入"我好废物"的负面情绪。CTF是一场长跑,不是短跑,你的目标是今天比昨天多会一道题的类型,这就够了。
6.5 法律与道德底线:CTF是学习竞赛,不是攻击工具
这一点我放在最后,因为它比所有技巧都重要。CTF比赛的环境是主办方专门搭建的,是有授权、有边界、有规则的游戏。你在这里学到的技术,只能用于CTF竞赛、自己搭建的实验环境和获得明确授权的安全测试。
一定不要因为学会了几个命令,就对别人的网站、公司内网或者公共平台做测试。这不是"炫技",是违法的,甚至可能毁掉你整个职业生涯。安全行业的容错率很低,一旦留下案底,很多大门都会对你关闭。所以请务必管住好奇心,把精力放在合法的靶场、比赛和授权测试里。
最后分享一点个人的小习惯:我在每次刷完题后,都会在笔记里给自己写一句"这道题里我学到的最关键的一条逻辑是什么"。时间久了,这些一句话总结,往往比大段大段的WriteUp更能在赛场上救命。希望你也能找到属于自己的那种节奏,刷题不焦虑,比赛有底气。