第1章 绪论 1
1.1 病毒和木马 1
1.1.1 病毒 1
1.1.2 蠕虫 2
1.1.3 木马 2
1.2 漏洞危害 3
1.2.1 生活中的安全问题 3
1.2.2 漏洞产业链 4
1.2.3 漏洞产生的原因 5
1.2.4 软件安全的维护 6
1.3 渗透测试 7
1.3.1 渗透测试方法分类 8
1.3.2 渗透测试目标分类 8
1.4 实验环境 8
1.4.1 VMware Workstation的使用 8
1.4.2 认识Kali 11
第2章 基础知识 15
2.1 堆栈基础 15
2.1.1 内存区域 15
2.1.2 函数调用 16
2.1.3 寄存器与栈帧 17
2.1.4 汇编语言 19
2.2 二进制文件 25
2.2.1 PE文件格式 25
2.2.2 虚拟内存 27
2.2.3 PE文件与虚拟内存的映射 27
2.3 调试工具 30
2.3.1 O11yDBG 30
2.3.2 IDA 32
2.3.3 OllyDBG示例 36
第3章 漏洞概念 41
3.1 概念及特点 41
3.1.1 概念 41
3.1.2 特点 42
3.2 漏洞分类 42
3.2.1 漏洞分类 42
3.2.2 危险等级划分 44
3.3 漏洞库 45
3.3.1 CVE 46
3.3.2 BugTraq 46
3.3.3 NVD 46
3.3.4 CNNVD 47
3.3.5 CNVD 47
3.3.6 其他漏洞库 47
3.4 第一个漏洞 48
第4章 常见漏洞 51
4.1 缓冲区溢出漏洞 51
4.1.1 基本概念 51
4.1.2 栈溢出漏洞 51
4.1.3 其他溢出漏洞 53
4.2 格式化字符串漏洞 55
4.3 整数溢出漏洞 59
4.4 SQL注入漏洞 60
第5章 漏洞利用 64
5.1 漏洞利用概念 64
5.1.1 有关概念 64
5.1.2 示例 65
5.1.3 Shellcode编写 69
5.2 漏洞利用技术 72
5.2.1 静态Shellcode地址 72
5.2.2 动态变化的Shellcode地址 73
5.2.3 Heap Spray技术 74
5.3 软件防护技术 75
5.3.1 GS Stack Protection 75
5.3.2 DEP 77
5.3.3 ASLR 77
5.3.4 SafeSEH 78
5.3.5 SEHOP 78
第6章 漏洞挖掘 80
6.1 静态检测 80
6.1.1 源代码的检测 80
6.1.2 可执行代码检测 82
6.1.3 静态检测实践 83
6.2 动态检测 90
6.2.1 模糊测试 91
6.2.2 智能模糊测试 92
6.2.3 动态污点分析 93
6.2.4 动态检测实践 94
6.3 动静结合检测 101
第7章 渗透测试基础 103
7.1 渗透测试过程 103
7.2 Kali Linux基础 106
7.2.1 常用指令 106
7.2.2 软件包管理 108
7.3 渗透测试框架 108
7.3.1 认识Metasploit 108
7.3.2 常用命令 110
第8章 渗透测试实践 112
8.1 信息收集 112
8.1.1 被动信息收集 112
8.1.2 主动信息收集 116
8.2 扫描 121
8.2.1 Nessus准备 121
8.2.2 Nessus扫描 124
8.3 漏洞利用 126
8.4 后渗透攻击 130
8.4.1 挖掘用户名和密码 130
8.4.2 获取控制权 131
第9章 Web安全基础 134
9.1 基础知识 134
9.1.1 HTTP协议 134
9.1.2 HTML 134
9.1.3 JavaScript 135
9.1.4 HTTP会话管理 136
9.2 Web编程环境安装 137
9.2.1 环境安装 137
9.2.2 JavaScript实践 140
9.3 PHP与数据库编程 143
9.3.1 PHP语言 143
9.3.2 第一个Web程序 144
9.3.3 连接数据库 146
9.3.4 查询数据 147
9.3.5 一个完整的示例 147
9.3.6 Cookie实践 154
9.4 Web安全威胁 156
第10章 Web渗透实践 162
10.1 文件上传漏洞 162
10.1.1 WebShell 162
10.1.2 文件上传漏洞 163
10.2 SQL注入漏洞 165
10.2.1 SQL语法 165
10.2.2 注入原理 167
10.2.3 寻找注入点 168
10.2.4 SQLMap 169
10.2.5 SQL注入实践 169
10.3 跨站脚本攻击 177
10.3.1 脚本的含义 177
10.3.2 跨站脚本的含义 178
10.3.3 跨站脚本攻击的危害 180
10.4 整站攻击案例 181
第11章 软件安全开发 182
11.1 软件开发生命周期 182
11.1.1 软件开发生命周期 182
11.1.2 软件开发生命周期模型 183
11.2 软件安全开发 184
11.2.1 建立安全威胁模型 184
11.2.2 安全设计 185
11.2.3 安全编程 185
11.2.4 安全测试 186
11.3 软件安全开发生命周期 187
样题 192
参考文献 193