跳转至

CTF Web 安全学习路线

Web 方向研究浏览器、服务器、应用、数据库和操作系统之间的数据边界。CTF 题目常把一个很小的输入点与类型转换、解析差异、权限配置或多阶段数据流组合起来,因此理解根因比背诵载荷更重要。

仅限授权环境

本目录中的测试方法只适用于本地程序、课程靶场、比赛环境和明确授权的系统。验证时使用无害标记、只读操作和最小请求量,不扫描或利用未获授权的目标。

学习顺序

建议按以下顺序建立知识体系:

  1. 理解 HTTP 请求、响应、浏览器同源策略、Cookie 和 Session。
  2. 学习 PHP、SQL、HTML 与服务器配置的基本语义。
  3. 从输入源追踪到危险汇点,判断数据在哪一层被再次解释。
  4. 在隔离靶场中用最小样例验证假设,记录版本、配置和响应差异。
  5. 同时学习结构性修复、最小权限、日志和回归测试。

基础章节:

基础漏洞专题

专题 核心问题 主要防御边界
PHP 特性与 Web 安全 类型转换、参数解析、动态调用和文件 API 是否破坏程序假设 严格类型检查、固定映射、安全 API
SQL 注入 不可信数据是否成为数据库语法 参数化查询、标识符允许列表、最小权限
跨站脚本攻击 数据是否进入浏览器可执行上下文 按上下文编码、可信模板、CSP 纵深防御
CSRF 浏览器是否自动携带身份完成非自愿操作 CSRF 令牌、来源校验、SameSite、再认证
SSRF 用户是否能控制服务器建立的网络连接 固定目标、URL/IP 校验、逐跳复验、出口控制
文件包含 用户输入是否决定模板或文件路径 业务键到固定模板的映射、目录隔离
文件上传 不可信字节如何验证、存储、转换和提供下载 私有存储、随机命名、重新编码、不可执行目录
解析漏洞 代理、服务器、运行时和文件系统是否解释不一致 锚定处理器映射、统一规范化、配置回归测试
命令执行与命令注入 输入是否进入 Shell、运行时或模板解释器 删除 Shell 边界、参数数组、固定动作映射
命令执行过滤绕过 黑名单为何无法覆盖多层解析和展开 结构化调用、业务允许模型、最小环境

XSS 配套练习可继续阅读 XSS-LAB。

通用分析模型

面对一道 Web 题或一段业务代码,可以先画出下面的数据流:

HTTP 输入
-> 代理与框架解析
-> 类型转换和业务校验
-> SQL / HTML / URL / 路径 / 模板 / Shell
-> 数据库、浏览器、网络、文件系统或操作系统

重点回答六个问题:

  1. 输入来自 GET、POST、JSON、Cookie、请求头、上传文件,还是数据库中的历史数据?
  2. 各层看到的类型和值是否一致,是否存在重复参数、二次解码或规范化差异?
  3. 最终汇点把输入当作普通数据,还是 SQL、HTML、路径、URL、模板或命令语法?
  4. 漏洞成立依赖哪些版本、模块、INI 选项、服务器映射或浏览器行为?
  5. 能否用无害标记、真假条件、固定日志或本地监听器完成低影响验证?
  6. 修复是否真正移除了危险解释边界,而不是只增加关键字黑名单?

授权实验流程

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 安全的核心问题始终是:不可信数据在哪一层获得了超出业务需要的解释能力或权限。 沿着数据流定位这条边界,再用结构化接口和最小权限移除它,才能得到可复现的分析与可靠的修复。