Web | 网络攻防

Web 是 CTF 中题量最大、入门门槛最低、上限也最高的方向。这部分章节不是按"前端语法 → 后端语言 → 漏洞"的学院派顺序组织的,而是按一条真正能走通的 CTF 学习路径组织的。开始之前,先花几分钟读完这篇导语——它决定了你应该怎么用这本书。

从题中学

本书的核心主张:不提倡硬啃完前端或某门语言的全部知识后才开始做题,而是提倡从题目中学习

正确的姿势是:拿到一道题,读题、测功能点、形成假设;卡住时回到对应章节,按需查阅你需要的那一小块知识;解出题后,把用到的技巧沉淀进自己的 payload 库(方法见「Writeup复盘方法」一章)。书中每章按「原理 → 最小示例 → 典型例题」组织,例题涉及的前置知识会直接指出章节名,方便你跳过去补。

Web 基础从哪开始:不是前端语法,而是 HTTP 包

很多教程让新手先学 HTML/CSS/JavaScript 语法,这对 CTF 是本末倒置。对 CTFer 来说,Web 基础的真正起点是 HTTP(s) 协议本身——学会抓包、读包、改包、重放包(见「HTTP协议」与「Burp Suite」两章),你就有了观察一切 Web 题的入口。

至于那些"前端知识",CTF 需要的从来不是会写页面,而是从题目中体会 前端导致的泄漏点和交互背后的原理

  • DOM 操作与事件——在「XSS攻击」中现学;
  • 表单与前端校验——在「文件上传」中现学;
  • 前端加解密逻辑——在「JS逆向」中现学。

同理,数据库的增删改查不需要单独开课——CRUD 原理在「SQL注入」一章里边做题边学就够了。每一块语法都在它被当作考点的那一章里"按需出现"。

PHP 起步:从"特性"这个 tag 开始扩展

主线的起点是 PHP,而且建议从「PHP特性与常见绕过」这个 tag 开始扩展,而不是从 PHP 语法课本开始。原因有三:

  • CTF Web 题中 PHP 占比最高,且 PHP 的"特性"本身就是出题点;
  • 几乎所有漏洞类型——注入、反序列化、文件类、RCE——都可以先在 PHP 语境里学第一遍,把漏洞思想建立起来;
  • PHP 特性不止服务于 PHP 本身,它会被广泛应用到各种 Bypass 中:命令执行与代码执行里,攻击者靠一些语法就能完成攻击——比如 PHP 自增特性拼出任意函数名,比如利用 ?><?php phpinfo();?> 这类尾部闭合与标签特性绕过过滤。

所以「PHP特性与常见绕过」是全教程的枢纽章:后面 SQL 注入绕过、文件上传绕过、无参 RCE、WAF 绕过都会反复回到它。遇到不懂的 PHP 语法再去「PHP基础」按需查阅——从题目中学习语法、在题目中理解特性,这本身就是一个必要且高效的过程。

世界不止有 PHP

当你用 PHP 入门了一批基础漏洞——SQL 注入、文件上传这些——你会发现一件事:世界不止有 PHP(本来就是这样)。拿反序列化来说,不止 PHP 有,Python 有 pickle,Java 有 gadget chain,思想相通、实现各异。

本书把这部分单列为「语言扩展」:Python 反序列化对照 PHP 的 POP 链来学,Java 反序列化同样如此,SSTI 从 Twig/Smarty 过渡到 Jinja2。目录这么排,就是想明确告诉新手两件事:从 PHP 学漏洞是对的,但不要以为 Web 只有 PHP——带着「这和 PHP 里那个东西有什么异同」的问题去读这些章节,效率会高得多。

环境能力:会搭 → 会打 → 会逃

Web 选手的天花板往往不在漏洞知识,而在环境能力:

  • 会不会用 Docker / vulhub 在本地 复现 一个漏洞环境——这直接决定你在 Nday 题上的得分速度;
  • 会不会用虚拟机构建多网卡、多网段的网络拓扑,把比赛的内网渗透题在本地演一遍;
  • 遇到 Web 和二进制结合的题目,能不能把 Web 入口拿到的信息衔接成对内部服务的利用(见「Web与二进制结合」)。

「环境与工具」部分放在最前面打基础,进阶专题里的「云与容器安全」与之呼应:会搭 → 会打 → 会逃

比赛趋势:从解题赛走向多层网络渗透

目前的比赛形式也在变。Web 除了 CTF 里比较单纯的解题赛,多层网络的渗透 / 内网渗透类题目越来越受青睐——给你一个 Web 入口,背后是两到三层网络:打点、立足、搭代理、逐层横向,直到摸到核心内网的 flag。这类偏实战的题区分度极高,也正是本书「实战能力」部分的设计依据:先链路(渗透流程总览)、后层数(两层 → 三层 → 多层)、再对抗(AWD、域渗透、Web 与二进制结合)。

带着这些认知,从「环境与工具」开始吧。

评论