CTF Web 安全学习路线¶
Web 方向研究浏览器、服务器、应用、数据库和操作系统之间的数据边界。CTF 题目常把一个很小的输入点与类型转换、解析差异、权限配置或多阶段数据流组合起来,因此理解根因比背诵载荷更重要。
仅限授权环境
本目录中的测试方法只适用于本地程序、课程靶场、比赛环境和明确授权的系统。验证时使用无害标记、只读操作和最小请求量,不扫描或利用未获授权的目标。
学习顺序¶
建议按以下顺序建立知识体系:
- 理解 HTTP 请求、响应、浏览器同源策略、Cookie 和 Session。
- 学习 PHP、SQL、HTML 与服务器配置的基本语义。
- 从输入源追踪到危险汇点,判断数据在哪一层被再次解释。
- 在隔离靶场中用最小样例验证假设,记录版本、配置和响应差异。
- 同时学习结构性修复、最小权限、日志和回归测试。
基础章节:
基础漏洞专题¶
| 专题 | 核心问题 | 主要防御边界 |
|---|---|---|
| PHP 特性与 Web 安全 | 类型转换、参数解析、动态调用和文件 API 是否破坏程序假设 | 严格类型检查、固定映射、安全 API |
| SQL 注入 | 不可信数据是否成为数据库语法 | 参数化查询、标识符允许列表、最小权限 |
| 跨站脚本攻击 | 数据是否进入浏览器可执行上下文 | 按上下文编码、可信模板、CSP 纵深防御 |
| CSRF | 浏览器是否自动携带身份完成非自愿操作 | CSRF 令牌、来源校验、SameSite、再认证 |
| SSRF | 用户是否能控制服务器建立的网络连接 | 固定目标、URL/IP 校验、逐跳复验、出口控制 |
| 文件包含 | 用户输入是否决定模板或文件路径 | 业务键到固定模板的映射、目录隔离 |
| 文件上传 | 不可信字节如何验证、存储、转换和提供下载 | 私有存储、随机命名、重新编码、不可执行目录 |
| 解析漏洞 | 代理、服务器、运行时和文件系统是否解释不一致 | 锚定处理器映射、统一规范化、配置回归测试 |
| 命令执行与命令注入 | 输入是否进入 Shell、运行时或模板解释器 | 删除 Shell 边界、参数数组、固定动作映射 |
| 命令执行过滤绕过 | 黑名单为何无法覆盖多层解析和展开 | 结构化调用、业务允许模型、最小环境 |
XSS 配套练习可继续阅读 XSS-LAB。
通用分析模型¶
面对一道 Web 题或一段业务代码,可以先画出下面的数据流:
重点回答六个问题:
- 输入来自 GET、POST、JSON、Cookie、请求头、上传文件,还是数据库中的历史数据?
- 各层看到的类型和值是否一致,是否存在重复参数、二次解码或规范化差异?
- 最终汇点把输入当作普通数据,还是 SQL、HTML、路径、URL、模板或命令语法?
- 漏洞成立依赖哪些版本、模块、INI 选项、服务器映射或浏览器行为?
- 能否用无害标记、真假条件、固定日志或本地监听器完成低影响验证?
- 修复是否真正移除了危险解释边界,而不是只增加关键字黑名单?
授权实验流程¶
1. 建立基线¶
记录正常请求的 HTTP 方法、参数来源、Content-Type、Cookie、状态码、稳定响应字段和平均耗时。先确认功能本身如何工作,再改变一个变量进行测试。
2. 确认环境¶
从题目附件、源码和本地容器确认语言、框架、数据库、Web 服务器、运行时版本及关键配置。历史解析漏洞和 PHP 行为尤其不能脱离版本讨论。
3. 形成单一假设¶
例如“该值位于数字 SQL 条件”“该参数选择包含模板”“该 URL 会由服务端请求”。每次只验证一个假设,避免同时改变编码、引号、方法和请求体格式。
4. 使用无害证据¶
优先使用固定文本、真假响应差异、短延迟、自有本地监听器、退出码和服务端日志。不要为了证明漏洞读取真实凭据、执行破坏命令或扩大数据范围。
5. 给出结构性修复¶
修复应与危险汇点对应:
- SQL 使用参数化查询。
- HTML 使用按上下文输出编码。
- 页面和文件使用固定标识映射。
- URL 请求使用目标允许策略与网络出口控制。
- 外部程序使用固定可执行文件和参数数组,能不用则不用。
- 状态修改请求使用成熟框架的 CSRF 防护。
工具定位¶
浏览器开发者工具、Burp Suite、OWASP ZAP、数据库客户端和本地容器都可以帮助观察请求与数据流。工具只能放大已有方法,不能代替授权范围确认、源码理解和人工最小验证。
使用自动化工具前应确认:
- 目标和账户明确属于授权范围。
- 比赛或测试规则允许自动化。
- 已有人工验证依据,而不是无目的扫描。
- 设置了线程、请求数、超时、延迟和数据范围上限。
- 达到验证目标后立即停止。
防御视角¶
学习漏洞时同步检查以下通用控制:
- 输入具有明确来源、类型、长度、格式、枚举和范围。
- 数据进入不同上下文时使用对应的结构化 API,而非字符串拼接。
- 认证、对象级授权、CSRF、CORS 和输入验证分别处理。
- 应用、数据库、文件系统和网络均遵循最小权限。
- 上传、日志、缓存、会话、模板和应用代码物理隔离。
- 生产错误响应不泄露 SQL、路径、堆栈和密钥,内部日志可关联且不记录秘密。
- 代理、服务器、运行时、框架和依赖保持更新,并对关键配置建立回归测试。
Web 安全的核心问题始终是:不可信数据在哪一层获得了超出业务需要的解释能力或权限。 沿着数据流定位这条边界,再用结构化接口和最小权限移除它,才能得到可复现的分析与可靠的修复。