第1章 安全测试的一般方法 1
安全测试人员的不同类型 2
一种安全测试的方法 3
深入理解测试的内容 4
从攻击者的角度思考如何攻击目标 6
攻击产品 8
时刻关注新的攻击 8
小结 9
第2章 利用威胁模型进行安全测试 10
威胁建模 10
测试人员如何对威胁模型分级 11
数据流程图 12
入口点和退出点的安全 13
识别威胁的技巧及常见威胁 14
测试人员如何利用一个完整的威胁模型 16
技术实现难以符合产品规范或威胁模型 19
小结 20
第3章 查找入口点 21
查找入口点并划分等级 22
常见入口点 23
文件 23
套接字(Socket) 27
HTTP请求 29
命名管道 32
可插入协议处理程序 35
恶意服务器响应 37
程序化接口 38
SQL 39
注册表 39
用户接口 41
E-mail 42
命令行参数 44
环境变量 45
小结 47
第4章 成为恶意的客户端 48
客户端/服务器交互 48
发现服务器正常接收的请求 49
操纵网络请求 51
测试HTTP 55
理解无状态协议 56
接收输入的测试方法 56
快速测试特定的网络请求 66
测试技巧 68
小结 69
第5章 成为恶意的服务器 70
理解客户端接收恶意服务器响应的常见方法 71
SSL能否阻止恶意服务器的攻击 73
操纵服务器响应 73
恶意响应漏洞的例子 74
错误认识:对攻击者来说创建恶意服务器非常困难 76
理解降级(Downgrade)MITM攻击 77
测试技巧 78
小结 79
第6章 欺骗 80
掌握欺骗问题的重要性 80
寻找欺骗问题 82
常见欺骗案例 82
IP地址欺骗 83
MAC地址欺骗 84
利用网络协议欺骗 85
用户接口(User Interface,UI)欺骗 88
重构对话框 88
Z-Order欺骗 93
让人误解的URL和文件名 94
测试技巧 97
小结 97
第7章 信息泄露 98
信息泄露问题 98
定位信息泄露的常见区域 99
文件泄露 99
网络泄露 107
识别重要的数据 111
数据混淆 112
隐含泄露 113
小结 113
第8章 缓冲区溢出及堆栈/堆操纵 114
了解溢出的工作原理 117
堆栈溢出 118
整型溢出 121
堆溢出 128
其他攻击 129
溢出测试:在哪里寻找(测试)用例 130
网络 130
文档与文件 131
较高权限和较低权限用户之间的共享信息 131
可编程接口 132
黑盒(功能)测试 133
确定期待的是什么数据 133
使用你能识别的数据 134
了解界限与边界 134
保持全部数据的完整性 137
改造正常数据使其溢出的策略 141
测试首要行为和次要行为 143
要查找什么 144
运行时工具 156
模糊测试 158
白盒测试 159
要查找的对象 160
溢出的可用性 164
Unicode数据 169
已过滤的数据 170
其他主题 170
无代码执行的溢出也很严重 170
/GS编译器开关 173
测试技巧 175
小结 176
第9章 格式化字符串攻击 177
什么是格式化字符串 178
理解为什么格式化字符串存在问题 178
剖析prinf调用 179
堆栈解析错误 180
内存覆盖 182
格式化字符串安全漏洞测试 183
代码检查 183
黑盒测试 184
走查(Walkthrough):经历一个格式化字符串攻击过程 185
寻找格式化字符串漏洞 185
分析可利用性 186
深度挖掘:围绕可利用性问题进行工作 189
构建一个简单的负载 201
测试技巧 208
小结 209
第10章 HTML脚本攻击 210
理解针对服务器的反射跨站脚本攻击 211
例子:一个搜索引擎中的反射XSS 212
理解为什么XSS攻击是安全相关的 214
利用服务端的反射XSS漏洞 216
POST也是可利用的 218
理解针对服务器的持久性XSS攻击 219
例子:在一个留言簿中的持久性XSS攻击 220
利用针对服务器的持久性XSS攻击 221
识别用于反射和持久性XSS攻击的数据 221
程序员阻止攻击的常用方法 224
理解针对本地文件的反射XSS攻击 227
例子:本地文件中的反射XSS 228
利用本地文件中的反射XSS漏洞 229
理解为何本地XSS漏洞是一个问题 229
利用本地XSS漏洞在受害者的机器上运行二进制文件 232
HTML资源 233
编译后的帮助文件 234
在客户端脚本中查找XSS漏洞 236
理解本地计算机区域中的脚本注入攻击 237
例子:在Winamp播放列表中的脚本注入 237
把非HTML文件当作HTML来解析 240
程序员用于防止HTML脚本攻击的方法 243
过滤器 243
深入理解浏览器中的解析器 245
Style中的注释 245
ASP.NET内置的过滤器 247
理解Internet Explorer如何减轻针对本地文件的XSS攻击 248
从互联网到本地计算机区域的链接被阻止 248
在默认情况下,脚本在本地计算机区域中是禁止运行的 248
识别HTML脚本的脆弱性 250
通过检查代码查找HTML脚本漏洞 250
识别所有返回内容给Web浏览器或者文件系统的位置 251
确定输出中是否包含攻击者提供的数据 251
检查攻击者的数据是否进行了适当的验证或者编码 252
ASP.NET自动对数据进行编码 253
小结 254
第11章 XML问题 255
测试XML输入文件中的非XML安全问题 255
结构良好的XML 256
有效的XML 257
XML输入中包括非字母数字的数据 257
测试特定的XML攻击 260
实体(Entity) 260
XML注入(XML Injection) 263
大文件引用(Large File Reference) 266
简单对象访问协议(Simple Object Access Protocol) 266
测试技巧 271
小结 271
第12章 规范化问题 272
理解规范化问题的重要性 272
查找规范化问题 273
基于文件的规范化问题 273
目录遍历 274
使文件扩展名检查失效 274
导致规范化问题的其他常见错误 277
基于Web的规范化问题 282
编码问题 282
URL问题 287
测试技巧 290
小结 291
第13章 查找弱权限 292
理解权限的重要性 293
查找权限问题 294
理解Windows的访问控制机制 295
安全对象 295
安全描述符 296
ACL 296
ACE 297
查找和分析对象的权限 298
使用Windows安全属性对话框 298
使用AccessEnum 300
使用Process Explorer 300
使用Obj SD 301
使用App Verifier 302
识别常见的权限问题 302
弱自主访问控制列表(DACL) 303
NULL DACL 307
不恰当的ACE顺序 308
对象创建者 308
间接访问资源 309
忘记恢复原权限 309
蹲点(Squatting)攻击 310
利用竞争条件 311
文件链接 312
确定对象的可访问性 315
可远程访问的对象 315
本地可访问对象 317
其他的权限考虑 318
.NET权限 318
SQL权限 318
基于角色的安全 320
小结 321
第14章 拒绝服务攻击 322
掌握DoS攻击的类型 322
查找技术实现缺陷 323
查找资源消耗缺陷 329
寻找解决严重问题的方法 335
测试技巧 336
小结 336
第15章 托管代码问题 337
澄清有关使用托管代码的常见错误认识 338
错误认识1:在托管代码中不存在缓冲区溢出 338
错误认识2:ASP.NET Web控件可防止跨站脚本 339
错误认识3:垃圾回收可以防止内存泄露 339
错误认识4:托管代码可防止SQL注入 340
理解代码访问安全的基础 340
用户安全和代码安全的比较(User Security vs.Code Security) 341
CAS概况 341
程序(Assembly) 342
物证 343
权限 343
策略 344
全局程序集缓冲区(Global Assembly Cache) 348
堆栈审核(Stack Walk) 348
堆栈审查修改器(Stack Walk Modifier) 350
使用代码检查方法查找问题 352
调用不安全的代码 353
查找断言导致的问题 355
查找链接查询中的问题 357
了解拙劣的异常处理 360
理解使用APTCA带来的问题 362
.NET程序反编译 368
测试技巧 368
小结 369
第16章 SQL注入 370
SQL注入的确切含义 370
了解SQL注入的重要性 372
查找SQL注入问题 373
利用黑盒测试方法 374
利用代码检查 385
避免SQL注入的常见错误 387
转义输入中的单引号 388
删除分号以阻止多重语句 388
只使用存储过程 389
删除不必要的存储过程 390
将运行SQL Server的计算机安置在防火墙之后 390
理解SQL存储过程的再利用 391
示例:备份文档 392
搜寻存储过程中的再利用问题 393
识别类似的注入攻击 393
测试技巧 394
小结 395
第17章 观察及逆向工程 396
在没有调试器或反汇编工具时的观测结果 396
输出比较 397
使用监视工具 398
使用调试器跟踪程序的执行并改变其行为 399
修改执行流程以旁路限制 400
在调试器下读取并修改内存的内容 404
使用反编译器或反汇编工具对一个程序实施逆向工程 408
理解二进制本地代码与字节码的区别 409
在没有源代码时定位不安全的函数调用 411
对算法实施逆向工程以识别安全缺陷 415
分析安全更新 417
测试技巧 418
法律方面的考虑因素 419
小结 419
第18章 ActiveX再利用攻击 420
理解ActiveX控件 421
在Internet Explorer浏览器中创建ActiveX控件 421
ActiveX控件的初始化和脚本解析 423
ActiveX控件再利用 424
理解ActiveX控件安全模型 428
利用ActiveX控件测试方法学 434
其他的测试窍门及技术 441
走查(Walkthrough):ActiveX控件测试 450
Clear 451
ClipboardCopy 452
ClipboardPaste 453
InvokeRTFEditor 455
LoadRTF 464
NumChars 465
RTFEditor属性 466
RTFEditor PARAM 467
RTFEditorOverride 468
挑战 470
测试技巧 470
小结 471
第19章 其他再利用攻击 472
理解请求外部数据的文档格式 472
文档格式请求外部数据的常见的降低风险的方法 473
测试请求外部数据的文档格式 474
请求外部数据的Web页面 475
通过URL查询字符串进行的CSRF攻击 475
通过POST数据进行的CSRF攻击 476
防止CSRF攻击的常用方法 477
通过SOAP数据进行的CSRF攻击 478
对CSRF攻击进行测试 479
理解窗口和线程消息的再利用 479
小结 480
第20章 报告安全漏洞 481
报告问题 481
联系开发商 482
期望联系开发商后得到什么 484
公开发布 485
确定细节数量 485
公开时间选择 486
定位产品中的安全漏洞 486
与漏洞发现者联系 487
识别漏洞产生的根本原因 487
寻找相关的漏洞 487
确定受影响的产品及其版本 488
测试补丁 488
确定减轻措施和相关工作 488
为所有受影响的产品及其版本同时发布补丁 489
小结 489
附录A 相关工具 490
附录B 安全测试用例列表 497