零基础CTF入门指南:赛制规则、90天学习路线与靶场工具实战
第一次在师兄屏幕里看到 CTF 的 flag 滚过去时我还在大三学 C 语言连 POST 和 GET 都分不清楚更不知道什么叫靶场。如果你现在翻开这篇教程想从零开始搞懂 CTF又不想被满屏的工具包、Kali 命令和英文 writeup 劝退那这篇就是冲着你写的。我把赛制规则、三个月学习路线、主流靶场的搭建方法、常用工具包清单以及两道完整到能照做的实战题全部按自己实际走通的路捋一遍。提前声明这不是一本五万字的百科全书而是一条我试过、也带人试过的入门路径你照着走第一个 flag 不会太远。1. 先别急着下工具赛制和方向一次讲清很多人一上来就装 Kali、开 Burp Suite结果连 CTF 和渗透测试有什么区别都没概念。CTF全称 Capture The Flag核心就一件事在给定题目或环境中找到一段特定格式的字符串——通常叫 flag提交给平台换分数。听起来简单真正麻烦的是怎么找到它。找 flag 的过程会用到 Web 漏洞、密码分析、隐写取证、逆向工程、二进制利用等一堆技能而这恰恰是 CTF 最有意思的地方。1.1 三种赛制决定了你怎么练常见的 CTF 赛制有三类不同赛制对技能的要求差别很大先看清再选方向比埋头刷题重要得多。第一种是解题赛英文叫 Jeopardy。题目被分成 Web、Misc、Crypto、Reverse、Pwn 等类别每道题对应一个分值解出后提交 flag。绝大多数线上赛和新人练习平台都是这种形式优点是你可以只做自己擅长的方向缺点是容易偏科。第二种是攻防对抗赛英文写 AWDAttack With Defense。每支队伍分到一套相同的靶机你要一边修复自己机器的漏洞一边利用别人机器的漏洞拿分。这种赛制非常考验实战反应和脚本编写速度一般入门三个月后再碰比较合适否则心态会直接被打崩。第三种是综合场景赛题目会模拟一个偏真实的企业或业务系统给你一个入口让你像渗透测试一样逐步深入最终拿到核心数据。很多数据安全赛真题就采用这种形态其中会有日志分析、敏感信息识别、异常流量排查等环节本质还是 CTF 那套考核框架只是场景更加落地。别急着只盯一种。入门期建议以解题赛为主它最容易建立反馈循环等到基础扎实了再组队打 AWD 和综合场景赛那时候你会发现前面的积累都能复用。1.2 Web、Crypto、Misc先选一个方向入门CTF 的题目方向大致可以分成五类我先按大多数新手能接受的程度排个序。方向核心考点上手难度适合人群WebSQL 注入、XSS、文件上传、命令执行、源码审计低到中学过网页、对请求响应感兴趣的人Misc隐写、流量分析、取证、编码、键盘记录、二维码低细心、喜欢做“解谜”的人Crypto古典密码、RSA、对称加密、编码转换低到中对数学不反感、愿意写脚本的人Reverse逆向工程、脱壳、算法还原高懂汇编、懂底层的人Pwn栈溢出、堆利用、沙箱逃逸高懂 C 语言、懂操作系统内存的人我见过太多零基础学员一上来就冲 Pwn 和 Reverse结果被内存地址和汇编指令劝退觉得自己不适合 CTF。真不是你的问题是顺序问题。Web、Misc、Crypto 这三个方向只要会一点 Python、懂一点基础概念就能开始玩成就感来得快能帮你撑过最容易被劝退的第一周。1.3 看懂 flag、积分和规则再开始刷题再强调一下 flag 格式绝大多数比赛统一用flag{...}这种形式也有的平台用ctf{...}或自己定义的花括号格式。拿到一串可疑字符后先确认格式再提交提交格式错了平台会提示 flag 错误但不会告诉你差在哪。积分规则也值得花两分钟看明白。通常难度越高分值越高限时越短分值越高很多平台还有“一血”加成也就是第一个解出某道题的人能多拿分。另外比赛过程中绝对不能把其他人的 flag 发到群里对答案平台后台会记录提交时间和提交人一旦判定作弊轻则取消成绩重则封禁账号。这一点新手比赛时最容易忽略。2. 90 天从零基础到能打比赛的路线图我带过的学员里最快一个从完全零基础到打线上公开赛拿到解题数是零对零。为什么会这样因为他前面三周全在研究“装什么工具”一个题没碰。所以我把路线压缩成 90 天每个阶段做什么、做到什么程度算合格都写得非常具体。2.1 第一个月把“看懂题目”的能力补齐第一个月不急着学漏洞原理先干三件事会写点 Python、会用 Linux 命令、看得懂 HTTP 请求。Python 是整个 CTF 生涯最核心的工具语言尤其 Misc 和 Crypto 方向几乎每题都要写脚本。你不需要啃完整本语法书只要会用requests发请求、会用base64和binascii做编码转换、会写for循环读文件就算达标。Linux 命令同样重要。至少要熟悉ls、cat、find、grep、strings、file、netcat这几个。尤其是strings和file很多取证题第一眼不知道是什么类型的文件跑一遍这两个命令基本心里有数。HTTP 协议是 Web 方向的地基。你需要知道 GET 和 POST 的区别、Cookie 是怎么传递的、状态码 200 和 403 各代表什么。我当时是拿浏览器 F12 里的“网络”选项卡反复看请求看几次就慢慢有感觉了。这个月的验收标准很简单给你一个小文件你能用file判断出类型用strings找到可疑字符串写个 Python 脚本把一行 Base64 解出来。做不到这些就先别往后走。2.2 第二个月选一个主攻方向把题刷透第二个月开始聚焦。别想着五个方向同时推进人的精力有限东一榔头西一棒子三个月后什么都拿不出手。我的建议是 Web、Misc、Crypto 三选一先主攻一个其他两个遇到什么了解什么就行。选 Web就把 SQLi-Labs 前二十关和 XSS-Labs 全部通关再用 Pikachu 靶场把文件上传、命令执行、CSRF、SSRF 这些模块过一遍。选 Misc就去把 Stegsolve、Audacity、Wireshark 这几个工具的使用摸透每天做一两道图片隐写和流量分析题。选 Crypto就从凯撒密码开始一路做到 RSA 的简单攻击模型每个算法都自己用 Python 实现一遍不要抄现成脚本自己写过才记得住。第二个月最忌讳的是今天写 Web 题明天研究 Pwn 后天又去看流量分析最后每道题都只会“看答案觉得不难”。专攻一个方向至少保证这个方向的大多数题目你能独立解出来这才算真正入门。2.3 第三个月刷题节奏、笔记规范和第一次参赛第三个月进入刷题和模拟比赛阶段。我的刷题节奏是每天两道题固定在晚上每道题限时四十分钟。四十分钟解不出来看 writeup看懂了不算完必须隔天自己独立重做一遍。这个“隔天重做”看起来笨实际效果比连刷十道题都好因为它强迫你去想解法而不是背答案。从第一天刷题起就要做笔记。我们圈内管这个叫 writeup也就是解题报告。一份合格的 writeup 至少要包含题目来源、知识点标签、完整解题过程、flag、踩坑记录。别嫌麻烦三个月后你回头看这些笔记就是最有价值的个人参考资料比任何教程都贴近你自己的知识盲区。第三个月结束前去参加一次线上公开赛哪怕只解出一道 Misc 也值得。比赛的意义不全在分数而是逼你在限时和分数压力下调用学过的知识这种状态和平时慢慢刷题完全不同。3. 新手必收靶场和在线平台到底怎么选工具可以后面再装但靶场和练习平台一定要早点选好。靶场就是给你练手用的“模拟战场”。为什么非得有靶场因为你没有权限对随意目标做测试但平台给你授权的靶场可以随便折腾漏洞打坏了也不会有任何问题。这条边界从入门第一天就必须想清楚。3.1 本地单机靶场DVWA、Pikachu、SQLi-Labs、XSS-Labs先介绍四个最适合入门练习的本地靶场都能在自己电脑上跑起来。DVWA 是最经典的 Web 漏洞靶场包含 SQL 注入、XSS、文件上传、命令执行等常见漏洞每个模块都有 Low、Medium、High 三个难度。装好之后建议从 Low 难度开始逐个模块过一遍它能帮你建立对漏洞的直观认识。Pikachu 是国内常用的 Web 漏洞练习靶场模块设计比较贴近中文场景覆盖了暴力破解、XSS、SQL 注入、RCE、文件包含、越权等。它名字看着可爱里面的漏洞可都不客气。XSS-Labs 是专门练 XSS 的关卡靶场从第一关到最后一关难度逐级提升适合把反射型、存储型、DOM 型 XSS 一次练明白。SQLi-Labs 则是 SQL 注入专项靶场一共几十关从报错注入、布尔盲注到时间盲注全覆盖是吃透 SQL 注入的必经之路。这几个靶场多是 PHP 项目环境配置容易让新手崩溃所以我一般直接推荐用 Docker 跑命令都比较短比如docker run -d -p 8080:80 vulnerables/web-dvwaPikachu 和 SQLi-Labs 在 GitHub 上都有仓库搜关键字就能找到里面一般写明 Docker 启动方式。如果一时不想学 Docker也可以在 Windows 上用集成环境跑但相信我Docker 这条路更省心。3.2 集成漏洞环境和综合靶场Vulhub、VulnHub、红日靶场基础打好之后你会遇到一些不满足于单点漏洞、想练完整攻击链的时刻。这时候就该上 Vulhub。Vulhub 是一个基于 docker-compose 的漏洞环境集合覆盖了大量中间件和组件的已知漏洞比如常见的 Redis 未授权访问、Web 中间件解析漏洞等。它的优点是“一键拉起一个漏洞环境”命令就那么几条适合用来复现具体漏洞和练内网横向思路。VulnHub 则是提供虚拟机镜像的靶场平台下载一个镜像导入虚拟机里面就是一个完整的模拟系统需要你自己从信息收集开始打走完整的渗透流程。这不是点一下就能过的题目更像一次“开卷渗透测试”。还有国内圈子里常说的“红日靶场 1”是一套偏向内网域渗透的综合靶场涉及域环境、横向移动、权限维持等通常需要有 Web 渗透基础后再碰。这个阶段的靶场已经不适合“解题式”的刷了建议组个小队一起打边打边总结收获会更大。3.3 在线练习平台ctfshow、Polar、Bugku 怎么挑本地靶场练的是“确定性的漏洞”在线平台练的是“比赛的临场感”。国内几个常用平台各有侧重。ctfshow 的中文题目库非常丰富而且有专门的入门题序列难度从零起步对新手尤其友好。Polar 平台也提供周赛和日常题库题目风格比较贴近国内线上赛遇到“keyboard2.0”“盖房子”这类带点趣味名的题不用慌本质都是常见考点套了层皮。Bugku 是老牌中文练习平台题目分类清晰适合按方向刷。国外平台如 VulnHub、TryHackMe 内容质量很高但对刚入门的人来说存在语言门槛和付费门槛不是必需品建议有一定基础后再考虑。在线平台最大的意义是让你习惯在真实平台界面里提交 flag、看排名、复盘他人 writeup这一套流程只有真打比赛才能熟练。3.4 靶场启动失败我踩过的五个经典坑聊了这么多环境再分享一下我最常遇到的问题新手十有八九会碰到。第一个是端口占用。80 端口被系统或其他程序占用导致页面打不开。解决很简单映射到其他端口就行把命令里的80:80改成8080:80之类即可。第二个是 PHP 版本不兼容。老靶场项目往往面向 PHP 5.x 和 MySQL 5.x 设计你在新版 PHP 8 环境下跑起来轻则警告刷屏重则页面白屏。用 Docker 跑靶场能在很大程度上避免这问题因为镜像里的环境是作者配好的。第三个是 Docker 镜像拉取失败或者特别慢。这个没有太多捷径一般先检查网络是否正常再考虑更换 Docker 镜像源换源后重新拉取通常会好很多。第四个是数据库没初始化。很多靶场启动后需要访问一个 install 页面或者手动执行初始化脚本才能建好数据表。页面白屏时别只盯着 Web 端先看容器日志日志里通常会告诉你缺了什么。第五个是浏览器缓存干扰。改完配置再刷新时旧页面会被缓存顶住建议无痕窗口打开省去很多怀疑人生的时间。4. 工具包清单从 Kali 到 CyberChef 的极简组合提到 CTF 工具包绕不开 Kali Linux。它是基于 Debian 的渗透测试发行版预装了数百款工具不少 CTF 题目的标准解法就是要靠里面的某个工具。但 Kali 不是越新越好也不是装得越全越好关键在于你会不会围绕自己的主攻方向整理一套趁手的组合。4.1 Kali Linux先装起来桌面选 Xfce 就够Kali 的安装方式有物理机、虚拟机、WSL 等新手建议直接装虚拟机。使用虚拟机的好处是随意折腾靶场被打坏了、工具装崩了都不会影响主系统。虚拟机软件用 VMware 或 VirtualBox 都行Kali 官方提供了 vmware 镜像下载后直接打开就可以使用比自己用 ISO 安装省事很多。桌面环境我建议选 Xfce 而不是默认的 GNOME因为 Xfce 更轻量内存占用小跑 Burp Suite 和浏览器也不卡。装完第一件事是更换软件源。Kali 默认源在部分网络环境下更新很慢换成国内镜像源后执行apt update和apt upgrade再按需安装工具。这一步属于常规系统配置但确实能让后续体验好不少。你不用把 Kali 里所有工具都记住先认识自己方向最常用的五个就行。Web 方向先盯 Burp Suite、sqlmap、dirsearch、nmap、curlMisc 方向先盯 binwalk、strings、steghide、Wireshark、exiftool。其他工具用到再学。4.2 Web 方向核心工具Burp Suite 和 sqlmap 必须会用Web 方向最核心的工具是 Burp Suite。它本质上是一个拦截代理浏览器流量先经过它你可以在流量到达服务器之前修改请求参数也可以查看服务器返回的原始响应。很多题目只看“最终页面”是看不到线索的必须用 Burp 去看原始的请求和响应头。Burp 的基本工作流我简化成四步设置代理浏览器走 8080 端口打开 Proxy 的 Intercept 开关拦截请求把可疑请求发送到 Repeater 手动改参数测试需要爆破时再放到 Intruder 跑字典。Community 版就够入门用没必要找破解版破解版风险极大得不偿失。sqlmap 是 SQL 注入检测的自动化工具适合做初步探测但绝不能只会一键梭哈。正确用法是先用浏览器和手工 payload 判断存在注入点再用 sqlmap 验证和数据提取。一条基础命令长这样sqlmap -u http://127.0.0.1:8080/query.php?id1 --batch再次提醒这条命令只应该对着你自己搭建的靶机、或者比赛方明确授权的题目执行。CTF 的底线就是授权守不住这条底线技术再强也是给自己挖坑。目录扫描工具 dirsearch 也很常用一股脑跑一遍常见目录名能快速发现源码备份、管理后台、未授权文件等意外惊喜。命令样式是dirsearch -u http://127.0.0.1:8080/跑出来的结果往往藏着 Web 题的突破口。4.3 Misc、Crypto 与取证方向的极简工具链很多人觉得 Misc 题就是“玄学”其实不是它有一套固定的工具打法。文件分析三件套file识别类型strings提取可见字符串binwalk分离隐藏文件。图片隐写用 Stegsolve它可以逐通道查看图片LRB 隐写和像素异常在它面前藏不住。音频题用 Audacity打开频谱图有些题会把 flag 绘制成一段高频波形肉眼看不见换到频谱视图一眼就能扫出来。流量分析题的主力是 Wireshark。入门期你只需要掌握三招按协议过滤比如只显示http流量追踪 TCP 流看完整的请求响应内容导出 HTTP 对象把流量里传输过的文件直接导出来。很多流量题的 flag 其实就在某个不起眼的 POST 请求里或者藏在导出的图片中。编码和密码题用 CyberChef 最顺手它是一个在线的编码解密工具箱Base64、Hex、URL 编码、凯撒密码都能一键转换。遇到替换密码但不知道密钥的时候可以用 Quip 这类自动化词频分析工具辅助它能通过频率分析给出候选明文。密码爆破方面John the Ripper 和 hashcat 属于后期才需要深入的工具入门期先知道它们的存在就行。4.4 用 docker-compose 把常用靶场收进一个工具箱工具和靶场搞多了之后你会发现每天手动启动好几个容器很麻烦。这时候可以用一份 docker-compose 文件把常用靶场一起管起来。比如你在项目目录下新建docker-compose.yml内容大致长这样version: 3 services: dvwa: image: vulnerables/web-dvwa ports: - 8080:80 pikachu: image: 你的pikachu镜像名 ports: - 8081:80然后在同一个目录执行docker compose up -d就能一次性拉起全部靶场。要停掉就运行docker compose down。这套东西看起来简单却能极大节省你反复敲命令的时间让刷题流程变得流畅。镜像名如果记不准就去 Docker Hub 或对应项目的 GitHub 仓库看说明不要随便使用来历不明的整合包。这里多说一句网上流传的各种“CTF 全家桶工具包”我不太推荐下载里面很可能被人塞了后门。需要什么工具就装什么工具官方源一抓一大把没必要图方便冒这个险。5. 实战拆解两道典型题的完整拿 flag 过程光讲工具不讲题就像光教菜刀不教切菜看一百遍也不会做。这一章我用两道典型题把解题思路从头到尾走一遍。再一次强调题目环境来自授权的 CTF 靶场或本地搭建的靶机不要在未授权目标上尝试同样操作。5.1 Web 题一个“输入 ID 查询”背后藏着的 SQL 注入有一类特别经典的 Web 入门题页面看起来就是一个查询框题目描述写着“输入 ID 即可查询到信息但是报错感觉好奇怪……小小查询系统。”看到“报错”两个字优先怀疑 SQL 注入。我惯用的步骤一共四步。第一步看请求参数。直接在 URL 里改参数比如默认访问是query.php?id1我就在后面加一个英文单引号变成id1。如果页面报数据库错误说明参数可能被直接拼进了 SQL 语句。第二步验证闭合和列数。用id1 order by 2-- -不断试直到报错停止就能确定查询结果的列数。order by的作用是让查询结果按第几列排序如果指定列数超过实际列数数据库会报错。第三步联合查询。确认列数后用union select把我们要查的数据拼到正常结果里。比如知道是两列就可以用id1 union select user(),database()-- -这样页面上就会把数据库用户名和库名显示出来等于拿到了地图。第四步查表和查数据。继续用union select去查information_schema里的表名、列名最后定位到存放 flag 的那张表。这类题的解法和工具都在前文介绍过真正难的不是某一个 payload而是你能否形成这套“报错→判断→探测→提取”的稳定套路。多刷 SQLi-Labs 的几十关这个套路就会变成肌肉记忆。5.2 Misc 题把一段奇怪的按键记录还原成一句话Misc 题的趣味性很强比如有类键盘记录题题目给一个.txt文件里面是类似qwe rty uio p这样看起来完全没规律的字符串还有的会叫“keyboard2.0”这种名字一看就是键盘相关。碰到这种题千万别急着猜。第一件事是打开文件观察内容结构。如果内容是按键名或者坐标数字就要去查题目的提示或程序逻辑。很多键盘记录题的原理是把键盘按键的物理坐标按一定顺序读出来再映射回字符。通用做法是写一个 Python 脚本把按键数据按键盘布局还原。比如数据格式是“行列号”可以这样做keyboard [ list(qwertyuiop), list(asdfghjkl), list(zxcvbnm) ] data open(keyboard.txt).read().strip().split() result [] for item in data: row, col map(int, item) result.append(keyboard[row - 1][col - 1]) print(.join(result))注意不同题目的数据格式不一样脚本只是通用示例你得先花几分钟观察数据再调整解析逻辑。这类题考验的是读数据和写脚本的能力而不是多高深的密码学。看到“键盘记录”不要慌它多数时候比你想的简单得多。5.3 Writeup 怎么写才不白写写完一道题只提交 flag 是远远不够的真正的成长发生在写 writeup 的过程里。我自己的 writeup 模板固定是这几块# 题目名 - 来源平台名 / 比赛名 - 分值100 - 知识点SQL 注入 ## 解题过程 1. 打开页面发现查询功能 2. 参数后加单引号报错判断存在注入 3. 使用 order by 确定列数 4. union select 提取数据 5. 拿到 flag ## Flag flag{...} ## 踩坑记录 - order by 从 1 开始试不要直接跳 - 提交前检查 flag 格式写的时候问自己三个问题这题的考点是什么我在哪一步开始迷糊的下次碰到同类题第一步该做什么想清楚这三个问题writeup 就算写到位了。把每份 writeup 存成 Markdown 文件建个目录三个月后你就有了一本完全私有化的“CTF 题库笔记”价值远超收藏一百个教程链接。6. 避坑指南和长期成长建议最后聊一些我认为最该避开的坑很多内容是我自己踩出来的代价不小希望你别再重复。6.1 新手最容易踩的八个坑第一个坑只装工具不刷题。有些人能把 Kali 调出十几个工作区工具更新得比系统还勤就是不肯打开一道题。工具永远是辅助flag 是靠脑子想出来的。第二个坑sqlmap 一把梭。注入题先上 sqlmap跑不出来就放弃完全不知道手工注入的流程。这会让你的 Web 能力长期停留在“会用工具”的层面。第三个坑过早啃 Pwn 和 Reverse。零基础直接搞汇编、堆栈、脱壳大概率三天放弃。不是这些方向不好而是你应该在 Web 或 Misc 建立基础后再慢慢迁移。第四个坑忽略授权边界。在未经授权的系统上跑扫描、打 payload 是非常严重的问题CTF 圈子最看重这个。牢记一句话只打靶场只打授权的比赛环境。第五个坑不写 writeup。刷题如流水今天做明天忘刷一百道也沉淀不下来。笔记就是你和过去的自己对话断不得。第六个坑资料囤积症。收藏夹里几十个教程网盘里十几个 G 的“CTF 资料包”真正打开的没几个。建议按 90 天路线走一份资料吃透再看下一份。第七个坑只抄 writeup 不复盘。思路卡住了看答案很正常但看完必须自己在干净环境里重做一遍否则下次遇到相似题依然懵。第八个坑忽略基础知识。有些题看着很高端最后靠的是主机名解析、网络协议和操作系统常识。基础不牢地动山摇。6.2 从 90 天到一年逐步进阶的路线建议90 天结束你应该已经具备独立解 Web 或 Misc 入门题的能力了。接下来的半年到一年我的建议分三步。第一个阶段扩展方向。把之前没深入过的 Crypto、Reverse、Pwn 各挑两到三题入门不需要全会但要知道每个方向考什么、用什么工具这样在团队里才接得住不同类型的题。第二个阶段参加系列赛。找一个固定平台的周赛或月赛坚持每周打。成绩不重要但你要习惯每周定时抽出几个小时做限时题形成自己的做题节奏。第三个阶段尝试团队作战。找两三个水平相当的人组队模拟打一次 AWD。你会发现组队赛和个人赛完全是两种游戏一个人再强也扛不住多方攻击团队里的分工协作、信息同步和备份修复都是需要提前演练的。如果对数据安全和综合场景赛感兴趣也可以在这个阶段多关注相关赛事真题它们往往融合了流量分析、系统日志、敏感信息识别等环节练的是更贴近实际业务的能力同时也是对前面 Web、Misc 知识的一次大整合。6.3 关于工具和资料的最后一个建议我理解很多人看到“工具包下载”几个字会想直接问“有没有打包好的链接”。但我的真实建议还是别用各种整合包。CTF 工具链的维护本身就是一种学习你在找工具、装环境、看文档的过程中会积累大量解决问题的经验这些经验在比赛里同样是战斗力。所有常用工具都能从官方渠道拿到Kali 自带、各工具官网、GitHub Release 页、Docker Hub。笔记模板我上面给了靶场清单和命令也给了照着搭就行。我个人实际做项目期间的体会是CTF 入门最大的门槛从来不是天赋而是前两周能不能忍住“看不懂”的焦躁。头两周你会怀疑自己是不是太笨其实你只是还没形成这套解题语言的直觉。等第一个 flag 跳出来的那一刻你会突然明白之前所有枯燥的配置和命令都是值得的。所以别纠结太多先去把一个靶场跑起来跑起来之后再回来看这篇文章的后半段感受会完全不同。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →