第1章 Web应用程序安全与风险 1
1.1 Web应用程序的发展历程 1
1.1.1 Web应用程序的常见功能 2
1.1.2 Web应用程序的优点 3
1.2 Web应用程序安全 3
1.2.1“本站点是安全的” 3
1.2.2核心安全问题:用户可提交任意输入 5
1.2.3关键问题因素 6
1.2.4新的安全边界 7
1.2.5 Web应用程序安全的未来 8
1.3小结 8
第2章 核心防御机制 9
2.1处理用户访问 9
2.1.1身份验证 10
2.1.2会话管理 10
2.1.3访问控制 11
2.2处理用户输入 12
2.2.1输入的多样性 12
2.2.2输入处理方法 13
2.2.3边界确认 14
2.2.4多步确认与规范化 16
2.3处理攻击者 17
2.3.1处理错误 17
2.3.2维护审计日志 18
2.3.3向管理员发出警报 19
2.3.4应对攻击 19
2.4管理应用程序 20
2.5小结 21
2.6问题 21
第3章 Web应用程序技术 22
3.1 HTTP 22
3.1.1 HTTP请求 22
3.1.2 HTTP响应 23
3.1.3 HTTP方法 24
3.1.4 URL 25
3.1.5 HTTP消息头 26
3.1.6 cookie 27
3.1.7状态码 28
3.1.8 HTTPS 29
3.1.9 HTTP代理 29
3.1.10 HTTP验证 29
3.2 Web功能 30
3.2.1服务器端功能 30
3.2.2客户端功能 32
3.2.3状态与会话 35
3.3编码方案 36
3.3.1 URL编码 36
3.3.2 Unicode编码 36
3.3.3 HTML编码 37
3.3.4 Base64编码 37
3.3.5十六进制编码 38
3.4下一步 38
3.5问题 38
第4章 解析应用程序 39
4.1枚举内容与功能 39
4.1.1 Web抓取 39
4.1.2用户指定的抓取 41
4.1.3发现隐藏的内容 43
4.1.4应用程序页面与功能路径 50
4.1.5发现隐藏的参数 51
4.2分析应用程序 52
4.2.1确定用户输入进入点 52
4.2.2确定服务器端技术 53
4.2.3确定服务器端功能 58
4.2.4解析受攻击面 60
4.3小结 60
4.4问题 61
第5章 避开客户端控件 62
5.1通过客户端传送数据 62
5.1.1隐藏表单字段 62
5.1.2 HTTP cookie 64
5.1.3 URL参数 65
5.1.4 Referer消息头 65
5.1.5模糊数据 66
5.1.6 ASP.NET ViewState 67
5.2收集用户数据:HTML表单 70
5.2.1长度限制 70
5.2.2基于脚本的确认 71
5.2.3禁用的元素 73
5.3收集用户数据:厚客户端组件 74
5.3.1 Java applet 74
5.3.2 ActiveX控件 80
5.3.3 Shockwave Flash对象 84
5.4安全处理客户端数据 87
5.4.1通过客户传送数据 87
5.4.2确认客户生成的数据 88
5.4.3日志与警报 89
5.5小结 89
5.6问题 89
第6章 攻击验证机制 91
6.1验证技术 91
6.2验证机制设计缺陷 92
6.2.1密码保密性不强 92
6.2.2蛮力攻击登录 93
6.2.3详细的失败消息 95
6.2.4证书传输易受攻击 97
6.2.5密码修改功能 98
6.2.6忘记密码功能 99
6.2.7“记住我”功能 101
6.2.8用户伪装功能 102
6.2.9证书确认不完善 104
6.2.10非唯一性用户名 104
6.2.11可预测的用户名 105
6.2.12可预测的初始密码 105
6.2.13证书分配不安全 106
6.3验证机制执行缺陷 107
6.3.1故障开放登录机制 107
6.3.2多阶段登录机制中的缺陷 108
6.3.3不安全的证书存储 110
6.4保障验证机制的安全 111
6.4.1使用可靠的证书 111
6.4.2安全处理证书 111
6.4.3正确确认证书 112
6.4.4防止信息泄露 113
6.4.5防止蛮力攻击 114
6.4.6防止滥用密码修改功能 116
6.4.7防止滥用账户恢复功能 116
6.4.8日志、监控与通知 117
6.5小结 117
6.6问题 118
第7章 攻击会话管理 119
7.1状态要求 119
7.2会话令牌生成过程中的薄弱环节 122
7.2.1令牌有一定含义 122
7.2.2令牌可预测 124
7.3会话令牌处理中的薄弱环节 130
7.3.1在网络上泄露令牌 130
7.3.2在日志中泄露令牌 133
7.3.3令牌-会话映射易受攻击 135
7.3.4会话终止易受攻击 136
7.3.5客户暴露在令牌劫持风险之中 137
7.3.6宽泛的cookie范围 138
7.4保障会话管理的安全 140
7.4.1生成强大的令牌 140
7.4.2在整个生命周期保障令牌的安全 142
7.4.3日志、监控与警报 144
7.5小结 145
7.6问题 145
第8章 攻击访问控制 147
8.1常见漏洞 147
8.1.1完全不受保护的功能 148
8.1.2基于标识符的功能 149
8.1.3多阶段功能 150
8.1.4静态文件 150
8.1.5访问控制方法不安全 151
8.2攻击访问控制 151
8.3保障访问控制的安全 154
8.4小结 158
8.5问题 158
第9章 代码注入 159
9.1注入解释型语言 159
9.2注入SQL 160
9.2.1利用一个基本的漏洞 161
9.2.2避开登录 163
9.2.3查明SQL注入漏洞 164
9.2.4注入不同的语句类型 166
9.2.5 UNION操作符 168
9.2.6“指纹识别”数据库 172
9.2.7提取有用的数据 172
9.2.8 利用ODBC错误消息(仅适用于MS-SQL) 177
9.2.9避开过滤 180
9.2.10二阶SQL注入 183
9.2.11高级利用 184
9.2.12 SQL注入之外:扩大数据库攻击范围 193
9.2.13 SQL语法与错误参考 195
9.2.14防止SQL注入 200
9.3注入操作系统命令 202
9.3.1例1:通过Perl注入 203
9.3.2例2:通过ASP注入 204
9.3.3查找OS命令注入漏洞 205
9.3.4防止OS命令注入 207
9.4注入Web脚本语言 208
9.4.1动态执行漏洞 208
9.4.2文件包含漏洞 210
9.4.3防止脚本注入漏洞 211
9.5注入SOAP 212
9.5.1查找并利用SOAP注入 213
9.5.2防止SOAP注入 214
9.6注入XPath 214
9.6.1破坏应用程序逻辑 215
9.6.2谨慎XPath注入 216
9.6.3盲目XPath注入 216
9.6.4查找XPath注入漏洞 217
9.6.5防止XPath注入 218
9.7注入SMTP 218
9.7.1操纵电子邮件消息头 218
9.7.2 SMTP命令注入 219
9.7.3查找SMTP注入漏洞 221
9.7.4防止SMTP注入 222
9.8注入LDAP 222
9.8.1注入查询属性 223
9.8.2修改查询过滤器 224
9.8.3查找LDAP注入漏洞 224
9.8.4防止LDAP注入 225
9.9小结 225
9.10问题 225
第10章 利用路径遍历 227
10.1常见漏洞 227
10.2查找并利用路径遍历漏洞 228
10.2.1确定攻击目标 228
10.2.2探查路径遍历漏洞 229
10.2.3避开遍历攻击障碍 231
10.2.4利用遍历漏洞 234
10.3防止路径遍历漏洞 234
10.4小结 235
10.5问题 236
第11章 攻击应用程序逻辑 237
11.1逻辑缺陷的本质 237
11.2现实中的逻辑缺陷 238
11.2.1例1:欺骗密码修改功能 238
11.2.2例2:直接结算 239
11.2.3例3:修改保险单 240
11.2.4例4:入侵银行 241
11.2.5例5:擦除审计追踪 243
11.2.6例6:规避交易限制 244
11.2.7例7:获得大幅折扣 245
11.2.8例8:避免转义 245
11.2.9例9:滥用搜索功能 247
11.2.10例10:利用调试消息 248
11.2.11例11:与登录机制竞赛 249
11.3避免逻辑缺陷 250
11.4小结 251
11.5问题 252
第12章 攻击其他用户 253
12.1跨站点脚本 254
12.1.1反射型XSS漏洞 254
12.1.2保存型XSS漏洞 259
12.1.3基于DOM的XSS漏洞 261
12.1.4现实世界中的XSS攻击 262
12.1.5链接XSS与其他攻击 264
12.1.6 XSS攻击有效载荷 265
12.1.7 XSS攻击的传送机制 270
12.1.8查找并利用XSS漏洞 271
12.1.9 HttpOnly cookie与跨站点追踪 285
12.1.10防止XSS攻击 287
12.2重定向攻击 290
12.2.1查找并利用重定向漏洞 291
12.2.2防止重定向漏洞 294
12.3 HTTP消息头注入 294
12.3.1利用消息头注入漏洞 295
12.3.2防止消息头注入漏洞 297
12.4框架注入 298
12.4.1利用框架注入 298
12.4.2防止框架注入 299
12.5请求伪造 299
12.5.1本站点请求伪造 299
12.5.2跨站点请求伪造 301
12.6 JSON劫持 303
12.6.1 JSON 303
12.6.2攻击JSON 304
12.6.3查找JSON劫持漏洞 305
12.6.4防止JSON劫持 306
12.7会话固定 306
12.7.1查找并利用会话固定漏洞 308
12.7.2防止会话固定漏洞 309
12.8攻击ActiveX控件 309
12.8.1查找ActiveX漏洞 310
12.8.2防止ActiveX漏洞 312
12.9本地隐私攻击 312
12.9.1持久性cookie 312
12.9.2缓存Web内容 312
12.9.3浏览历史记录 313
12.9.4自动完成 313
12.9.5防止本地隐私攻击 314
12.10高级利用技巧 314
12.10.1利用Aj ax 314
12.10.2反DNS Pinning 317
12.10.3浏览器利用框架 319
12.11小结 320
12.12问题 321
第13章 定制攻击自动化 322
13.1应用定制自动化攻击 322
13.2枚举有效的标识符 323
13.2.1基本步骤 323
13.2.2探测“触点” 324
13.2.3编写攻击脚本 325
13.2.4 JAttack 326
13.3获取有用的数据 331
13.4常见漏洞模糊测试 334
13.5整合全部功能:Burp Intruder 337
13.6小结 344
13.7问题 345
第14章 利用信息泄露 346
14.1利用错误消息 346
14.1.1错误消息脚本 346
14.1.2栈追踪 347
14.1.3详尽的调试消息 348
14.1.4服务器与数据库消息 349
14.1.5使用公共信息 350
14.1.6制造详尽的错误消息 351
14.2收集公布的信息 351
14.3使用推论 352
14.4防止信息泄露 353
14.4.1使用常规错误消息 353
14.4.2保护敏感信息 354
14.4.3尽量减少客户端信息泄露 354
14.5小结 354
14.6问题 355
第15章 攻击编译型应用程序 357
15.1缓冲区溢出漏洞 357
15.1.1栈溢出 358
15.1.2堆溢出 358
15.1.3“一位偏移”漏洞 359
15.1.4查找缓冲区溢出漏洞 361
15.2整数漏洞 362
15.2.1整数溢出 362
15.2.2符号错误 363
15.2.3查找整数漏洞 363
15.3格式化字符串漏洞 364
15.4小结 365
15.5问题 366
第16章 攻击应用程序架构 367
16.1分层架构 367
16.1.1攻击分层架构 368
16.1.2保障分层架构的安全 370
16.2共享主机与应用程序服务提供商 371
16.2.1虚拟主机 372
16.2.2共享的应用程序服务 372
16.2.3攻击共享环境 373
16.2.4保障共享环境的安全 376
16.3小结 378
16.4问题 378
第17章 攻击Web服务器 379
17.1 Web服务器配置缺陷 379
17.1.1默认证书 379
17.1.2默认内容 380
17.1.3目录列表 383
17.1.4危险的HTTP方法 384
17.1.5 Web服务器作为代理服务器 385
17.1.6虚拟主机配置缺陷 387
17.1.7保障Web服务器配置的安全 387
17.2 Web服务器软件漏洞 388
17.2.1缓冲区溢出漏洞 388
17.2.2路径遍历漏洞 389
17.2.3编码与规范化漏洞 389
17.2.4查找Web服务器漏洞 391
17.2.5保障Web服务器软件的安全 392
17.3小结 393
17.4问题 393
第18章 查找源代码中的漏洞 394
18.1代码审查方法 394
18.1.1“黑盒”测试与“白盒”测试 394
18.1.2代码审查方法 395
18.2常见漏洞签名 396
18.2.1跨站点脚本 396
18.2.2 SQL注入 397
18.2.3路径遍历 397
18.2.4任意重定向 398
18.2.5 OS命令注入 399
18.2.6后门密码 399
18.2.7本地代码漏洞 399
18.2.8源代码注释 401
18.3 Java平台 401
18.3.1确定用户提交的数据 401
18.3.2会话交互 402
18.3.3潜在危险的API 402
18.3.4配置Java环境 405
18.4 ASP.NET 406
18.4.1确定用户提交的数据 406
18.4.2会话交互 407
18.4.3潜在危险的API 407
18.4.4配置ASP.NET环境 410
18.5 PHP 410
18.5.1确定用户提交的数据 411
18.5.2会话交互 412
18.5.3潜在危险的API 412
18.5.4配置PHP环境 416
18.6 Perl 418
18.6.1确定用户提交的数据 418
18.6.2会话交互 418
18.6.3潜在危险的API 419
18.6.4配置 Perl环境 420
18.7 JavaScript 421
18.8数据库代码组件 421
18.8.1 SQL注入 422
18.8.2调用危险的函数 422
18.9代码浏览工具 423
18.10小结 424
18.11问题 424
第19章 Web应用程序黑客工具包 426
19.1 Web浏览器 426
19.1.1 Intemet Explorer 426
19.1.2 Firefox 427
19.1.3 Opera 428
19.2集成测试套件 429
19.2.1工作原理 429
19.2.2特性比较 439
19.2.3拦截代理服务器替代工具 443
19.3漏洞扫描器 445
19.3.1扫描器探测到的漏洞 445
19.3.2扫描器的内在限制 447
19.3.3扫描器面临的技术挑战 448
19.3.4当前产品 449
19.3.5使用漏洞扫描器 451
19.4其他工具 451
19.4.1 Nikto 451
19.4.2 Hydra 452
19.4.3定制脚本 452
19.5小结 454
第20章 Web应用程序渗透测试方法论 456