本书旨在系统构建Web应用安全领域的知识体系并推动核心防护技术的普及与应用。本书的内容设计兼顾理论深度与实践广度,力求为Web应用安全的初学者提供坚实的理论基础与全面的技术视野,同时着重培养其进行安全漏洞分析、渗透测试及针对性防护方案设计的综合能力。 本书围绕Web应用最常见的高危安全漏洞展开,主要涵盖七种核心漏洞类型:SQL注入漏洞、跨站脚本漏洞、跨站请求伪造漏洞、文件上传漏洞、文件包含漏洞、代码执行漏洞及服务器端请求伪造漏洞。每个模块均遵循原理、防护、实战的逻辑主线进行阐述,确保读者不仅能理解漏洞的原理与利用方式,更能掌握有效的防御与修复方法。为强化学习效果,本书特别注重理论与实践的结合。除详尽的技术解析外,各章节均配备由浅入深的攻防实验环境与实操练习,引导读者在仿真场景中完成从检测漏洞到修复漏洞的完整流程。
朱添田,男,于2019年获浙江大学博士学位,教授。致力于数据驱动安全、隐私保护、大数据分析、异常检测等领域的研究,累积了扎实的理论与实践经验。曾发表CCF A类国际顶级论文4篇。参与并结题国家自然科学基金面上项目2项,在研国家自然科学基金重点支持项目1项。
第1章 SQL注入漏洞 1
1.1 案例 1
1.1.1 案例1:利用SQL注入登录数据库 1
1.1.2 案例2:利用SQL注入获取数据库信息 3
1.2 SQL注入漏洞的原理 6
1.2.1 SQL语言简介 6
1.2.2 Web数据库交互 7
1.2.3 SQL注入过程 8
1.2.4 数据库漏洞利用 8
1.2.5 数据库语句利用 13
1.2.6 数据库信息提取 13
1.3 SQL注入漏洞的分类 14
1.3.1 基于报错注入 14
1.3.2 联合查询注入 15
1.3.3 盲注 17
1.3.4 堆叠注入 21
1.3.5 其他手段注入 21
1.4 SQL注入工具 23
1.4.1 SQLMap 23
1.4.2 Pangolin 25
1.4.3 Havij 28
1.5 防御SQL注入攻击 30
1.5.1 数据类型判断 30
1.5.2 特殊字符转义 31
1.5.3 使用预编译语句 33
1.5.4 框架技术 33
1.5.5 存储过程 34
1.6 小结与习题 35
1.6.1 小结 35
1.6.2 习题 35
1.7 课外拓展 35
1.8 实训 37
1.8.1 【实训1】Docker环境搭建SQLi-Labs靶场 37
1.8.2 【实训2】SQL注入(报错回显)(1) 39
1.8.3 【实训3】SQL注入(报错回显)(2) 43
1.8.4 【实训4】SQL注入(双注入) 48
第2章 跨站脚本漏洞 53
2.1 案例 53
2.1.1 案例1:HTML ALERT(1) 53
2.1.2 案例2:HTML ALERT(2) 54
2.2 XSS漏洞的原理 56
2.3 XSS漏洞的分类 58
2.3.1 反射型XSS漏洞 58
2.3.2 保存型XSS漏洞 59
2.3.3 基于DOM的XSS漏洞 60
2.4 利用XSS漏洞 62
2.4.1 Cookie窃取攻击 63
2.4.2 网络钓鱼 65
2.4.3 XSS蠕虫 66
2.5 防御XSS攻击 68
2.5.1 防御反射型与保存型XSS攻击 68
2.5.2 防御基于DOM的XSS攻击 71
2.6 小结与习题 72
2.6.1 小结 72
2.6.2 习题 72
2.7 课外拓展 72
2.8 实训 73
2.8.1 【实训5】Docker环境搭建xss-labs靶场 73
2.8.2 【实训6】XSS入门 74
2.8.3 【实训7】XSS闭合 76
2.8.4 【实训8】XSS事件绕过 77
第3章 跨站请求伪造漏洞 80
3.1 案例 80
3.1.1 案例1:银行转账 80
3.1.2 案例2:博客删除 82
3.2 CSRF漏洞的原理 83
3.3 CSRF漏洞的分类 85
3.3.1 GET类型的CSRF漏洞 85
3.3.2 POST类型的CSRF漏洞 86
3.3.3 GET和POST皆可的CSRF漏洞 86
3.4 利用CSRF漏洞 89
3.5 防御CSRF攻击 91
3.5.1 验证HTTP Referer字段 91
3.5.2 HTTP Referer字段中添加及验证Token 92
3.5.3 验证HTTP自定义属性 92
3.5.4 验证HTTP Origin字段 93
3.5.5 验证Session初始化 94
3.6 小结与习题 95
3.6.1 小结 95
3.6.2 习题 95
3.7 课外拓展 95
3.8 实训 100
3.8.1 【实训9】phpStudy环境搭建pikachu靶场 100
3.8.2 【实训10】GET型CSRF攻击验证 103
3.8.3 【实训11】POST型CSRF攻击验证 105
3.8.4 【实训12】Token机制CSRF绕过验证 107
第4章 文件上传漏洞 112
4.1 案例 112
4.1.1 案例1:前端检测绕过 112
4.1.2 案例2:后端文件黑名单检测绕过 114
4.2 文件上传漏洞的原理 115
4.3 文件上传漏洞的分类 118
4.3.1 文件类型检查漏洞 118
4.3.2 Web服务器解析漏洞 126
4.4 利用文件上传漏洞 129
4.5 防御文件上传攻击 132
4.6 小结与习题 133
4.6.1 小结 133
4.6.2 习题 133
4.7 课外拓展 134
4.8 实训 134
4.8.1 【实训13】phpStudy搭建upload-labs靶场 134
4.8.2 【实训14】MIME类型伪造绕过验证 136
4.8.3 【实训15】解析规则劫持绕过验证 138
4.8.4 【实训16】文件名大小写绕过验证 142
第5章 文件包含漏洞 144
5.1 案例 144
5.1.1 案例1:Session文件包含漏洞 144
5.1.2 案例2:Dedecms远程文件包含漏洞 147
5.2 文件包含漏洞的原理 149
5.3 文件包含漏洞的分类 150
5.3.1 PHP文件包含漏洞 150
5.3.2 JSP文件包含漏洞 151
5.3.3 ASP文件包含漏洞 152
5.4 利用文件包含漏洞 152
5.4.1 读取配置文件 152
5.4.2 读取PHP源文件 153
5.4.3 包含用户上传文件 154
5.4.4 包含特殊的服务器文件 154
5.4.5 RFI漏洞 155
5.5 防御文件包含攻击 156
5.5.1 参数审查 156
5.5.2 防止变量覆盖 156
5.5.3 定制安全的Web Service环境 156
5.6 小结与习题 157
5.6.1 小结 157
5.6.2 习题 157
5.7 课外拓展 157
5.8 实训 160
5.8.1 【实训17】phpStudy搭建DVWA靶场 160
5.8.2 【实训18】低安全级别文件包含攻击验证 163
5.8.3 【实训19】中安全级别文件包含绕过验证 167
5.8.4 【实训20】高安全级别文件包含绕过验证 169
第6章 代码执行漏洞 171
6.1 案例 171
6.1.1 案例1:ECShop远程代码执行漏洞 171
6.1.2 案例2:ThinkPHP远程代码执行漏洞 175
6.2 代码执行漏洞的原理 179
6.3 代码执行漏洞的分类 180
6.3.1 代码执行漏洞 180
6.3.2 函数调用漏洞 180
6.4 利用代码执行漏洞 181
6.4.1 命令注入 181
6.4.2 动态代码执行 183
6.4.3 动态函数调用 184
6.4.4 preg_replace() 184
6.4.5 反序列化漏洞 185
6.5 防御代码执行攻击 188
6.5.1 验证输入 188
6.5.2 合理使用转义函数 188
6.5.3 避免危险操作 189
6.5.4 行为限制 189
6.5.5 定期更新 189
6.6 小结与习题 189
6.6.1 小结 189
6.6.2 习题 189
6.7 课外拓展 190
6.8 实训 191
6.8.1 【实训21】基于系统命令的执行验证 191
6.8.2 【实训22】基于函数的代码执行验证 193
第7章 服务器端请求伪造漏洞 199
7.1 案例 199
7.1.1 案例1:Jspxcms服务器端请求伪造漏洞 199
7.1.2 案例2:Rebuild服务器端请求伪造漏洞 202
7.2 SSRF漏洞的原理 204
7.3 SSRF漏洞的分类 206
7.3.1 PHP 206
7.3.2 Java 207
7.3.3 Python 207
7.4 利用SSRF漏洞 208
7.4.1 File协议 208
7.4.2 HTTP协议 209
7.4.3 Dict协议 211
7.4.4 Gopher协议 212
7.5 防御SSRF攻击 215
7.5.1 验证输入 215
7.5.2 检查重定向 215
7.5.3 过滤返回信息 216
7.6 小结与习题 216
7.6.1 小结 216
7.6.2 习题 216
7.7 课外拓展 217
7.8 实训 219
7.8.1 【实训23】基于命令行工具的SSRF验证 219
7.8.2 【实训24】基于文件函数的SSRF验证 222