第1章 无法摆脱的漏洞 1
1.1 软件漏洞的概念 1
1.2 软件漏洞的分类 2
1.2.1 缓冲区溢出漏洞 2
1.2.2 整数溢出漏洞 9
1.2.3 格式化字符串漏洞 10
1.2.4 指针覆盖漏洞 13
1.2.5 SQL注入漏洞 13
1.2.6 Bypass漏洞 16
1.2.7 信息泄露漏洞 17
1.2.8 越权型漏洞 18
1.3 软件漏洞的危害 18
1.3.1 无法正常使用 18
1.3.2 引发恶性事件 19
1.3.3 关键数据丢失 19
1.3.4 秘密信息泄露 19
1.3.5 被安装木马病毒 19
1.4 安全漏洞出现的原因 20
1.4.1 小作坊式的软件开发 20
1.4.2 赶进度带来的弊端 20
1.4.3 被轻视的软件安全测试 20
1.4.4 淡薄的安全思想 20
1.4.5 不完善的安全维护 21
1.5 做一名软件安全的维护者 21
第2章 建立软件漏洞发掘环境 22
2.1 虚拟机的安装 22
2.1.1 虚拟机的概念 22
2.1.2 为什么选择虚拟机 23
2.1.3 VMware的基本使用 23
2.2 IIS的安装 29
2.3 用XAMPP建立网站环境 32
2.4 软件漏洞发掘的基本步骤 33
2.4.1 提供源代码的情况 33
2.4.2 没有源代码的情况 33
2.5 软件漏洞发掘中需要注意的问题 34
2.5.1 漏洞成因的确定 34
2.5.2 漏洞危害的确定 34
2.5.3 多平台下的测试 34
第3章 文字处理型软件的漏洞剖析 35
3.1 何谓文字处理型软件 35
3.2 文字处理型软件漏洞的发掘思想 36
3.2.1 主动的功能测试 36
3.2.2 被动的输入性测试 39
3.2.3 两个漏洞发掘工作必备的软件 44
3.3 发掘文字处理型软件漏洞的难点 46
3.3.1 文件格式的不公开 46
3.3.2 手工测试任务量大 47
3.4 发掘漏洞软件FileFuzz的出现 47
3.5 实战课之一:使用FileFuzz发掘文字处理软件漏洞 52
3.6 文字处理型软件漏洞的危害与利用 57
3.6.1 ShellCode与木马植入 58
3.6.2 本地权限与系统命令 63
3.6.3 邮件附件中的隐蔽杀手 64
3.7 实战课之二:编写属于自己的发掘漏洞程序 64
3.8 媒体播放软件的漏洞发掘 71
3.9 文件处理型软件的漏洞发掘 73
3.10 FileFuzz程序的弊端 77
3.10.1 不善于发掘明文式漏洞 77
3.10.2 时间消耗大 78
3.10.3 误报几率高 78
3.10.4 盲目性大 79
3.11 FileFuzz程序的发展方向 79
3.11.1 自动判断文件格式 79
3.11.2 框架式的组成 79
3.11.3 自动分析与回溯测试 80
3.12 防范漏洞攻击的方法 80
3.12.1 及时升级软件补丁 80
3.12.2 防范来路不明的文档 81
3.13 小结 81
第4章 实战远程服务型软件的漏洞发掘 83
4.1 何谓远程服务型软件 83
4.2 明文式的数据包测试方法 84
4.2.1 发掘Web服务软件安全漏洞的方法 85
4.2.2 问答式远程服务软件的漏洞发掘 88
4.3 非明文式的数据包测试方法 89
4.4 发掘远程服务型软件漏洞的关键点 91
4.4.1 网络服务的正确使用 91
4.4.2 测试数据的有效组织 92
4.5 发掘远程服务型软件漏洞的难点 93
4.5.1 数据包格式的分析 93
4.5.2 测试数据量庞大 96
4.5.3 难以正确发送测试数据 97
4.6 网络型Fuzz工具 97
4.6.1 Web服务安全测试软件WebFuzz 98
4.6.2 FIP服务安全测试软件FTPFuzz 101
4.7 实战课之三:使用FTPFuzz发掘FTP服务器远程溢出漏洞 105
4.8 万能型的远程服务软件漏洞发掘工具——beSTORM 112
4.8.1 beSTORM功能简介 112
4.8.2 beSTORM的基本使用 113
4.9 实战课之四:另类的远程服务软件漏洞——SQL注入漏洞攻防 123
4.10 防火墙与防范远程漏洞攻击 128
4.11 小结 129
第5章 浏览器软件的漏洞发掘 130
5.1 常见浏览器的异同比较 130
5.2 发掘特殊的浏览器软件漏洞 132
5.2.1 黑白名单Bypass漏洞的发掘 132
5.2.2 跨域脚本访问漏洞的发掘 136
5.2.3 内容过滤机制不严漏洞的发掘攻防 142
5.3 利用基本的网页脚本发掘浏览器软件漏洞 144
5.3.1 超文本标记语言(HTML) 144
5.3.2 动态的HTML(DHTML) 146
5.3.3 对象模型(DOM) 146
5.3.4 层叠样式表(CSS) 147
5.4 浏览器漏洞与网页木马攻防剖析 148
5.4.1 网页木马的概念 148
5.4.2 浏览器自身导致的原因 151
5.4.3 ActiveX控件导致的原因 151
5.5 实战课之五:再现发掘浏览器溢出漏洞全过程攻防剖析 152
5.6 防范来自浏览器的攻击 154
5.7 小结 154
第6章 实战ActiveX控件的安全漏洞发掘 156
6.1 ActiveX控件的概念 156
6.2 浏览器与ActiveX的关系 157
6.2.1 网页程序与ActiveX控件 157
6.2.2 远程式ActiveX控件与本地式ActiveX控件 162
6.2.3 利用网页模板发掘ActiveX控件漏洞 163
6.3 获取ActiveX控件接口的方法 165
6.3.1 Visual C++编程查看ActiveX控件函数接口 165
6.3.2 使用OLEVIEW工具获取指定ActiveX控件的函数接口 170
6.4 ActiveX控件漏洞发掘利器——COMRaider 173
6.4.1 COMRaider简介 174
6.5 实战课之六:再现pdg2.dll控件缓冲区溢出漏洞全过程 177
6.6 ActiveX控件的危害剖析 187
6.6.1 网页挂马剖析 188
6.6.2 远程木马病毒攻防剖析 190
6.7 另类的ActiveX控件信息泄露漏洞剖析 191
6.8 阻止ActiveX控件漏洞攻击 194
6.8.1 安装浏览器防护软件 194
6.8.2 手工修改注册表 195
6.8.3 对开发者的忠告 196
6.9 小结 197
第7章 实战开源软件的安全漏洞发掘 198
7.1 开源软件的概念 198
7.2 程序审计技术简介 199
7.3 实战课之七:发掘开源程序中的远程溢出漏洞 202
7.4 实战课之八:发掘开源程序中的整数溢出漏洞 207
7.5 自动化程序审计 207
7.5.1 代码安全审计软件RATS的使用 208
7.5.2 静态安全漏洞扫描软件ITS4的使用 213
7.5.3 使用代码编译器自带的检查功能 218
7.6 小结 220
第8章 安全防护软件漏洞攻防 221
8.1 安全防护软件的范畴 221
8.1.1 杀毒软件 221
8.1.2 防火墙软件 221
8.1.3 入侵检测软件 221
8.2 安全防护软件漏洞剖析 222
8.2.1 从文件处理入手 222
8.2.2 从数据处理入手 223
8.2.3 从驱动程序入手 224
8.2.4 从软件组件入手 224
8.3 矛盾的安全防护软件 227
8.4 实战课之九:双剑合璧发掘杀毒软件远程删除文件漏洞 229
8.5 实战课之十:绕过杀毒软件的安全检测攻防剖析 234
8.6 实战课之十一:发掘防火墙规则文件溢出漏洞 236
8.7 加固安全防护软件 239
8.8 小结 240
第9章 系统内核里发掘漏洞 241
9.1 Ring0的世界 241
9.2 内核漏洞的成因 241
9.2.1 系统驱动程序的漏洞 241
9.2.2 第三方驱动程序漏洞 242
9.2.3 内核函数的漏洞 242
9.3 驱动程序出现漏洞的类型 242
9.3.1 溢出型漏洞 242
9.3.2 函数指针覆盖漏洞 242
9.4 发掘驱动程序漏洞的方法 243
9.4.1 驱动程序加载的过程 243
9.4.2 被利用的IRP(输入输出请求包) 248
9.4.3 发掘漏洞的基本思路 251
9.5 实战课之十二:深入剖析Win32驱动程序本地提权漏洞 253
9.6 获取IRP的方法 274
9.6.1 IDA的反汇编分析法 274
9.6.2 动态监视IRP 278
9.7 内核漏洞利用攻防剖析 281
9.8 小结 282
第10章 全面防范软件漏洞 283
10.1 安全编程的思想 283
10.2 必要的安全测试 286
10.3 及时公布安全补丁 286
10.4 正版软件的使用 287
10.5 在线升级与补丁安装 288
10.6 杀毒和防火墙软件的安装 290
10.7 良好的软件使用习惯 290
10.8 小结 290
附录A 一个发送自定义TCP数据包的Visual C++程序 291
附录B 一个驱动程序的完整实现程序 296
参考文献 300