第 1章 安全测试必备知识 1
1.1 安全测试概述 2
1.2 环境搭建 2
1.2.1 安装安全测试工具运行环境 3
1.2.2 安装Visual Studio Code 6
1.2.3 启动服务器和安装WebGoat系统 8
1.3 靶机系统 15
1.3.1 WebGoat系统 15
1.3.2 WebWolf系统 16
1.4 安全测试基础知识 23
1.4.1 HTTP基础知识 23
1.4.2 HTTP代理工具 29
1.4.3 开发者工具 30
1.4.4 信息安全三要素 34
1.4.5 加密与编码基础 37
第 2章 SQL注入漏洞 52
2.1 SQL注入漏洞基础知识 52
2.1.1 SQL语句的类型与SQL注入漏洞的类型 53
2.1.2 SQL语句 53
2.1.3 DML语句 55
2.1.4 DDL语句 56
2.1.5 DCL语句 57
2.1.6 如何利用SQL注入漏洞 58
2.1.7 SQL注入的后果 59
2.1.8 影响SQL注入的因素 60
2.1.9 测试字符型SQL注入漏洞 62
2.1.10 测试数字型SQL注入漏洞 63
2.1.11 利用SQL注入漏洞获取 敏感数据 68
2.1.12 注入SQL查询链 70
2.1.13 SQL注入漏洞对系统可用性 的破坏 74
2.2 SQL注入漏洞进阶 74
2.2.1 组合注入 74
2.2.2 组合注入技巧 76
2.2.3 SQL盲注 78
2.2.4 演示SQL盲注的方法 79
2.2.5 做笔试题 82
第3章 SQL注入防御和路径遍历漏洞 85
3.1 SQL注入防御 85
3.1.1 SQL注入的防御方法 85
3.1.2 存储过程 86
3.1.3 参数化查询 87
3.1.4 编写安全代码 88
3.1.5 编写可运行的安全代码 90
3.1.6 参数化查询的.NET方式 91
3.1.7 使用输入验证防御SQL注入 漏洞 92
3.1.8 穿透薄弱的输入验证(一) 93
3.1.9 穿透薄弱的输入验证(二) 99
3.1.10 order by注入 101
3.1.11 如何利用order by注入 103
3.1.12 最小特权限制 109
3.2 路径遍历漏洞 109
3.2.1 路径遍历漏洞的原理 110
3.2.2 实现任意文件上传 111
3.2.3 穿透薄弱的防御规则 113
3.2.4 穿透页面的过滤规则 114
3.2.5 获取敏感文件 117
第4章 身份验证 124
4.1 绕过身份验证 124
4.1.1 身份验证绕过的方式 124
4.1.2 双因素身份认证中的密码重置 127
4.2 会话令牌 132
4.2.1 JWT简介 132
4.2.2 JWT的结构 133
4.2.3 如何使用JWT 136
4.2.4 JWT签名算法的None漏洞 137
4.2.5 弱签名密钥的爆破攻击 145
4.2.6 刷新令牌 150
4.2.7 刷新令牌存在的漏洞 154
4.2.8 越权操作漏洞 161
第5章 密码重置和安全密码 167
5.1 密码重置 167
5.1.1 接收密码重置邮件 168
5.1.2 确定已注册的账户 173
5.1.3 安全问题存在的漏洞 173
5.1.4 如何设置安全问题 180
5.1.5 重置密码链接存在的漏洞 181
5.1.6 如何设计安全的密码重置功能 187
5.2 安全密码 189
5.2.1 密码标准 190
5.2.2 如何设置一个安全性足够强的密码 191
5.2.3 如何提高账户的安全性 191
5.2.4 如何安全地存储密码 192
第6章 敏感信息泄露和XXE漏洞 193
6.1 敏感信息泄露 193
6.1.1 为什么需要对敏感数据进行加密 193
6.1.2 嗅探HTTP数据包的敏感内容 197
6.2 XXE漏洞 199
6.2.1 XML基础知识 199
6.2.2 XML实体和XXE漏洞 202
6.2.3 XXE注入举例 203
6.2.4 利用XXE漏洞显示文件系统的目录 205
6.2.5 针对测验6.2的防御方案 209
6.2.6 通过代码审查找到XXE漏洞 210
6.2.7 REST框架的XXE漏洞 212
6.2.8 针对REST框架的XXE漏洞的解决方案 215
6.2.9 利用XXE漏洞实施的DoS 攻击 216
6.2.10 XXE盲注 217
6.2.11 如何利用XXE盲注 218
6.2.12 如何防御XXE漏洞 223
第7章 访问控制漏洞 224
7.1 不安全的直接对象引用 224
7.1.1 什么是IDOR 224
7.1.2 使用合法的用户身份登录 225
7.1.3 对比差异点 226
7.1.4 猜测和预测模式 228
7.1.5 测试不安全的对象引用 229
7.1.6 如何做到安全的对象引用 237
7.2 缺少功能级访问控制 238
7.2.1 什么是缺少功能级访问控制 238
7.2.2 定位前端页面隐藏功能 239
7.2.3 利用访问控制漏洞收集用户信息 244
第8章 XSS漏洞 249
8.1 XSS漏洞基础知识 249
8.2 在前端执行JavaScript语句 254
8.3 可能存在XSS漏洞的位置 258
8.4 XSS漏洞的危害 258
8.5 反射型XSS漏洞的利用场景 259
8.6 测试反射型XSS漏洞 260
8.7 Self-XSS漏洞 269
8.8 基于DOM的XSS漏洞 270
8.9 识别基于DOM的XSS漏洞 271
8.10 测试基于DOM的XSS漏洞 274
8.11 涉及XSS漏洞的笔试题 278
第9章 反序列化漏洞 281
9.1 快速熟悉一门语言的思维框架 281
9.2 序列化和反序列化 285
9.3 如何利用Java反序列化漏洞 286
9.4 反序列化漏洞的调用链 296
9.5 如何利用反序列化漏洞 297
第 10章 组件漏洞 304
10.1 什么是组件 304
10.2 开源组件的生态系统 305
10.3 OWASP对组件漏洞的描述 306
10.4 WebGoat系统的组件的安全性 309
10.5 前端组件jquery-ui的特定版本 310
10.6 软件产品中引用开源组件需要注意的事项 311
10.7 如何生成物料清单 312
10.8 如何处理安全信息过载 318
10.9 如何处理许可证信息过载 318
10.10 开源组件在软件架构中的 使用情况 319
10.11 开源组件的XStream漏洞 319
10.12 开源组件的安全现状以及如何 应对安全风险 323
第 11章 请求伪造漏洞 325
11.1 CSRF漏洞 325
11.1.1 什么是CSRF漏洞 325
11.1.2 GET型CSRF漏洞 326
11.1.3 测试GET型CSRF漏洞 326
11.1.4 测试POST型CSRF漏洞 332
11.1.5 如何防止CSRF漏洞 335
11.1.6 JSON型CSRF漏洞 336
11.1.7 测试JSON型CSRF漏洞 337
11.1.8 针对登录请求的CSRF攻击 341
11.1.9 CSRF漏洞的影响和解决
方案 346
11.2 SSRF漏洞 347
11.2.1 SSRF漏洞简介 347
11.2.2 利用SSRF漏洞加载指定资源 350
11.2.3 利用SSRF漏洞伪造请求 354
11.2.4 SSRF漏洞的防御方法 358
第 12章 前端安全和高阶CTF挑战 359
12.1 绕过前端限制 359
12.1.1 什么是绕过前端限制 359
12.1.2 突破HTML代码限制 360
12.1.3 突破JavaScript脚本限制 364
12.2 客户端过滤 369
12.2.1 什么是客户端过滤 369
12.2.2 定位敏感信息 370
12.2.3 定位前端敏感功能 372
12.3 HTML篡改 376
12.3.1 什么是HTML篡改 376
12.3.2 利用HTML篡改低价购物 377
12.3.3 如何防止HTML篡改 380
12.4 CTF题型之一 380
12.4.1 CTF题目规则 381
12.4.2 找回丢失的管理员登录密码 381
12.5 CTF题型之二 385
12.6 CTF题型之三 389
12.7 CTF题型之四 396