CTF Web 题目类型全景图:从 🟢 入门 到 🔴 地狱
📌 前置准备(不管哪个阶段都要装好的)
工具 | 用途 |
|---|
Burp Suite(Community版) | 抓包/改包/重放/爆破 — 你的主武器 |
dirsearch / gobuster | 目录扫描,找隐藏端点 |
curl / Python requests | 快速发请求、写脚本自动化 |
浏览器 DevTools | 看源码、查 Cookie、测前端逻辑 |
SQLMap(辅助) | SQL注入自动化,但要先懂手工再依赖它 |
核心前提:搞懂 HTTP 协议(方法/状态码/Header/Cookie/Session)——不懂计算机网络的一部分,后边都在靠蒙题。
🟢 Level 1 — 信息收集 & 侦察题(入门送分,⭐)
这些题不需要懂漏洞,考的是"你会不会看"。
题型 | 典型触发点 | 学习内容 |
|---|
查看页面源码 | <!-- flag{...} -->、var secret = ...直接写在前端
| 右键→查看源码、Ctrl+U |
robots.txt | /robots.txt泄漏敏感路径
| 网站约定俗成的爬虫排除标准 |
备份文件泄漏 | .bak、.swp、~、.git/
| 常见备份后缀 + GitHack 恢复源码 |
HTTP 头信息泄漏 | Server/ X-Powered-By/ 自定义头里藏 flag | curl -I、Burp 看 Response Headers
|
Cookie / Session 嗅探 | flag 直接塞 Cookie 里、弱 Session ID | Cookie 结构、Base64 decode |
弱口令爆破 | admin/admin、admin/password | Burp Intruder 基础用法 |
HTTP 方法/跳转绕过 | 302 跳转藏 flag、改 GET→POST | XFF/Referer 伪造、curl -X POST |
敏感文件 | /.git/config、/phpinfo.php、/admin/
| 字典枚举 + 信息拼图 |
📚 此阶段实践平台:Bugku(Web区)、攻防世界「新手区」、picoCTF(Web)
🟡 Level 2 — 经典单点漏洞(入门→初级,⭐⭐)
每个漏洞学"原理 → 手工利用 → 绕过基础过滤"这个循环,别只跑工具。
① SQL 注入(SQLi)
细分 | 内容 |
|---|
联合查询注入 | UNION SELECT读库名/表名/列名
|
布尔盲注 | 页面真假差异 → 逐字符猜解,写脚本 |
时间盲注 | SLEEP()/ BENCHMARK()逐字符爆破
|
报错注入 | updatexml()、extractvalue()让报错吐数据
|
堆叠注入 | 用 ;叠多条 SQL(看是否支持) |
WAF 初阶绕过 | 大小写混写、双写(uniunionon)、注释分割、URL编码二次解码 |
📚 靶场:SQLi-Labs(1~20关)、DVWA(SQLi模块)
② XSS(跨站脚本)
细分 | 考点 |
|---|
反射型 XSS | 输入直接回显到页面 → <script>alert(1)</script> |
存储型 XSS | 写入数据库再展示 → 常配合"偷管理员 Cookie"拿 flag |
DOM型 XSS | 前端 JS 不安全地操作 innerHTML/ eval() |
基础绕过 | 过滤 <script>→ 用 <img src=x onerror=...>、<svg>等 |
XSS 在 CTF 里常见套路:弹 Cookie → 带 document.cookie到你的 VPS → Cookie 里有 flag / 就是 Session
③ 命令注入 / RCE(远程代码执行)
考点 | 典型场景 |
|---|
分隔符 ;、` | 、&&、
|
过滤绕过 | 变量替换 a=c;b=at;$a$b,通配符 cat /fl* |
eval()/ assert()/ preg_replace /e(老PHP)
| 直接代码执行 |
🟠 Level 3 — 中级:文件操操 + 代码审计 + 协议类(初级→中级,⭐⭐⭐)
④ 文件上传
关卡 | 绕过手法 |
|---|
前端 JS 校验 | 关 JS / Burp 改包 |
MIME 类型校验 | 改 Content-Type: image/png |
后缀黑名单 | .php5、.phtml、.php;.jpg(IIS)、大小写
|
白名单 + 路径可控 | %00截断(旧版PHP)、路径穿越
|
二次渲染 | 图片马(exiftool -Comment='<?php ...>' 1.jpg) |
配合文件包含 → 上传合法图片 + 里面藏 PHP 代码,再用 LFI 触发 | |
⑤ 文件包含(LFI / RFI)
考点 | 内容 |
|---|
include($_GET['file'])
| ?file=../../../etc/passwd
|
PHP 伪协议 | php://filter/convert.base64-encode/resource=flag.php读源码
|
php://input
| + allow_url_include=On→ 直接 POST PHP 代码执行 |
data://text/plain;base64,...
| 数据协议执行 |
Session 文件包含 | 往 Session 里写 PHP 代码 → 再包含 session 文件 |
⑥ PHP 代码审计(单文件为主)
知识点 | 典型考法 |
|---|
弱比较 ==vs === | '0e123' == '0e456'→ Hash 碰撞绕过
|
md5()绕过
| 数组绕过 md5($_GET[a])→ a[]=1 |
变量覆盖 extract()/ parse_str() | 覆盖关键变量 |
ereg()/ 正则绕过
| 00 截断、strlen 限制绕过 |
__wakeup()绕过(CVE-2016-7124)
| 序列化对象成员数 > 实际 → 跳过 wakeup |
⑦ 反序列化(PHP — 最核心的中级考点)
序列化字符串可控 → 构造恶意对象 → __destruct()/__toString() 触发危险方法
要学 | 内容 |
|---|
PHP 序列化格式 | O:4:"User":1:{s:4:"name";s:5:"admin";}
|
魔术方法触发链 | __wakeup → __destruct → __toString
|
POP 链构造思路 | 找 sink(file_put_contents / system / eval)→ 往上找 source |
Phar 反序列化 | 通过上传 Phar 文件 + file_get_contents(phar://...)触发 |
⑧ SSRF(服务器端请求伪造)
考点 | 内容 |
|---|
基础 SSRF | ?url=http://127.0.0.1/flag.php或 http://169.254.169.254/(云元数据)
|
绕过 URL 过滤 | @、#、dict://、gopher://、进制 IP(2130706433=127.0.0.1)
|
结合 Redis / FastCGI | Gopher 打内网服务 |
⑨ XXE(XML 外部实体)
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///flag">]>
<user><name>&xxe;</name></user>
考 simplexml_load_string()未禁用外部实体 → 读 /etc/passwd或 /flag
📚 此阶段实践:CTFHub 技能树、攻防世界 2~3星题、BUUCTF(搜索 unserialize/SSRF/XXE标签)
🔴 Level 4 — 进阶:框架漏洞 + SSTI + 复杂审计 + WAF Bypass(中级→进阶,⭐⭐⭐⭐)
⑩ SSTI(服务端模板注入)
模板引擎 | 检测 Payload |
|---|
Jinja2 / Twig (Python/Flask) | {{7 * 7}}→ 49 → {{''.__class__.__mro__[1].__subclasses__()...}}→ RCE
|
Twig (PHP) | {{_self.env.registerUndefinedFilterCallback("exec")}}
|
Smarty (PHP) | {php}system("cat /flag");{/php}
|
→ 重点是顺着 MRO/继承链向上找到能执行命令的类
⑪ 框架 N-Day / 特性漏洞
框架 | 经典洞 |
|---|
ThinkPHP 5.x | s=captchaRCE、__construct任意文件包含
|
Struts2 | OGNL 注入(S2-xxx 系列) |
Spring | Spring Cloud Fn SpEL、Spring4Shell |
Flask / Django | DEBUG 页面泄露、Session 伪造(flask-unsign)、Django settings 泄露 |
Laravel | APP_KEY 已知 → Laravel RCE via __invoke |
⑫ WAF Bypass(高级过滤对抗)
⑬ 认证/逻辑漏洞(IDOR、JWT、OTP 绕过)
题型 | 内容 |
|---|
IDOR | /api/user?id=1→ 改 id=2看别人数据
|
JWT 攻击 | alg:none、弱密钥爆破(hashcat -m 16500)、RS256→HS256 混淆
|
密码重置逻辑缺陷 | Token 可预测 / 不绑定用户 / 重放 |
条件竞争 Race Condition | 余额扣除前并发请求(Flask/Django 无事务保护时) |
⚫ Level 5 — 高阶组合拳 & AWD / 现实向(⭐⭐⭐⭐⭐)
类型 | 说明 |
|---|
多漏洞链 | 信息泄露 → 拿源码 → 审计出反序列化链 → 找上传点 → Phar触发 → RCE |
Node.js 特有 | child_process.exec注入、prototype pollution(原型链污染)、vm2沙盒逃逸
|
Python 特有 | pickle反序列化 RCE、format string在 Flask、yaml.load()不安全解析
|
AWD 攻防模式 | 拿到 WebShell 后:不死马(.so后门 / find / -perm -4000)、流量混淆、批量打别人 + 补自己洞 |
内网渗透(线下赛延伸) | Webshell → 收集信息 → 横移 → 拿域控/数据库 → 拖 flag |
云原生/CTF 特殊 | Docker 逃逸线索、K8s Service Account Token、169.254.169.254SSRF |
🗺️ 推荐刷题路线(照着走不迷路)
阶段 | 平台 | 目标 |
|---|
第1~2周 | Bugku Web / 攻防世界「新手区」 | 搞定 Level 1(信息收集+HTTP基础),能独立解完所有新手题 |
第3~6周 | PortSwigger Web Security Academy + SQLi-Labs + DVWA | Level 2 核心漏洞逐个击破,每个漏洞亲手打10道题以上 |
第2~3月 | CTFHub 技能树 + BUUCTF(搜 tag) | Level 3:文件包含/反序列化/SSRF/XXE,跟 WP 对照但不照抄 |
第3~6月 | BUUCTF 高星 + 真实赛真题 + 打线上赛 | Level 4:框架洞+SSTI+JWT+Bypass,赛后复盘每个没做出来的题 |
之后 | AWD 练习平台 / 组队打高质量杯赛 | Level 5:组合利用 + 攻防 |
🧠 最后一句经验之谈
CTF Web 的本质不是"背 Payload",而是训练一个循环:**看见输入点 → 判断数据流向 → 猜后端怎么处理 → 找处理方式的漏洞 → 构造让后端哭的输入**。前期多手工写,别依赖 SQLMap 跑一切,不然一到不出回显的盲注/不出网的 RCE 就原地蒸发。
当然你想要辅助AI的话,请直接跟豆包对话。