第一部分 Web API安全的原理
第0章 为安全测试做准备
0.1 获得授权
0.2 API测试的威胁建模
0.3 应该测试哪些API特性
0.3.1 API认证测试
0.3.2 Web应用程序防火墙
0.3.3 移动应用测试
0.3.4 审计API文档
0.3.5 速率限制测试
0.4 限制和排除
0.4.1 安全测试云API
0.4.2 DoS测试
0.5 报告和修复测试
0.6 关于漏洞赏金范围的说明
0.7 小结
第1章 Web应用程序是如何运行的
1.1 Web应用程序基础
1.1.1 URL
1.1.2 HTTP请求
1.1.3 HTTP响应
1.1.4 HTTP状态码
1.1.5 HTTP请求方法
1.1.6 有状态和无状态的HTTP
1.2 Web服务器数据库
1.2.1 SQL
1.2.2 NoSQL
1.3 API如何融入整体架构
1.4 小结
第2章 Web API的原子论
2.1 Web API的工作原理
2.2 Web API的标准类型
2.2.1 RESTful API
2.2.2 GraphQL
2.3 REST API规范
2.4 API数据交换格式
2.4.1 JSON
2.4.2 XML
2.4.3 YAML
2.5 API身份验证
2.5.1 基本身份验证
2.5.2 API密钥
2.5.3 JSON Web Token
2.5.4 HMAC
2.5.5 OAuth 2
2.5.6 无身份验证
2.6 实操API:探索Twitter的API
2.7 小结
第3章 常见的API漏洞
3.1 信息泄露
3.2 对象级授权缺陷
3.3 用户身份验证缺陷
3.4 过度数据暴露
3.5 资源缺乏和速率限制
3.6 功能级授权缺陷
3.7 批量分配
3.8 安全配置错误
3.9 注入
3.10 不当的资产管理
3.11 业务逻辑漏洞
3.12 小结
第二部分 搭建API测试实验室
第4章 API黑客系统
4.1 Kali Linux
4.2 使用DevTools分析Web应用程序
4.3 使用Burp Suite捕获并修改请求
4.3.1 设置FoxyProxy
4.3.2 添加Burp Suite证书
4.3.3 Burp Suite导航
4.3.4 拦截流量
4.3.5 使用Intruder更改请求
4.4 在Postman中编写API请求
4.4.1 请求构建器
4.4.2 环境变量
4.4.3 集合
4.4.4 集合运行器
4.4.5 代码片段
4.4.6 测试面板
4.5 配置Postman
4.6 补充工具
4.6.1 使用OWASP Amass进行侦察
4.6.2 使用Kiterunner发现API端点
4.6.3 使用nikto扫描漏洞
4.6.4 使用OWASP ZAP扫描漏洞
4.6.5 使用Wfuzz进行模糊测试
4.6.6 使用Arjun发现HTTP参数
4.7 小结
实验1:在REST API中枚举用户账户
第5章 设定有API漏洞的目标
5.1 创建一个Linux主机
5.2 安装Docker和Docker Compose
5.3 安装易受攻击的应用程序
5.3.1 completely ridiculous API(crAPI)
5.3.2 OWASP DevSlop的Pixi
5.3.3 OWASP Juice Shop
5.3.4 DVGA
5.4 添加其他易受攻击的应用
5.5 在TryHackMe和HackTheBox上测试API
5.6 小结
实验2:查找易受攻击的API
第三部分 攻击API
第6章 侦察
6.1 被动侦察
6.1.1 被动侦察流程
6.1.2 Google Hacking
6.1.3 ProgrammableWeb的API搜索目录
6.1.4 Shodan
6.1.5 OWASP Amass
6.1.6 GitHub上的信息泄露
6.2 主动侦察
6.2.1 主动侦察过程
6.2.2 使用Nmap进行基线扫描
6.2.3 在Robots.txt文件中查找隐藏路径
6.2.4 使用Chrome DevTools查找敏感信息
6.2.5 使用Burp Suite验证API
6.2.6 使用OWASP ZAP爬取URI
6.2.7 使用Gobuster对URI进行暴力破解
6.2.8 使用Kiterunner发现API内容
6.3 小结
实验3:为黑盒测试执行主动侦察
第7章 端点分析
7.1 寻找请求信息
7.1.1 在文档中查找信息
7.1.2 导入API规范
7.1.3 逆向工程API
7.2 在Postman中添加API身份验证要求
7.3 分析功能
7.3.1 测试预期用途
7.3.2 执行特权操作
7.3.3 分析API响应
7.4 发现信息泄露
7.5 发现安全配置错误
7.5.1 冗长的错误消息
7.5.2 不良的传输加密
7.5.3 问题配置
7.6 发现过度数据暴露
7.7 发现业务逻辑漏洞
7.8 小结
实验4:构建crAPI集合并发现过度的数据暴露
第8章 攻击身份验证
8.1 经典身份验证攻击
8.1.1 暴力破解攻击
8.1.2 密码重置和多因素身份验证暴力破解攻击
8.1.3 密码喷洒
8.1.4 将Base64身份验证包含在暴力破解攻击中
8.2 伪造令牌
8.2.1 手动加载分析
8.2.2 实时令牌捕获分析
8.2.3 暴力破解可预测的令牌
8.3 JSON Web Token滥用
8.3.1 识别和分析JWT
8.3.2 无算法攻击
8.3.3 算法切换攻击
8.3.4 JWT破解攻击
8.4 小结
实验5:破解crAPI JWT签名
第9章 模糊测试
9.1 有效的模糊测试
9.1.1 选择模糊测试的有效负载
9.1.2 检测异常
9.2 广泛模糊测试与深入模糊测试
9.2.1 使用Postman进行广泛模糊测试
9.2.2 使用Burp Suite进行深入模糊测试
9.2.3 使用Wfuzz进行深入模糊测试
9.2.4 对资产管理不当进行广泛模糊测试
9.3 使用Wfuzz测试请求方法
9.4 进行深入的模糊测试以绕过输入过滤
9.5 用于目录遍历的模糊测试
9.6 小结
实验6:对不当的资产管理漏洞进行模糊测试
第10章 利用授权漏洞
10.1 发现BOLA
10.1.1 定位资源ID
10.1.2 用于BOLA的A-B测试
10.1.3 BOLA侧信道攻击
10.2 发现BFLA
10.2.1 用于BFLA的A-B-A测试
10.2.2 在Postman中测试BFLA
10.3 授权漏洞挖掘技巧
10.3.1 Postman的集合变量
10.3.2 Burp Suite的匹配与替换
10.4 小结
实验7:查找另一个用户的车辆位置
第11章 批量分配
11.1 查找批量分配目标
11.1.1 账户注册
11.1.2 未经授权访问组织
11.2 查找批量分配变量
11.2.1 在文档中找到变量
11.2.2 对未知变量进行模糊测试
11.2.3 盲批量赋值攻击
11.3 使用Arjun和Burp Suite Intruder自动化批量分配攻击
11.4 结合使用BFLA和批量分配
11.5 小结
实验8:更改在线商店中商品的价格
第12章 注入
12.1 发现注入漏洞
12.2 XSS攻击
12.3 XAS攻击
12.4 SQL注入
12.4.1 手动提交元字符
12.4.2 SQLmap
12.5 NoSQL注入
12.6 操作系统命令注入
12.7 小结
实验9:使用NoSQL注入伪造优惠券
第四部分 真实世界的API攻击
第13章 应用规避技术和速率限制测试
13.1 规避API安全控制
13.1.1 安全控制的工作原理
13.1.2 API安全控制检测
13.1.3 使用一次性账户
13.1.4 规避技术
13.1.5 使用Burp Suite自动绕过
13.1.6 使用Wfuzz自动绕过
13.2 测试速率限制
13.2.1 关于宽松速率限制的说明
13.2.2 路径绕过
13.2.3 源标头欺骗
13.2.4 在Burp Suite中轮换IP地址
13.3 小结
第14章 攻击GraphQL
14.1 GraphQL请求和集成开发环境
14.2 主动侦察
14.2.1 扫描
14.2.2 在浏览器中查看DVGA
14.2.3 使用DevTools
14.3 逆向工程GraphQL API
14.3.1 目录暴力破解以获取GraphQL端点
14.3.2 Cookie篡改以启用GraphiQL IDE
14.3.3 逆向工程GraphQL请求
14.3.4 使用内省逆向工程GraphQL集合
14.4 GraphQL API分析
14.4.1 使用GraphiQL Documentation Explorer编写请求
14.4.2 使用InQL Burp扩展
14.5 用于命令注入的模糊测试
14.6 小结
第15章 数据泄露和漏洞赏金
15.1 数据泄露
15.1.1 Peloton
15.1.2 USPS通知可见性API
15.1.3 T-Mobile API泄露
15.2 漏洞赏金
15.2.1 优质API密钥的价格
15.2.2 私有API授权问题
15.2.3 星巴克:从未发生的数据泄露
15.2.4 Instagram的GraphQL BOLA
15.3 小结
附录 API黑客攻击检查清单
后记