内容简介:
Web应用无处不在,安全隐患如影随形。承载着丰富功能与用途的Web应用程序中布满了各种漏洞,攻击者能够利用这些漏洞盗取用户资料,实施诈骗,破坏其他系统等。近年来,一些公司的网络系统频频遭受攻击,导致用户信息泄露,造成不良影响。因此,如何确保Web应用程序的安全,已成为摆在人们眼前亟待解决的问题。
本书是Web安全领域专家的经验结晶,系统阐述了如何针对Web应用程序展开攻击与反攻击,深入剖析了攻击时所使用的技巧、步骤和工具,条理清晰,内容详尽。第2版全面升级,涵盖了最新的攻击技巧与应对措施,此外,书中还列出了几百个“漏洞实验室”,以帮助读者对所学内容进行巩固和实战演习。
目录
第1章 Web应用程序安全与风险1
1.1 Web应用程序的发展历程1
1.1.1 Web应用程序的常见功能3
1.1.2 Web应用程序的优点4
1.2 Web应用程序安全4
1.2.1 “本站点是安全的”5
1.2.2 核心安全问题:用户可提交任意输入6
1.2.3 关键问题因素7
1.2.4 新的安全边界8
1.2.5 Web应用程序安全的未来10
1.3 小结10
第2章 核心防御机制12
2.1 处理用户访问12
2.1.1 身份验证13
2.1.2 会话管理13
2.1.3 访问控制14
2.2 处理用户输入15
2.2.1 输入的多样性15
2.2.2 输入处理方法16
2.2.3 边界确认18
2.2.4 多步确认与规范化20
2.3 处理攻击者21
2.3.1 处理错误21
2.3.2 维护审计日志22
2.3.3 向管理员发出警报23
2.3.4 应对攻击24
2.4 管理应用程序25
2.5 小结26
2.6 问题26
第3章 Web应用程序技术27
3.1 HTTP27
3.1.1 HTTP请求27
3.1.2 HTTP响应28
3.1.3 HTTP方法29
3.1.4 URL30
3.1.5 REST31
3.1.6 HTTP消息头31
3.1.7 cookie33
3.1.8 状态码33
3.1.9 HTTPS34
3.1.10 HTTP代理35
3.1.11 HTTP身份验证35
3.2 Web功能36
3.2.1 服务器端功能36
3.2.2 客户端功能40
3.2.3 状态与会话46
3.3 编码方案47
3.3.1 URL编码47
3.3.2 Unicode编码48
3.3.3 HTML编码48
3.3.4 Base64编码49
3.3.5 十六进制编码49
3.3.6 远程和序列化框架49
3.4 下一步50
3.5 问题50
第4章 解析应用程序51
4.1 枚举内容与功能51
4.1.1 Web抓取51
4.1.2 用户指定的抓取54
4.1.3 发现隐藏的内容56
4.1.4 应用程序页面与功能路径67
4.1.5 发现隐藏的参数69
4.2 分析应用程序69
4.2.1 确定用户输入入口点70
4.2.2 确定服务器端技术72
4.2.3 确定服务器端功能76
4.2.4 解析受攻击面79
4.2.5 解析Extreme Internet Shopping应用程序80
4.3 小结81
4.4 问题82
第5章 避开客户端控件83
5.1 通过客户端传送数据83
5.1.1 隐藏表单字段84
5.1.2 HTTP cookie86
5.1.3 URL参数86
5.1.4 Referer消息头86
5.1.5 模糊数据88
5.1.6 ASP.NET ViewState89
5.2 收集用户数据:HTML表单91
5.2.1 长度限制91
5.2.2 基于脚本的确认93
5.2.3 禁用的元素94
5.3 收集用户数据:浏览器扩展95
5.3.1 常见的浏览器扩展技术96
5.3.2 攻击浏览器扩展的方法97
5.3.3 拦截浏览器扩展的流量97
5.3.4 反编译浏览器扩展100
5.3.5 附加调试器109
5.3.6 本地客户端组件111
5.4 安全处理客户端数据112
5.4.1 通过客户端传送数据112
5.4.2 确认客户端生成的数据112
5.4.3 日志与警报113
5.5 小结114
5.6 问题114
第6章 攻击验证机制115
6.1 验证技术115
6.2 验证机制设计缺陷116
6.2.1 密码保密性不强116
6.2.2 蛮力攻击登录117
6.2.3 详细的失败消息120
6.2.4 证书传输易受攻击122
6.2.5 密码修改功能124
6.2.6 忘记密码功能125
6.2.7 “记住我”功能127
6.2.8 用户伪装功能129
6.2.9 证书确认不完善131
6.2.10 非唯一性用户名131
6.2.11 可预测的用户名132
6.2.12 可预测的初始密码133
6.2.13 证书分配不安全133
6.3 验证机制执行缺陷134
6.3.1 故障开放登录机制134
6.3.2 多阶段登录机制中的缺陷135
6.3.3 不安全的证书存储138
6.4 保障验证机制的安全139
6.4.1 使用可靠的证书140
6.4.2 安全处理证书140
6.4.3 正确确认证书141
6.4.4 防止信息泄露142
6.4.5 防止蛮力攻击143
6.4.6 防止滥用密码修改功能144
6.4.7 防止滥用账户恢复功能145
6.4.8 日志、监控与通知146
6.5 小结146
6.6 问题147
第7章 攻击会话管理148
7.1 状态要求148
7.2 会话令牌生成过程中的薄弱环节151
7.2.1 令牌有一定含义152
7.2.2 令牌可预测153
7.2.3 加密令牌162
7.3 会话令牌处理中的薄弱环节170
7.3.1 在网络上泄露令牌170
7.3.2 在日志中泄露令牌173
7.3.3 令牌—会话映射易受攻击175
7.3.4 会话终止易受攻击176
7.3.5 客户端暴露在令牌劫持风险之中177
7.3.6 宽泛的cookie范围178
7.4 保障会话管理的安全180
7.4.1 生成强大的令牌181
7.4.2 在整个生命周期保障令牌的安全182
7.4.3 日志、监控与警报184
7.5 小结185
7.6 问题185
第8章 攻击访问控制187
8.1 常见漏洞187
8.1.1 完全不受保护的功能188
8.1.2 基于标识符的功能190
8.1.3 多阶段功能191
8.1.4 静态文件191
8.1.5 平台配置错误192
8.1.6 访问控制方法不安全192
8.2 攻击访问控制193
8.2.1 使用不同用户账户进行测试194
8.2.2 测试多阶段过程197
8.2.3 通过有限访问权限进行测试199
8.2.4 测试“直接访问方法”201
8.2.5 测试对静态资源的控制202
8.2.6 测试对HTTP方法实施的限制202
8.3 保障访问控制的安全203
8.4 小结206
8.5 问题207
第9章 攻击数据存储区208
9.1 注入解释型语言208
9.2 注入SQL210
9.2.1 利用一个基本的漏洞211
9.2.2 注入不同的语句类型213
9.2.3 查明SQL注入漏洞216
9.2.4 “指纹”识别数据库219
9.2.5 UNION操作符220
9.2.6 提取有用的数据224
9.2.7 使用UNION提取数据224
9.2.8 避开过滤226
9.2.9 二阶SQL注入227
9.2.10 高级利用229
9.2.11 SQL注入之外:扩大数据库攻击范围236
9.2.12 使用SQL注入工具238
9.2.13 SQL语法与错误参考241
9.2.14 防止SQL注入246
9.3 注入NoSQL249
9.4 注入XPath250
9.4.1 破坏应用程序逻辑251
9.4.2 谨慎XPath注入252
9.4.3 盲目XPath注入252
9.4.4 查找XPath注入漏洞253
9.4.5 防止XPath注入254
9.5 注入LDAP254
9.5.1 利用LDAP注入255
9.5.2 查找LDAP注入漏洞257
9.5.3 防止LDAP注入258
9.6 小结258
9.7 问题258
第10章 测试后端组件260
10.1 注入操作系统命令260
10.1.1 例1:通过Perl注入261
10.1.2 例2:通过ASP注入262
10.1.3 通过动态执行注入264
10.1.4 查找OS命令注入漏洞264
10.1.5 查找动态执行漏洞267
10.1.6 防止OS命令注入268
10.1.7 防止脚本注入漏洞268
10.2 操作文件路径268
10.2.1 路径遍历漏洞269
10.2.2 文件包含漏洞278
10.3 注入XML解释器279
10.3.1 注入XML外部实体279
10.3.2 注入SOAP281
10.3.3 查找并利用SOAP注入283
10.3.4 防止SOAP注入284
10.4 注入后端HTTP请求284
10.4.1 服务器端HTTP重定向285
10.4.2 HTTP参数注入287
10.5 注入电子邮件290
10.5.1 操纵电子邮件标头290
10.5.2 SMTP命令注入291
10.5.3 查找SMTP注入漏洞292
10.5.4 防止SMTP注入293
10.6 小结294
10.7 问题294
第11章 攻击应用程序逻辑296
11.1 逻辑缺陷的本质296
11.2 现实中的逻辑缺陷297
11.2.1 例1:征求提示297
11.2.2 例2:欺骗密码修改功能298
11.2.3 例3:直接结算299
11.2.4 例4:修改保险单300
11.2.5 例5:入侵银行302
11.2.6 例6:规避交易限制303
11.2.7 例7:获得大幅折扣305
11.2.8 例8:避免转义305
11.2.9 例9:避开输入确认306
11.2.10 例10:滥用搜索功能308
11.2.11 例11:利用调试消息310
11.2.12 例12:与登录机制竞赛311
11.3 避免逻辑缺陷312
11.4 小结313
11.5 问题314
第12章 攻击其他用户315
12.1 XSS的分类316
12.1.1 反射型XSS漏洞316
12.1.2 保存型XSS漏洞320
12.1.3 基于DOM的XSS漏洞322
12.2 进行中的XSS攻击323
12.2.1 真实XSS攻击323
12.2.2 XSS攻击有效载荷324
12.2.3 XSS攻击的传送机制327
12.3 查找并利用XSS漏洞329
12.3.1 查找并利用反射型XSS漏洞331
12.3.2 查找并利用保存型XSS漏洞352
12.3.3 查找并利用基于DOM的XSS漏洞357
12.4 防止XSS攻击360
12.4.1 防止反射型与保存型XSS漏洞360
12.4.2 防止基于DOM的XSS漏洞364
12.5 小结365
12.6 问题365
第13章 攻击用户:其他技巧366
13.1 诱使用户执行操作366
13.1.1 请求伪造366
13.1.2 UI伪装374
13.2 跨域捕获数据377
13.2.1 通过注入HTML捕获数据377
13.2.2 通过注入CSS捕获数据378
13.2.3 JavaScript劫持380
13.3 同源策略深入讨论384
13.3.1 同源策略与浏览器扩展384
13.3.2 同源策略与HTML5386
13.3.3 通过代理服务应用程序跨域388
13.4 其他客户端注入攻击389
13.4.1 HTTP消息头注入389
13.4.2 cookie注入393
13.4.3 开放式重定向漏洞396
13.4.4 客户端SQL注入402
13.4.5 客户端HTTP参数污染402
13.5 本地隐私攻击403
13.5.1 持久性cookie404
13.5.2 缓存Web内容404
13.5.3 浏览历史记录405
13.5.4 自动完成406
13.5.5 Flash本地共享对象406
13.5.6 Silverlight独立存储406
13.5.7 Internet Explorer userData407
13.5.8 HTML5本地存储机制407
13.5.9 防止本地隐私攻击407
13.6 攻击ActiveX控件408
13.6.1 查找ActiveX漏洞409
13.6.2 防止ActiveX漏洞410
13.7 攻击浏览器411
13.7.1 记录键击411
13.7.2 窃取浏览器历史记录与搜索查询412
13.7.3 枚举当前使用的应用程序412
13.7.4 端口扫描412
13.7.5 攻击其他网络主机413
13.7.6 利用非HTTP服务413
13.7.7 利用浏览器漏洞414
13.7.8 DNS重新绑定414
13.7.9 浏览器利用框架415
13.7.10 中间人攻击416
13.8 小结418
13.9 问题418
第14章 定制攻击自动化419
14.1 应用定制自动化攻击419
14.2 枚举有效的标识符420
14.2.1 基本步骤420
14.2.2 探测“触点”421
14.2.3 编写攻击脚本422
14.2.4 JAttack423
14.3 获取有用的数据428
14.4 常见漏洞模糊测试431
14.5 整合全部功能:Burp Intruder434
14.6 实施自动化的限制442
14.6.1 会话处理机制443
14.6.2 CAPTCHA控件448
14.7 小结451
14.8 问题451
第15章 利用信息泄露453
15.1 利用错误消息453
15.1.1 错误消息脚本453
15.1.2 栈追踪454
15.1.3 详尽的调试消息455
15.1.4 服务器与数据库消息456
15.1.5 使用公共信息458
15.1.6 制造详尽的错误消息459
15.2 收集公布的信息460
15.3 使用推论461
15.4 防止信息泄露462
15.4.1 使用常规错误消息462
15.4.2 保护敏感信息462
15.4.3 尽量减少客户端信息泄露463
15.5 小结463
15.6 问题463
第16章 攻击本地编译型应用程序466
16.1 缓冲区溢出漏洞467
16.1.1 栈溢出467
16.1.2 堆溢出467
16.1.3 “一位偏移”漏洞468
16.1.4 查找缓冲区溢出漏洞470
16.2 整数漏洞472
16.2.1 整数溢出472
16.2.2 符号错误472
16.2.3 查找整数漏洞473
16.3 格式化字符串漏洞474
16.4 小结475
16.5 问题475
第17章 攻击应用程序架构477
17.1 分层架构477
17.1.1 攻击分层架构478
17.1.2 保障分层架构的安全482
17.2 共享主机与应用程序服务提供商483
17.2.1 虚拟主机484
17.2.2 共享的应用程序服务484
17.2.3 攻击共享环境485
17.2.4 保障共享环境的安全490
17.3 小结491
17.4 问题491
第18章 攻击Web服务器493
18.1 Web服务器配置缺陷493
18.1.1 默认证书493
18.1.2 默认内容494
18.1.3 目录列表499
18.1.4 WebDAV方法500
18.1.5 Web服务器作为代理服务器503
18.1.6 虚拟主机配置缺陷504
18.1.7 保障Web服务器配置的安全504
18.2 易受攻击的服务器软件505
18.2.1 应用程序框架缺陷505
18.2.2 内存管理漏洞507
18.2.3 编码与规范化漏洞508
18.2.4 查找Web服务器漏洞512
18.2.5 保障Web服务器软件的安全513
18.3 Web应用程序防火墙514
18.4 小结515
18.5 问题516
第19章 查找源代码中的漏洞517
19.1 代码审查方法517
19.1.1 “黑盒”测试与“白盒”
测试517
19.1.2 代码审查方法518
19.2 常见漏洞签名519
19.2.1 跨站点脚本519
19.2.2 SQL注入520
19.2.3 路径遍历520
19.2.4 任意重定向521
19.2.5 OS命令注入522
19.2.6 后门密码522
19.2.7 本地代码漏洞522
19.2.8 源代码注释524
19.3 Java平台524
19.3.1 确定用户提交的数据524
19.3.2 会话交互525
19.3.3 潜在危险的API526
19.3.4 配置Java环境528
19.4 ASP.NET529
19.4.1 确定用户提交的数据529
19.4.2 会话交互530
19.4.3 潜在危险的API531
19.4.4 配置ASP.NET环境533
19.5 PHP534
19.5.1 确定用户提交的数据534
19.5.2 会话交互536
19.5.3 潜在危险的API536
19.5.4 配置 PHP 环境540
19.6 Perl542
19.6.1 确定用户提交的数据542
19.6.2 会话交互543
19.6.3 潜在危险的API543
19.6.4 配置Perl环境544
19.7 JavaScript545
19.8 数据库代码组件546
19.8.1 SQL注入546
19.8.2 调用危险的函数547
19.9 代码浏览工具547
19.10 小结548
19.11 问题548
第20章 Web应用程序黑客工具包550
20.1 Web浏览器550
20.1.1 Internet Explorer550
20.1.2 Firefox551
20.1.3 Chrome552
20.2 集成测试套件552
20.2.1 工作原理553
20.2.2 测试工作流程566
20.2.3 拦截代理服务器替代工具568
20.3 独立漏洞扫描器570
20.3.1 扫描器探测到的漏洞570
20.3.2 扫描器的内在限制571
20.3.3 扫描器面临的技术挑战572
20.3.4 当前产品574
20.3.5 使用漏洞扫描器576
20.4 其他工具577
20.4.1 Wikto/Nikto577
20.4.2 Firebug577
20.4.3 Hydra578
20.4.4 定制脚本578
20.5 小结581
第21章 Web应用程序渗透测试方法论582
21.1 解析应用程序内容584
21.1.1 搜索可见的内容584
21.1.2 浏览公共资源585
21.1.3 发现隐藏的内容586
21.1.4 查找默认的内容586
21.1.5 枚举标识符指定的功能586
21.1.6 调试参数587
21.2 分析应用程序587
21.2.1 确定功能587
21.2.2 确定数据进入点587
21.2.3 确定所使用的技术588
21.2.4 解析受攻击面588
21.3 测试客户端控件588
21.3.1 通过客户端传送数据589
21.3.2 客户端输入控件589
21.3.3 测试浏览器扩展组件590
21.4 测试验证机制592
21.4.1 了解验证机制592
21.4.2 测试密码强度593
21.4.3 测试用户名枚举593
21.4.4 测试密码猜测的适应性593
21.4.5 测试账户恢复功能594
21.4.6 测试“记住我”功能594
21.4.7 测试伪装功能594
21.4.8 测试用户名唯一性595
21.4.9 测试证书的可预测性595
21.4.10 检测不安全的证书传输595
21.4.11 检测不安全的证书分配596
21.4.12 测试不安全的存储596
21.4.13 测试逻辑缺陷596
21.4.14 利用漏洞获取未授权访问597
21.5 测试会话管理机制598
21.5.1 了解会话管理机制598
21.5.2 测试令牌的含义599
21.5.3 测试令牌的可预测性599
21.5.4 检查不安全的令牌传输600
21.5.5 检查在日志中泄露的令牌600
21.5.6 测试令牌?会话映射601
21.5.7 测试会话终止601
21.5.8 测试会话固定602
21.5.9 检查 CSRF602
21.5.10 检查cookie范围602
21.6 测试访问控件603
21.6.1 了解访问控制要求603
21.6.2 使用多个账户测试604
21.6.3 使用有限的权限测试604
21.6.4 测试不安全的访问控制方法605
21.7 测试基于输入的漏洞605
21.7.1 模糊测试所有请求参数605
21.7.2 测试 SQL 注入607
21.7.3 测试 XSS和其他响应注入609
21.7.4 测试 OS 命令注入611
21.7.5 测试路径遍历612
21.7.6 测试脚本注入613
21.7.7 测试文件包含613
21.8 测试特殊功能方面的输入漏洞613
21.8.1 测试 SMTP 注入614
21.8.2 测试本地代码漏洞614
21.8.3 测试SOAP注入616
21.8.4 测试 LDAP 注入616
21.8.5 测试XPath注入617
21.8.6 测试后端请求注入617
21.8.7 测试XXE注入617
21.9 测试逻辑缺陷618
21.9.1 确定关键的受攻击面618
21.9.2 测试多阶段过程618
21.9.3 测试不完整的输入619
21.9.4 测试信任边界619
21.9.5 测试交易逻辑619
21.10 测试共享主机漏洞620
21.10.1 测试共享基础架构之间的隔离620
21.10.2 测试使用ASP主机的应用程序之间的隔离620
21.11 测试Web服务器漏洞621
21.11.1 测试默认证书621
21.11.2 测试默认内容621
21.11.3 测试危险的HTTP方法622
21.11.4 测试代理功能622
21.11.5 测试虚拟主机配置不当622
21.11.6 测试Web服务器软件漏洞622
21.11.7 测试Web应用程序防火墙623
21.12 其他检查623
21.12.1 测试基于 DOM 的攻击624
21.12.2 测试本地隐私漏洞624
21.12.3 测试脆弱的SSL加密算法625
21.12.4 检查同源策略配置625
21.13 检查信息泄露625
Fashionloversrejoice!TheseswanklittlebooksshowcaseAndyWarholsinimitablepicturesa...
DevelopersandsystemadministratorsalikeareuncoveringthetruepowerofXML,theExtensib...
《HTML5+CSS3精致范例辞典(全彩印刷)》是专为希望成为网页设计师的学习者打造的工具书,书中详细说明了设计网页所需的HTML标记语
ThegoalofTheReasonedSchemeristohelpthefunctionalprogrammerthinklogicallyandthelo...
《现代化语境下的民众教育与社会改造:1928-1937年北平地区民众教育馆研究》内容简介:近代社会教育是在现代化语境下兴起的救国思想
《RT-Thread内核实现与应用开发实战指南:基于STM32》内容简介:本书基于野火STM32全系列开发板介绍RT-Thread内核实现与应用开发,
《半小时漫画理财课》内容简介:作为曾经月入3000元的“月光族”,理财师八宝用5年时间攒下了人生第一个1000万元;作为从海外归来的
数字摄影教程 本书特色 《新世纪高等学校摄影及相关专业通用教材:数字摄影教程》作者将与青年学生们一起共同讨论数字摄影的基本知识,并探索数字摄影的奥秘。《新世纪高...
在你体验Minecraft冒险的同时,学习宝贵的编程技能!如果你很喜欢玩Minecraft,却被游戏中的建造耗费大量时间而困扰,并且你想要
微信公众平台网页开发实战-HTML5+JSSDK混合开发解密 本书特色 2017年,微信已经全面支持公众平台内的网页开发,并且提供了网页开发样式库、JSSDK库...
《金融的逻辑(套装共2册)》内容简介:《金融的逻辑》(上、下)是陈志武教授关于金融的发展历史、演变、影响和作用的一部作品,由
《同时(2018年版)》内容简介:《同时》是桑坦格的“最后一部”随笔集,她的“最后一本书”。书名取自苏珊·桑坦最后一次演说的标
完全掌握Windows 7超级手册 本书特色 windows 7排忧解惑,告诉你微软没有讲清楚的事windows 7无线网络架设笔记本电脑使用windows 7...
《计算机科学概论》由两位知名的计算机科学教育家编写,全面而细致地介绍了计算机科学的各个方面。书中,计算系统的每个分层都以
《目标跟踪中的群智能优化方法》内容简介:全书内容分为9章,系统地介绍了群智能优化方法的发展及其在目标跟踪中的应用,包括基于标
在过去单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发就显得尤为重要。《实战Java高并发程
《中国资本市场研究报告(2019)》内容简介:本研究报告是中国人民大学金融与证券研究所(Finance and Securities,FSI)所长吴晓求
《数字档案资源社会化开发》内容简介:档案信息资源开发是对档案内容的一种再现叙事。长期以来,这种再现叙事的主体主要是保管档案
《初中现代文阅读内容把握与方法突破》内容简介:本书以现行课程标准为研究抓手,以整体序列设计课程标准教学要求,明确具体的教学
网页设计,是指网页设计者以既有的技术和艺术知识为基础,依照设计目的和要求,自觉地对网页的构成元素进行艺术构思,创造出艺术