本书的主要内容围绕培养安全漏洞的发掘、利用、修复、防御等技术人才这一目标展开,全书共分8章,首先,介绍了CTF竞赛的基本情况;然后,讲解了CTF学习环境的搭建和工具的准备工作;接着,对竞赛问题进行了详细的阐述,并辅以大量例题;最后,对CTF竞赛的参赛技巧进行了总结,并介绍了CTF竞赛的前沿发展方向。
本书既可作为高等院校网络安全专业的本科教材,也适合网络安全、信息安全、计算机及相关学科的研究人员阅读。
1.战队参与,一线指导。一手的素材,本书由华中科技大学战队成员参与、一线指导老师规划、设计;
2.十年科研经验结晶。结合作者的科研成果、总结10多年来的科研经验基础上整理而成;
3.原理介绍深入浅出。紧密契合大学生对象,考虑了大学生相关的课程,如计算机网络、操作系统、计算机组成原理等,同时,对原理的介绍做到深入浅出、更适合大学生;
4.竞赛例题,简化学习。丰富的例题,基于华中科技大学近年来参与、组织的网络攻防竞赛工作,教材集成了大量的赛题,大大简化了读者学习的过程。
韩兰胜,男,教授,博士生导师,武汉市黄鹤英才。长期从事网络、信息安全方面的教学、科研工作,是国家有关部门多项安全项目负责人。近10年来为本科生主讲《计算机病毒原理及防治技术》(主编)、《软件安全》,《网络安全综合实践III级》,主要研究方向为网络安全:恶意代码、移动网络安全、网络行为分析以及大数据安全理论与技术。以第一或通讯作者发表文章50余篇(SCI-20余篇)。主持或参与湖北省自科基金、国家自科基金青年及面上、重大仪器项目5项,其他项目10余个、组建华科网络攻防俱乐部,近年来带领俱乐部成员积极参加网络安全对抗赛,在知名竞赛中都名列前茅,稳居全国第一梯队,比如在全国大学生信安大赛创新实践赛全国总决赛的亚军。
第 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