第1章 安全测试的一般方法 1
1.1 安全测试人员的不同类型 2
1.2 一种安全测试的方法 3
1.2.1 深入理解测试的内容 4
1.2.2 从攻击者的角度思考如何攻击目标 6
1.2.3 攻击产品 8
1.2.4 时刻关注新的攻击 8
1.3 小结 9
第2章 利用威胁模型进行安全测试 10
2.1 威胁建模 10
2.2 测试人员如何对威胁模型分级 11
2.3 数据流程图 12
2.4 入口点和退出点的安全 13
2.5 识别威胁的技巧及常见威胁 14
2.6 测试人员如何利用一个完整的威胁模型 16
2.7 技术实现难以符合产品规范或威胁模型 19
2.8 小结 20
第3章 查找入口点 21
3.1 查找入口点并划分等级 22
3.2 常见入口点 23
3.2.1 文件 23
3.2.2 套接字(Socket) 27
3.2.3 HTTP请求 29
3.2.4 命名管道 32
3.2.5 可插入协议处理程序 35
3.2.6 恶意服务器响应 37
3.2.7 程序化接口 38
3.2.8 SQL 39
3.2.9 注册表 39
3.2.10 用户接口 41
3.2.11 E-mail 42
3.2.12 命令行参数 44
3.2.13 环境变量 45
3.3 小结 47
第4章 成为恶意的客户端 48
4.1 客户端/服务器交互 48
4.1.1 发现服务器正常接收的请求 49
4.1.2 操纵网络请求 51
4.2 测试HTTP 55
4.2.1 理解无状态协议 56
4.2.2 接收输入的测试方法 56
4.3 快速测试特定的网络请求 66
4.4 测试技巧 68
4.5 小结 69
第5章 成为恶意的服务器 70
5.1 理解客户端接收恶意服务器响应的常见方法 71
5.2 SSL能否阻止恶意服务器的攻击 73
5.3 操纵服务器响应 73
5.4 恶意响应漏洞的例子 74
5.5 错误认识:对攻击者来说创建恶意服务器非常困难 76
5.6 理解降级(Downgrade)MITM攻击 77
5.7 测试技巧 78
5.8 小结 79
第6章 欺骗 80
6.1 掌握欺骗问题的重要性 80
6.2 寻找欺骗问题 82
6.3 常见欺骗案例 82
6.3.1 IP地址欺骗 83
6.3.2 MAC地址欺骗 84
6.3.3 利用网络协议欺骗 85
6.4 用户接口(User Interface,UI)欺骗 88
6.4.1 重构对话框 88
6.4.2 Z-Order欺骗 93
6.4.3 让人误解的URL和文件名 94
6.5 测试技巧 97
6.6 小结 97
第7章 信息泄露 98
7.1 信息泄露问题 98
7.2 定位信息泄露的常见区域 99
7.2.1 文件泄露 99
7.2.2 网络泄露 107
7.3 识别重要的数据 111
7.3.1 数据混淆 112
7.3.2 隐含泄露 113
7.4 小结 113
第8章 缓冲区溢出及堆栈/堆操纵 114
8.1 了解溢出的工作原理 117
8.1.1 堆栈溢出 118
8.1.2 整型溢出 121
8.1.3 堆溢出 128
8.1.4 其他攻击 129
8.2 溢出测试:在哪里寻找(测试)用例 130
8.2.1 网络 130
8.2.2 文档与文件 131
8.2.3 较高权限和较低权限用户之间的共享信息 131
8.2.4 可编程接口 132
8.3 黑盒(功能)测试 133
8.3.1 确定期待的是什么数据 133
8.3.2 使用你能识别的数据 134
8.3.3 了解界限与边界 134
8.3.4 保持全部数据的完整性 137
8.3.5 改造正常数据使其溢出的策略 141
8.3.6 测试首要行为和次要行为 143
8.3.7 要查找什么 144
8.3.8 运行时工具 156
8.3.9 模糊测试 158
8.4 白盒测试 159
8.4.1 要查找的对象 160
8.4.2 溢出的可用性 164
8.4.3 Unicode数据 169
8.4.4 已过滤的数据 170
8.5 其他主题 170
8.5.1 无代码执行的溢出也很严重 170
8.5.2 /GS编译器开关 173
8.6 测试技巧 175
8.7 小结 176
第9章 格式化字符串攻击 177
9.1 什么是格式化字符串 178
9.2 理解为什么格式化字符串存在问题 178
9.2.1 剖析prinf调用 179
9.2.2 堆栈解析错误 180
9.2.3 内存覆盖 182
9.3 格式化字符串安全漏洞测试 183
9.3.1 代码检查 183
9.3.2 黑盒测试 184
9.4 走查(Walkthrough):经历一个格式化字符串攻击过程 185
9.4.1 寻找格式化字符串漏洞 185
9.4.2 分析可利用性 186
9.4.3 深度挖掘:围绕可利用性问题进行工作 189
9.4.4 构建一个简单的负载 201
9.5 测试技巧 208
9.6 小结 209
第10章 HTML脚本攻击 210
10.1 理解针对服务器的反射跨站脚本攻击 211
10.1.1 例子:一个搜索引擎中的反射XSS 212
10.1.2 理解为什么XSS攻击是安全相关的 214
10.1.3 利用服务端的反射XSS漏洞 216
10.1.4 POST也是可利用的 218
10.2 理解针对服务器的持久性XSS攻击 219
10.2.1 例子:在一个留言簿中的持久性XSS攻击 220
10.2.2 利用针对服务器的持久性XSS攻击 221
10.3 识别用于反射和持久性XSS攻击的数据 221
10.4 程序员阻止攻击的常用方法 224
10.5 理解针对本地文件的反射XSS攻击 227
10.5.1 例子:本地文件中的反射XSS 228
10.5.2 利用本地文件中的反射XSS漏洞 229
10.5.3 理解为何本地XSS漏洞是一个问题 229
10.5.4 利用本地XSS漏洞在受害者的机器上运行二进制文件 232
10.5.5 HTML资源 233
10.5.6 编译后的帮助文件 234
10.5.7 在客户端脚本中查找XSS漏洞 236
10.6 理解本地计算机区域中的脚本注入攻击 237
10.6.1 例子:在Winamp播放列表中的脚本注入 237
10.6.2 把非HTML文件当作HTML来解析 240
10.7 程序员用于防止HTML脚本攻击的方法 243
10.7.1 过滤器 243
10.7.2 深入理解浏览器中的解析器 245
10.7.3 Style中的注释 245
10.7.4 ASP.NET内置的过滤器 247
10.8 理解Internet Explorer如何减轻针对本地文件的XSS攻击 248
10.8.1 从互联网到本地计算机区域的链接被阻止 248
10.8.2 在默认情况下,脚本在本地计算机区域中是禁止运行的 248
10.9 识别HTML脚本的脆弱性 250
10.10 通过检查代码查找HTML脚本漏洞 250
10.10.1 识别所有返回内容给Web浏览器或者文件系统的位置 251
10.10.2 确定输出中是否包含攻击者提供的数据 251
10.10.3 检查攻击者的数据是否进行了适当的验证或者编码 252
10.10.4 ASP.NET自动对数据进行编码 253
10.11 小结 254
第11章 XML问题 255
11.1 测试XML输入文件中的非XML安全问题 255
11.1.1 结构良好的XML 256
11.1.2 有效的XML 257
11.1.3 XML输入中包括非字母数字的数据 257
11.2 测试特定的XML攻击 260
11.2.1 实体(Entity) 260
11.2.2 XML注入(XML Injection) 263
11.2.3 大文件引用(Large File Reference) 266
11.3 简单对象访问协议(Simple Object Access Protocol) 266
11.4 测试技巧 271
11.5 小结 271
第12章 规范化问题 272
12.1 理解规范化问题的重要性 272
12.2 查找规范化问题 273
12.3 基于文件的规范化问题 273
12.3.1 目录遍历 274
12.3.2 使文件扩展名检查失效 274
12.3.3 导致规范化问题的其他常见错误 277
12.4 基于Web的规范化问题 282
12.4.1 编码问题 282
12.4.2 URL问题 287
12.5 测试技巧 290
12.6 小结 291
第13章 查找弱权限 292
13.1 理解权限的重要性 293
13.2 查找权限问题 294
13.3 理解Windows的访问控制机制 295
13.3.1 安全对象 295
13.3.2 安全描述符 296
13.3.3 ACL 296
13.3.4 ACE 297
13.4 查找和分析对象的权限 298
13.4.1 使用Windows安全属性对话框 298
13.4.2 使用AccessEnum 300
13.4.3 使用Process Explorer 300
13.4.4 使用ObjSD 301
13.4.5 使用AppVerifier 302
13.5 识别常见的权限问题 302
13.5.1 弱自主访问控制列表(DACL) 303
13.5.2 NULL DACL 307
13.5.3 不恰当的ACE顺序 308
13.5.4 对象创建者 308
13.5.5 间接访问资源 309
13.5.6 忘记恢复原权限 309
13.5.7 蹲点(Squatting)攻击 310
13.5.8 利用竞争条件 311
13.5.9 文件链接 312
13.6 确定对象的可访问性 315
13.6.1 可远程访问的对象 315
13.6.2 本地可访问对象 317
13.7 其他的权限考虑 318
13.7.1 .NET权限 318
13.7.2 SQL权限 318
13.7.3 基于角色的安全 320
13.8 小结 321
第14章 拒绝服务攻击 322
14.1 掌握DoS攻击的类型 322
14.1.1 查找技术实现缺陷 323
14.1.2 查找资源消耗缺陷 329
14.1.3 寻找解决严重问题的方法 335
14.2 测试技巧 336
14.3 小结 336
第15章 托管代码问题 337
15.1 澄清有关使用托管代码的常见错误认识 338
15.1.1 错误认识1:在托管代码中不存在缓冲区溢出 338
15.1.2 错误认识2:ASP.NET Web控件可防止跨站脚本 339
15.1.3 错误认识3:垃圾回收可以防止内存泄露 339
15.1.4 错误认识4:托管代码可防止SQL注入 340
15.2 理解代码访问安全的基础 340
15.2.1 用户安全和代码安全的比较(User Security vs. Code Security) 341
15.2.2 CAS概况 341
15.2.3 程序(Assembly) 342
15.2.4 物证 343
15.2.5 权限 343
15.2.6 策略 344
15.2.7 全局程序集缓冲区(Global Assembly Cache) 348
15.2.8 堆栈审核(Stack Walk) 348
15.2.9 堆栈审查修改器(Stack Walk Modifier) 350
15.3 使用代码检查方法查找问题 352
15.3.1 调用不安全的代码 353
15.3.2 查找断言导致的问题 355
15.3.3 查找链接查询中的问题 357
15.3.4 了解拙劣的异常处理 360
15.4 理解使用APTCA带来的问题 362
15.5 .NET程序反编译 368
15.6 测试技巧 368
15.7 小结 369
第16章 SQL注入 370
16.1 SQL注入的确切含义 370
16.2 了解SQL注入的重要性 372
16.3 查找SQL注入问题 373
16.3.1 利用黑盒测试方法 374
16.3.2 利用代码检查 385
16.4 避免SQL注入的常见错误 387
16.4.1 转义输入中的单引号 388
16.4.2 删除分号以阻止多重语句 388
16.4.3 只使用存储过程 389
16.4.4 删除不必要的存储过程 390
16.4.5 将运行SQL Server的计算机安置在防火墙之后 390
16.5 理解SQL存储过程的再利用 391
16.5.1 示例:备份文档 392
16.5.2 搜寻存储过程中的再利用问题 393
16.6 识别类似的注入攻击 393
16.7 测试技巧 394
16.8 小结 395
第17章 观察及逆向工程 396
17.1 在没有调试器或反汇编工具时的观测结果 396
17.1.1 输出比较 397
17.1.2 使用监视工具 398
17.2 使用调试器跟踪程序的执行并改变其行为 399
17.2.1 修改执行流程以旁路限制 400
17.2.2 在调试器下读取并修改内存的内容 404
17.3 使用反编译器或反汇编工具对一个程序实施逆向工程 408
17.3.1 理解二进制本地代码与字节码的区别 409
17.3.2 在没有源代码时定位不安全的函数调用 411
17.3.3 对算法实施逆向工程以识别安全缺陷 415
17.4 分析安全更新 417
17.5 测试技巧 418
17.6 法律方面的考虑因素 419
17.7 小结 419
第18章 ActiveX再利用攻击 420
18.1 理解ActiveX控件 421
18.1.1 在Internet Explorer浏览器中创建ActiveX控件 421
18.1.2 ActiveX控件的初始化和脚本解析 423
18.1.3 ActiveX控件再利用 424
18.1.4 理解ActiveX控件安全模型 428
18.1.5 利用ActiveX控件测试方法学 434
18.1.6 其他的测试窍门及技术 441
18.2 走查(Walkthrough):ActiveX控件测试 450
18.2.1 Clear 451
18.2.2 ClipboardCopy 452
18.2.3 ClipboardPaste 453
18.2.4 InvokeRTFEditor 455
18.2.5 LoadRTF 464
18.2.6 NumChars 465
18.2.7 RTFEditor 属性 466
18.2.8 RTFEditor PARAM 467
18.2.9 RTFEditorOverride 468
18.2.10 挑战 470
18.3 测试技巧 470
18.4 小结 471
第19章 其他再利用攻击 472
19.1 理解请求外部数据的文档格式 472
19.1.1 文档格式请求外部数据的常见的降低风险的方法 473
19.1.2 测试请求外部数据的文档格式 474
19.2 请求外部数据的Web页面 475
19.2.1 通过URL查询字符串进行的CSRF攻击 475
19.2.2 通过POST数据进行的CSRF攻击 476
19.2.3 防止CSRF攻击的常用方法 477
19.2.4 通过SOAP数据进行的CSRF攻击 478
19.2.5 对CSRF攻击进行测试 479
19.3 理解窗口和线程消息的再利用 479
19.4 小结 480
第20章 报告安全漏洞 481
20.1 报告问题 481
20.2 联系开发商 482
20.3 期望联系开发商后得到什么 484
20.4 公开发布 485
20.4.1 确定细节数量 485
20.4.2 公开时间选择 486
20.5 定位产品中的安全漏洞 486
20.5.1 与漏洞发现者联系 487
20.5.2 识别漏洞产生的根本原因 487
20.5.3 寻找相关的漏洞 487
20.5.4 确定受影响的产品及其版本 488
20.5.5 测试补丁 488
20.5.6 确定减轻措施和相关工作 488
20.5.7 为所有受影响的产品及其版本同时发布补丁 489
20.6 小结 489
附录A 相关工具 490
附录B 安全测试用例列表 497
· · · · · · (
收起)