第 1章 概述 1
1.1 CTF的起源和意义 1
1.2 CTF竞赛的主要内容 2
1.2.1 CTF竞赛题目形式 2
1.2.2 CTF竞赛模式 3
1.2.3 CTF竞赛组织方式 4
1.3 CTF竞赛的学习方法 5
1.3.1 夯实基础,勤于动手 5
1.3.2 积极参赛,以赛代练 6
1.3.3 组队学习,共同成长 7
第 2章 准备工作 10
2.1 前序课程准备 10
2.1.1 编程及计算机基础课程 10
2.1.2 计算机网络相关课程 11
2.1.3 操作系统相关课程 12
2.1.4 密码学相关课程 12
2.2 学习环境准备 13
2.2.1 操作系统安装 13
2.2.2 Web 环境搭建 15
2.2.3 二进制环境搭建 16
2.3 “First Blood” 20
2.3.1 网页代码审计 20
2.3.2 JavaScript 代码审计 20
2.3.3 消失的右键菜单 21
2.3.4 控制台巧反混淆 22
2.3.5 控制台再反混淆 22
2.3.6 响应头中的秘密 23
2.3.7 善用搜索引擎 23
2.3.8 简单的MD5解密 23
2.3.9 简单的程序开发 24
2.3.10 简单的图像隐写 24
2.3.11 Cookie可以改 25
2.3.12 Session 不能改 25
2.3.13 简单的XSS 25
2.3.14 简单的SQL注入 26
2.3.15 简单的逆向分析 27
2.3.16 成功通关 28
第3章 Web 30
3.1 基础知识 30
3.1.1 Web探究 30
3.1.2 Web安全基础 33
3.1.3 Web关键技术 34
3.2 实验环境与常用工具 37
3.2.1 实验环境 38
3.2.2 常用工具 39
3.3 服务层安全 43
3.3.1 服务端开发语言安全 43
3.3.2 服务端开发框架安全 55
3.3.3 服务端软件安全 56
3.3.4 服务端容器安全 57
3.3.5 服务端应用安全 59
3.3.6 服务端数据库安全 62
3.3.7 服务端网络服务安全 64
3.3.8 其他服务端漏洞 69
3.4 协议层安全 73
3.4.1 HTTP安全 73
3.4.2 HTTPS安全 79
3.4.3 DNS协议安全 82
3.5 客户层安全 89
3.5.1 XSS漏洞 90
3.5.2 CSRF漏洞 94
3.5.3 点击劫持 98
3.5.4 浏览器安全 99
3.6 Web中的认证机制 100
3.6.1 HTTP认证 100
3.6.2 单点登录 104
3.6.3 OAuth第三方认证 105
3.6.4 JSON Web Token 107
3.7 注入漏洞详解 109
3.7.1 SQL注入 109
3.7.2 XXE注入 121
3.7.3 HTML注入 124
3.7.4 LDAP注入 125
3.7.5 模板注入 125
3.8 反序列化漏洞详解 126
3.8.1 反序列化基础 127
3.8.2 PHP反序列化 128
3.8.3 Java反序列化 135
3.8.4 Python反序列化 148
第4章 Reverse 152
4.1 基础知识 152
4.1.1 Reverse是什么 152
4.1.2 程序的编译和解释 152
4.1.3 汇编语言基础 154
4.1.4 PE文件结构及执行原理 155
4.1.5 进程和线程 160
4.1.6 API函数和句柄 161
4.2 常用工具 162
4.2.1 文件查看工具 162
4.2.2 文件编辑器 164
4.2.3 静态分析工具 164
4.2.4 动态调试工具 168
4.3 一般程序逆向 177
4.3.1 问题解析 177
4.3.2 技术方法 178
4.3.3 赛题举例 193
4.4 反静态分析 197
4.4.1 问题解析 197
4.4.2 技术方法 198
4.4.3 赛题举例 202
4.5 反动态调试 208
4.5.1 问题解析 208
4.5.2 技术方法 209
4.5.3 赛题举例 212
4.6 虚拟机保护 215
4.6.1 问题解析 215
4.6.2 技术方法 216
4.6.3 赛题举例 218
第5章 Pwn 230
5.1 基础知识 230
5.1.1 Pwn是什么 230
5.1.2 栈与函数调用 230
5.1.3 ELF文件结构及执行原理 231
5.1.4 内存保护机制 238
5.1.5 shellcode基础 242
5.2 常用工具 245
5.2.1 程序运行环境 245
5.2.2 调试及分析工具 246
5.2.3 辅助工具 248
5.3 格式化字符串漏洞 256
5.3.1 问题解析 256
5.3.2 漏洞利用 259
5.3.3 赛题举例 264
5.4 栈溢出漏洞 273
5.4.1 问题解析 273
5.4.2 漏洞利用 273
5.4.3 赛题举例 275
5.5 堆相关漏洞 291
5.5.1 问题解析 291
5.5.2 漏洞利用 295
5.5.3 赛题举例 297
第6章 Crypto 307
6.1 基础知识 307
6.1.1 密码学的作用 307
6.1.2 密码学的基本概念 307
6.1.3 密码学的研究内容 308
6.1.4 古典密码与现代密码 309
6.2 常用工具 311
6.2.1 CyberChef 311
6.2.2 OpenSSL 312
6.2.3 古典密码工具 315
6.2.4 公钥密码相关工具 315
6.2.5 hash工具 317
6.3 古典密码 318
6.3.1 古代手工密码 318
6.3.2 近代机械密码 322
6.3.3 赛题举例 322
6.4 分组密码 324
6.4.1 分组密码概述 324
6.4.2 常见的分组密码 325
6.4.3 分组密码的工作模式 329
6.4.4 攻击技术及CTF考点 333
6.4.5 赛题举例 335
6.5 序列密码 345
6.5.1 一次一密密码体制 346
6.5.2 基于移存器的序列密码 346
6.5.3 其他序列密码 349
6.5.4 赛题举例 350
6.6 公钥密码 351
6.6.1 公钥密码的原理 351
6.6.2 常见公钥密码体制 352
6.6.3 攻击技术及CTF考点 354
6.6.4 赛题举例 355
6.7 哈希函数 366
6.7.1 哈希函数的原理 366
6.7.2 常见的哈希函数 366
6.7.3 攻击技术及CTF考点 372
6.7.4 赛题举例 373
第7章 Misc 375
7.1 基础知识 375
7.1.1 Misc是什么 375
7.1.2 信息搜集技巧 375
7.2 常用工具 377
7.2.1 Linux工具 377
7.2.2 Windows 工具 377
7.3 编码分析 378
7.3.1 问题解析 378
7.3.2 通信相关编码 378
7.3.3 计算机相关编码 379
7.3.4 生活中的编码 382
7.4 隐写分析 383
7.4.1 问题解析 383
7.4.2 图像隐写 383
7.4.3 音频隐写 388
7.4.4 视频隐写 390
7.5 流量分析 391
7.5.1 问题解析 391
7.5.2 修复流量包 391
7.5.3 Wireshark使用 393
7.5.4 常见协议分析 393
7.6 内存取证 402
7.6.1 题目类型及背景 402
7.6.2 计算机物理内存 402
7.6.3 常用的取证分析工具 403
第8章 竞赛参考 407
8.1 线上赛 407
8.1.1 线上赛的竞赛模式 407
8.1.2 赛题的拟制 408
8.2 线下赛 413
8.2.1 线下赛的竞赛模式 413
8.2.2 漏洞的修补 414
8.3 人工智能挑战赛 429
后记 432
展开