
第一次接触CTF的人总爱问我同一个问题这东西到底难不难我的回答一直是——不难但你得先知道它是什么。CTF全称Capture The Flag中文叫夺旗赛本质就是在模拟的安全环境里找Flag一串被加密、隐藏或者保护起来的文本找到就得分。它是目前网络安全圈子里最直接的实战训练方式也是很多安全岗位招聘时认可的敲门砖。这篇内容我打算从零开始把CTF入门的路走完整先讲清比赛和题型再挑靶场、搭环境然后是工具包、实战通关最后把新手最容易踩的坑全部列出来。我自己就是从一道看似无解的杂项题开始一路摸到Web漏洞、密码学、流量分析期间踩过的坑比吃过的盐还多所以这篇东西尽量把该避的都帮你避了。适合谁看零基础但想进安全圈的学生、刚接触CTF想找靶场练手的爱好者、以及已经把题目刷了一遍但越刷越乱的人。你看完应该能明确一件事CTF没那么玄它就是一套有规律、有套路、有地图的闯关游戏。1. 先搞懂CTF到底比什么赛场上的五大题型1.1 比赛形态解题赛、攻防赛和AWDCTF的比赛形态主要分三种Jeopardy解题赛、AWD攻防赛、以及更硬核的红队对抗赛通常叫Attack-Defense。Jeopardy是最常见的线上赛形态题目按类别摆出来像一个答题板每道题对应一个分值解出来提交Flag就行。新手入门基本都是从这个形态开始的国赛比如CTF数据安全赛真题这类赛事和各大高校办的线上赛也大多采用这种模式。它的好处是单兵作战也能玩题目之间相对独立今天解一道Web明天试一道Misc完全不影响进度。AWDAttack With Defense就热闹多了每个队分到一台服务器你需要一边防守自己的机器不被别人打穿一边想办法进攻别人的机器。比赛刚开始的时候所有队伍的环境是一模一样的漏洞已知或半已知拼的就是你对漏洞的利用速度和加固能力。我的建议是先别急着碰AWD等你把Web题里的SQL注入、文件上传、命令执行这些常见漏洞都玩熟练了再上不然进场大概率是被集体围观。攻防赛也就是红蓝对抗那种通常在企业级赛事里出现参与门槛更高这里不多展开你只要知道那属于进阶玩法就行。1.2 五大题型Web、Misc、Crypto、Reverse、Pwn任何一场CTF赛事题型基本绕不开这五类。Web是大多数人入门的第一站考的是对Web应用漏洞的理解SQL注入、XSS、文件上传、命令执行、SSRF、反序列化都在这个范畴里。你之前在热搜里看到的pikachu靶场、DVWA靶场、SQLi-Labs靶场都是给Web这个方向练手用的。Misc杂项是最有趣也最像解谜的一个类别经常被戏称为脑洞题——给你一张图片、一段音频、一个压缩包让你找其中藏着的Flag。CTF二维码、git泄露、LSB隐写、流量包分析都是Misc的经典套路。它的门槛最低不需要你会写Pwn那种复杂利用但需要你见识足够多的套路。Crypto是密码学从上古的凯撒密码到现代的RSA、AES都会考到。别一听密码学就想跑CTF里的Crypto大部分时候是考你拿现成的工具和脚本去还原真正要从零写一套加密算法实现的题目很少。热搜里的ctf密码学就是这个方向。Reverse是逆向工程给你一个程序让你分析逻辑、破解校验、找到Flag。Pwn是漏洞利用栈溢出、堆溢出、格式化字符串都在这个类别里是公认难度最高的两个方向。新手入门我建议按Web - Misc - Crypto - Reverse - Pwn的顺序推进这个顺序由浅入深每个阶段上手都不会太痛苦。2. 靶场怎么选、怎么搭从本地到线上的一条龙方案2.1 为什么先练靶场而不是直接刷真题很多新手一上来就想冲CTF真题结果看一道不会一道心态直接崩。原因很简单真题是让别人去解题用的默认你已经掌握基础工具和基础漏洞原理了。靶场不一样靶场的设计目的就是教学环境可控、难度分档、漏洞明确你没有后顾之忧可以一遍一遍地试错。所以入门第一站一定是靶场。靶场按部署方式分成本地靶场和在线靶场。本地靶场自己搭建环境可控适合系统练习在线靶场打开就能用省去环境配置的麻烦适合快速体验。两条线我都会讲。2.2 本地Web靶场DVWA与Pikachu的搭建DVWADamn Vulnerable Web Application是最经典的Web漏洞靶场提供了SQL注入、XSS、命令注入、文件上传等常见漏洞的完整实验环境自带低、中、高三档安全级别非常适合循序渐进。搭建DVWA最省事的方式是用Dockerdocker pull vulnerables/web-dvwa docker run -d -p 8080:80 vulnerables/web-dvwa容器启动后浏览器访问 http://localhost:8080 默认账号是admin密码是password。进去之后先点一下Create/Reset Database把数据库初始化好然后就能看到登录页面了。有人跑了容器以后登录还是报错八成就是没先初始化数据库记住DVWA首页的按钮一定要点。Pikachu靶场皮卡丘靶场也是Web方向的热门选择原因是它的界面是中文的非常适合国内新手而且它把漏洞做了更细的拆解比如SQL注入还分了数字型、字符型、搜索型XSS也有反射型、存储型、DOM型比DVWA讲得更细。用Docker部署Pikachu也一样方便docker run -d -p 8081:80 area39/pikachu跑起来以后访问 http://localhost:8081 就能看到那只皮卡丘了。Pikachu不需要额外初始化数据库容器起来就能用这一点比DVWA省心。如果你不想用Docker也可以手动装把PHP环境推荐phpstudy或宝塔配好下载源码丢到网站根目录导入数据库改一下inc/config.inc.php里的数据库账号密码就行。但是相信我能用Docker就别折腾手动部署你的时间应该花在解题上而不是花在配环境上。2.3 专项靶场和综合环境SQLi-Labs、XSS-Labs、VulhubDVWA和Pikachu是通识类靶场而SQLi-Labs和XSS-Labs是专项靶场一个专门练SQL注入一个专门练XSS跨站脚本。SQLi-Labs每一关都对应一种注入类型从最基础的字符型注入、报错注入到盲注、堆叠注入、二次注入一关一关打过去基本就把SQL注入的常见类型全部覆盖了。XSS-Labs则是从最基础的反射型XSS开始一路打到DOM型、绕过过滤等高级技巧。这类专项靶场的价值在于深它的通关过程就像是把每一类漏洞的所有变体全部遛了一遍这对后面解CTF真题好处极大。Vulhub是一个基于Docker和Docker-Compose的综合漏洞环境集合里面包含了几十个常见漏洞的现成环境比如之前热搜里提到的Vulhub Redis 4-unacc未授权访问这类题目环境。Vulhub的用法是选一个漏洞目录进去之后直接执行命令docker-compose up -d环境就起来了。它的覆盖面很广从Web框架漏洞到中间件漏洞、数据库漏洞都有。如果说DVWA和Pikachu是教学靶场那Vulhub就更接近真实漏洞场景适合进阶阶段使用。Vulnhub则是一个提供虚拟镜像的靶场平台里面的机器通常需要你下载VMware或VirtualBox镜像导入后去渗透一台看似普通的虚拟机最终拿到root权限或者找到Flag。这套东西更偏渗透实战练的是信息收集、漏洞发现、提权全流程对CTF里的一些综合题也很有帮助。热搜里的vulnhub靶场搭建本质就是下载镜像、导入虚拟机、把网络模式调成NAT或Host-Only这三件事。2.4 在线靶场和练习平台怎么挑热词里出现了国内免费ctf平台、ctf练习网站、polar靶场、ctf show、vulfocus在线靶场这些就是在线平台的主力军。国内主流的CTF练习平台pubg这里不会写上改一下实际上国内常见的平台有CTFShow、BUUCTF、攻防世界ADWorld、NSSCTF还有PolarCTF和Vulfocus这类比较垂直的在线靶场。这些平台的题目更新频率高、社区活跃你在热搜里看到的polar ctf what is the keyword?、ctf show这类关键词基本都指向这些平台上的具体题目。在线平台的好处是零搭建成本注册就能刷题非常适合碎片时间练习。但坏处也有——平台上的解题过程没法完全复现因为某些动态Flag环境会重置你上一秒记的Flag下一秒就变了。所以我的建议是本地靶场为主练习原理在线平台为主刷题感两边结合着来。3. 工具包入门阶段这几样必须装齐3.1 虚拟机与系统选择CTF的解题环境我强烈建议装一个Linux环境。你自己日常用的Windows就留给你自己用另外开一台虚拟机跑Kali Linux它是目前渗透测试圈子的标准系统之一预装了大量的安全工具包括Burp Suite、nmap、sqlmap、john、hashcat这些。安装方式很简单到官网下载Kali的VMware镜像导入虚拟机默认账号密码一般是kali/kali打开终端先更新一下源sudo apt update sudo apt upgrade -y然后记得装VMware Tools或open-vm-tools不然屏幕分辨率调不了工作起来特别难受。VMware虚拟机镜像https://www.kali.org/get-kali/#kali-virtual-machines3.2 网络抓包与Web调试工具Web方向最核心的工具当属Burp Suite它本质上就是一个拦截代理所有浏览器发出的请求都会经过它你能看到请求头、修改参数、重放请求。CTF的Web题里有大量场景是改包就能出Flag的比如改个Cookie、伪造个Referer、改一下ID参数这类题目用Burp就是几分钟的事。Burp Suite Community版免费版完全够用。它自带一个简易浏览器打开以后就能直接访问目标网站。新手第一次打开Burp会有点懵其实你只需要掌握几个功能Proxy模块里看请求和改包Repeater模块里重放请求Decoder模块里做编码解码。就这三个足够解掉入门阶段九成的Web题了。抓包工具里还有个Wireshark主要用来做流量分析。Misc题里经常给你一个pcap包让你分析TCP流、HTTP请求、DNS查询找里面藏着的Flag。这类题用Wireshark的Follow TCP Stream功能就能搞定大半。3.3 编码解密与隐写工具CTF题目经常涉及各种编码——Base64、Hex、URL编码、摩斯电码、栅栏密码、凯撒密码。你不需要把这些编码的实现原理全背下来但你必须会识别它长什么样。这里推荐一个神器CyberChef中文昵称网络厨师。它是一个在线工具界面由一堆操作组成你往输入框扔一串字符串然后拖拽操作比如Base64解码、ROT13、反转、Hex转ASCII输出结果实时显示。用CyberChef做编码分析真是杀鸡用牛刀但就是好用。本地解题时离线环境也能用。Misc里的隐写题常用工具是StegSolve图片像素分析、binwalk文件隐写分析、zstegPNG/BMP隐写检测、Audacity音频频谱分析。binwalk一条命令就能扫出隐藏在图片里的压缩包内容binwalk 图片.png如果发现有隐藏内容直接binwalk -e 图片.png自动帮你提取。3.4 密码爆破与密码学工具密码学题型里RSA是非常常见的考点。RSA的攻破思路往往很简单——因式分解、低加密指数、共模攻击等。工具方面RsaCtfTool是必备一条命令就能根据你拿到的公钥和密文尝试多种攻击方式python3 RsaCtfTool.py --publickey public.pem --uncipherfile flag.enc还有一个叫quipqiup的在线工具是做古典密码替代密码如维吉尼亚密码、单表替换词频分析的几秒钟就能帮你还原出明文。Crypto题里如果遇到那种看不出套路的替换密码直接扔给它。杂项里还经常考到二维码比如CTF二维码这种题。常用的解码工具是zxing或者直接用微信扫也行但比赛环境一般不允许所以还是装一个zbar-tools稳妥sudo apt install zbar-tools zbarimg 二维码.png3.5 综合工具包的组织方式工具不要贪多贪多嚼不烂。我的建议是建一个/tools目录按下面这个结构组织后面用起来顺手得多/tools ├── web │ ├── burpsuite │ └── sqlmap ├── crypto │ ├── RsaCtfTool │ └── quipqiup.txt ├── misc │ ├── binwalk │ ├── steghide │ ├── zsteg │ └── zbar-tools ├── forensics │ ├── volatility │ └── exiftool └── reverse ├── ghidra └── ida-free工具包不需要一次性装完遇到什么题型补什么工具这样反而记得牢。4. 实战通关从第一道题到拿下Flag的完整路线4.1 第一道Web题用DVWA把SQL注入跑通我知道很多人教程看了好几天但一道题都没实际跑通过。别急我带你走一遍第一道题的全过程。假设你已经在本地搭好了DVWA登录进去把安全级别调到low然后进入SQL Injection页面。页面上有一个输入用户ID的框。它的逻辑是让你输入ID然后查询这张表里的用户数据。先输入 1看到返回了一个用户的用户名和姓氏再输入 2返回了第二个用户。问题是这串数据是怎么拼到SQL语句里的如果你输入1 and 11返回的依然是用户1的数据说明这串内容被执行了而且逻辑是成立的。如果输入1 and 12结果没有数据返回因为12永远是假的。这就能确认它是字符型注入。接下来获取表结构输入1 union select table_name, 1 from information_schema.tables#如果返回的列表里有类似users的表名说明union查询打通了。然后获取所有列名1 union select column_name, 1 from information_schema.columns where table_nameusers#最后直接把用户名和密码全拖出来1 union select user, password from users#拿到那一串hash密码丢到约翰哈希破解里一跑第一道SQL注入题就彻底通关了。整个过程你可能只用10分钟但这10分钟已经把SQL注入从原理到实操完整过了一遍。4.2 Pikachu靶场的通关路径Pikachu靶场里我建议第一次通的时候按它左侧的菜单顺序走不要跳。从暴力破解开始再到XSS、SQL注入、RCE、文件包含、文件上传、CSRF、SSRF最后到反序列化。每做一个小分类你都要做三件事第一看这个漏洞的类型描述Pikachu每个漏洞模块都写了一段原理说明看懂了再动手第二真题实操比如SQL注入页面让你输入用户名你就要思考闭合方式——是直接拼进去还是需要加引号、加括号、加注释符第三把成功的payload记到自己的笔记里。这里想特别说一下RCE远程命令执行这个模块。Pikachu里有一个命令执行漏洞让你提交一个IP地址后台执行ping命令。它的漏洞点在于参数是直接拼进命令行的比如你提交输入127.0.0.1 whoami如果返回了当前用户信息说明命令成功拼接执行了。这个套路在CTF真题里极其常见ctf命令执行passthru这个热词说的就是这个方向——某些PHP函数比如passthru()、system()、exec()直接执行了外部命令就是命令执行漏洞的元凶。4.3 Misc杂项入门流量包、隐写与压缩包爆破Misc往往是CTF比赛里最容易拿分的方向因为它不太需要系统性的知识更考验你的手上功夫。我先说说最常见的三类。第一类是流量包分析。你拿到一个.pcap文件用Wireshark打开先看协议分级统计如果HTTP流量多就按HTTP过滤找到可疑的请求Follow TCP Stream很多流量题把Flag藏在某个HTTP响应里或者上传的文件名里。比如题目是扫描二维码实际上二维码就藏在某条HTTP响应里用http.response.code 200过滤一下就能找到。第二类是图片隐写。把图片扔进binwalk扫描如果发现压缩包提取出来如果没有用StegSolve打开逐帧滑动查看图片的各个颜色通道有时候一个纯色图片里某个颜色通道藏着另一幅二维码类似这种。第三类是压缩包爆破。压缩包被加密了首选工具是hashcat或john。先用zip2john提取哈希再丢给john跑弱口令字典zip2john secret.zip hash.txt john --wordlist/usr/share/wordlists/rockyou.txt hash.txt如果密码比较简单几秒就出结果了。如果wordlist跑不出来想想密码可能是什么格式——比赛里常见的有四位数字、生日、或者题目描述里给过的某个单词。Misc的核心思维方式就是所有看起来正常的地方都可能不正常。音频里有摩斯电码、图片末尾藏着文本、文件头被改乱了导致打不开、甚至Flag字符被拆成多段藏在多个文件里——这些套路都是Misc的基本操作。4.4 Crypto密码学入门从Base64到RSACrypto这个方向没有想象中那么可怕。入门最先遇到的往往是编码题——一串长得像ZmxhZ3t...这种以两个字节开头的大概率是Base64。直接CyberChef里拖一个From Base64就解出来了。再进阶一点是古典密码凯撒密码、栅栏密码、维吉尼亚密码、培根密码。这些密码的规律性都很强识别特征也很明显。凯撒密码就是字母偏移固定位数可以用在线工具爆破偏移量维吉尼亚密码的输出是字母均匀分布的乱码可以用quipqiup做词频分析还原。真正的重点在现代密码学CTF里考得最多的是RSA。一道典型的RSA题目会给你两样东西一个公钥文件public.pem和一个加密后的文件flag.enc让你还原出明文。入门级的解法通常是利用模数N做因式分解。N是两个大质数的乘积如果其中一个质数很小就可以直接用工具分解。或者如果两个文件用了同一个N但是不同的e共模攻击也可以用Convergent算法算出来。最直接的办法就是把数据丢给RsaCtfTool让它自动尝试。RSA题的核心是去看题目给了你什么信息、缺什么信息。很多时候题目并不是无解的而是你还没找到正确的攻击模型。4.5 信息泄露类题目git泄露与目录扫描热搜里有git泄露ctf练习题这是Web题里很戳人的一个分类。很多开发者把网站源码放在服务器上并且用了git管理但忘了删除.git目录。攻击者就可以通过.git目录恢复出源码文件甚至可以还原出历史提交记录里被删除的敏感信息。这类题用工具GitHack或githacker一条命令就能把泄露的源码从.git目录里拉回来python3 githacker.py --url http://target.com/.git/ --output-folder ./repo拉完之后在源码里直接搜flag、key、password这些关键词。再配合git log和git show翻历史版本经常能发现开发者在某次提交中不小心把Flag写进了代码又删掉了。另外目录扫描也是Web题的常规操作工具是dirsearch或dirbdirsearch -u http://target.com/扫出来的常见目录如/admin、/backup、/flag.php往往就是解题的关键入口。5. 新手把刺踩遍后我整理出的避坑与排查清单5.1 靶场搭建失败先把这三件事查一遍新手的靶场搭建问题90%都出在三件事上端口被占用、数据库没初始化、网络模式不对。如果你docker run之后访问页面打不开先查端口docker ps看看容器状态是不是Up再检查端口映射是不是你访问的那个。如果容器一直在重启多半是端口被占或者镜像内部服务起不来把原有容器删了换个端口再试一次docker run -d -p 8090:80 image_nameDVWA那种登录后白屏或者报Table not found的就是没初始化数据库按我前面说的点一下Create/Reset Database。Pikachu如果打开是404看看URL路径是不是访问了/pikachu子目录它的默认页面是挂在根路径下的但源码目录名是pikachu浏览器要访问http://localhost:8081/pikachu才行。如果你用的是Vulnhub下载的虚拟机镜像导入VMware之后发现开机黑屏、DHCP拿不到IP很大概率是你网络模式选错了。Vulnhub靶机推荐用NAT模式如果你之前改过自定义网段记得回到虚拟网络编辑器里确认一下NAT网段和DHCP设置。5.2 刷题刷不动大概率是思路问题我见过太多人卡在一道题上一整天就是在那儿死磕。CTF解题第一原则留意提示逐条审查。Web题永远先去审查所有输入点——URL参数、POST表单、Cookie、Referer、User-Agent。任何一个可以被你构造的位置都有可能是漏洞点。如果一道题说输入ID即可查询到信息但是报错感觉好奇怪那你就要重点琢磨这个报错本身报错信息的回显往往就是注入点的指纹。这道题如果最终能通过报错拿到数据就是典型的报错注入题。如果一道题看了十分钟完全没有头绪我建议你直接去看Writeup。不要觉得丢人。Writeup是别人解这道题的完整思路你看十篇Writeup比你盲打十道题学到的还多。关键是要看懂别人的思路链路然后关上Writeup重新自己复现一遍。5.3 工具到底应该学多深有人说工具太多学不过来。我给你划个优先级第一优先级浏览器开发者工具、Burp Suite、CyberChef、binwalk。这四样是你每天都会用到的基础设施必须非常熟悉。第二优先级sqlmap、Wireshark、john/hashcat、GitHack。这几种是应对特定题型时的高效能手用到时再深入。第三优先级Ghidra、IDA、gdb、pwntools这些等你真正进入Reverse和Pwn阶段再花功夫学。一个很实用的技巧是每次解题时把用到过的工具命令和参数记到笔记里。不用多每次解决一道题记录一个命令积累一百道题你就拥有了一份属于自己的工具速查手册那个比任何全家桶工具包都好用。5.4 时间分配与学习节奏建议入门阶段最忌讳的就是样样都想碰天天都在打但没什么成果。我建议给自己设定一个六周节奏第一周只做理论扫盲和靶场搭建把DVWA、Pikachu、SQLi-Labs都搭起来第二周集中刷DVWA的low级别和Pikachu的Web漏洞第三周开始做SQLi-Labs通关边打边记笔记第四周转向Misc和Crypto重点玩流量分析和隐写同时用RsaCtfTool做几道简单的RSA题第五周去国内在线平台打一套入门级CTF赛题第六周复盘把你做过的话全部整理成一份自己的知识体系框架。这样做的好处是每周都有一个清晰的小目标六周以后你会发现自己已经从什么都不会变成了能独立做简单Web题和Misc题的状态。再往后就顺着自己的兴趣往Web深水区冲还是开始看Reverse和Pwn的入门都行。写在最后我想说一点个人体会。CTF入门真正难的从来不是技术而是前两周那段什么都不会、什么都想放弃的时间。你可能搭建靶场时被Docker折腾得怀疑人生也可能看到别人的Writeup觉得自己是个废物——这些我都经历过。我当年在Pikachu靶场的第一关就卡了一个晚上最后发现只是忘了闭合引号从那天以后我学会了两件事一是做Web题每构造一个参数都先想清楚它最终会拼成什么SQL或命令二是遇到问题先记录下来第二天再看往往一眼就能看出昨晚犯的蠢。如果你现在正准备开始接触CTF我的建议很简单选一个靶场把环境搭起来从最基础的那块砖开始一块块码上去。你在热搜里感兴趣的pikachu、DVWA、vulnhub这些词每一个背后都是一条完整的成长路线先从一个靶场通关开始就好。按照这篇教程的节奏走完前六周回头你会惊讶于自己已经走了多远。