编程与 CTF 学习路线¶
本栏目建立从高级语言、Web 文档到机器指令的完整知识链。重点不是背诵语法,而是理解数据如何表示、程序如何执行、输入如何跨越信任边界,以及如何用工具验证判断。
课程主线¶
| 主线 | 主要能力 | 典型 CTF 场景 | 建议基础 |
|---|---|---|---|
| Python | 自动化、文本与二进制处理、网络脚本 | Misc、Crypto、Web、Pwn 辅助 | 可作为第一门语言 |
| HTML | 网页结构、表单、DOM、输出上下文 | Web、XSS 分析 | 无 |
| SQL | 查询、连接、约束、索引、数据建模 | Web、代码审计、数据库基础 | 基础编程与表结构概念 |
| PHP | 服务端请求处理、Session、数据库 | Web 代码审计 | HTML 与 HTTP 基础 |
| C/C++ | 类型、指针、内存、编译与链接 | Reverse、Pwn | 基础控制流 |
| Rust | 所有权、类型安全、系统开发与安全并发 | Reverse、Pwn、工具开发 | 基础控制流与类型概念 |
| x86-64 汇编 | 寄存器、栈、ABI、反汇编与调试 | Reverse、Pwn | C 与指针 |
HTML 是标记语言,不是传统意义上的编程语言,但它是理解浏览器、Web 表单和 XSS 上下文的必要基础。
推荐顺序¶
通用 CTF 路线¶
- 先学 Python,掌握变量、容器、函数、文件、字节和基础网络编程。
- 学 HTML,理解浏览器接收的文档、表单和 DOM。
- 学 SQL,理解关系型数据库中的查询、表结构和约束。
- 学 PHP,理解服务端如何读取请求、访问数据库并生成响应。
- 学 C/C++,建立类型、地址、生命周期、编译与链接模型。
- 学 Rust,通过所有权、Trait 和
Result理解另一种资源与错误建模方式。 - 学汇编,把高级语言函数与寄存器、内存、调用约定对应起来。
Web 路线¶
Reverse/Pwn 路线¶
所有语言共享的核心概念¶
数据与类型¶
程序处理的是具有表示方式和约束的数据。学习任何语言时都要问:
- 值属于什么类型?
- 类型转换是显式还是隐式?
- 整数是否可能溢出?
- 文本使用什么编码?
- 当前对象或缓冲区是否可变?
- 数据在内存、文件和网络中如何表示?
Python 的 str 与 bytes、C 的字符数组、PHP 的字符串以及 HTML 的 UTF-8 文档处于不同抽象层,不能因为都能“显示文字”就混为一谈。
控制流¶
分支、循环、函数调用和异常决定程序执行路径。高级语言中的 if、for 和函数调用,最终会表现为比较、跳转、栈操作和调用约定。Reverse 的重要任务之一,就是从低层控制流恢复高层结构。
状态与生命周期¶
状态可能位于局部变量、堆对象、文件、数据库、Cookie 或 Session 中。必须明确:
- 谁创建它?
- 谁拥有或共享它?
- 谁可以修改它?
- 它何时失效或释放?
- 失败路径是否也会清理资源?
C/C++ 的悬空指针、Python 的共享可变对象和 PHP 的 Session 问题,本质上都与状态边界有关。
输入、验证与输出¶
命令行参数、文件、网络请求、数据库旧数据和反序列化内容都应视为不可信输入。安全处理通常分为三步:
- 按业务规则验证格式、长度、范围和允许值。
- 在内部使用明确的数据类型和结构处理。
- 在 SQL、HTML、命令行或文件路径等具体输出位置使用对应的安全 API。
不存在适用于所有场景的“万能过滤”。参数化 SQL、HTML 上下文转义和安全进程 API 解决的是不同问题。
执行模型¶
- C/C++ 通常先编译为目标文件,再由链接器生成机器码程序。
- Rust 通常由
rustc编译并链接为原生程序,Cargo 负责包、依赖和构建工作流。 - 汇编器将助记符转换为机器指令,但符号和地址仍可能需要链接处理。
- CPython 通常先生成字节码,再由虚拟机执行,也可能加载原生扩展。
- PHP 源码由相应 SAPI 执行,生产环境常配合 PHP-FPM 和操作码缓存。
- HTML 不执行算法;浏览器解析字节流并构建 DOM,再结合 CSS 和 JavaScript 工作。
理解具体工具链比给语言贴单一的“编译型”或“解释型”标签更有价值。
学习方法¶
每学一个主题,都应完成四类练习:
- 预测:运行前写出预期结果和理由。
- 验证:使用编译器、解释器、浏览器开发者工具或调试器观察实际行为。
- 变形:修改类型、边界、输入和错误路径,观察规则何时变化。
- 复盘:解释错误属于语法、类型、运行时、协议还是安全边界问题。
建议把示例保存在独立练习目录,并使用版本控制记录每次实验。不要只复制代码而不理解输入、输出和失败条件。
安全学习边界¶
安全与 CTF 章节用于本地实验、课程靶场和明确授权的竞赛环境。学习目标是理解漏洞成因、识别危险模式、验证保护机制并编写安全代码,不应将示例用于未授权系统。
完成本栏目后,应能够沿着以下路径解释一个程序: