本文阅读大约需要10分钟;
JWT (JSON Web Token) 是一种常用的身份验证和授权机制,广泛应用于 Web 应用和 API 中。然而,如果 JWT Token 的实现或使用不当,就可能导致严重的安全漏洞,例如伪造 Token、泄露敏感信息、权限提升等。
以下这份清单旨在帮助应用安全专家系统地评估和测试 JWT Token 的安全性,确保应用免受 JWT 相关的安全威胁。
1. Token 结构分析
-
原理: 了解 JWT Token 的基本结构,包括头部 (Header)、载荷 (Payload) 和签名 (Signature),是进行其他安全测试的基础。
内容:
-
解码 Token,识别头部、载荷和签名部分。
-
分析头部信息,包括算法 (alg) 和类型 (typ)。
-
检查载荷数据,识别声明 (Claims) 类型和内容,例如签发者 (iss)、受众 (aud)、过期时间 (exp) 等。
方法:
-
使用在线工具,例如 jwt.io,解码 JWT Token。
-
使用编程语言的 JWT 库解析 Token,例如 Python 的 jwt 库。
2. Token 篡改
-
原理: 验证系统是否能够检测并拒绝被篡改的 Token,确保 Token 完整性。
内容:
-
修改 Token 的头部、载荷或签名部分;
-
使用修改后的 Token 访问受保护资源。
方法:
-
使用文本编辑器或代码编辑器修改 Token 内容;
-
使用 Burp Suite 等代理工具拦截和修改 Token;
-
使用 JWT Inspector 等浏览器插件修改 Token。
3. Token 过期
-
原理: 验证系统是否能够正确识别和拒绝过期 Token,防止攻击者使用过期 Token 访问资源。
内容:
-
获取一个有效的 Token;
-
修改 Token 的过期时间 (exp) 声明,使其过期;
-
使用过期 Token 访问受保护资源。
方法:
-
使用文本编辑器或代码编辑器修改 Token 的 exp 声明;
-
使用 Burp Suite 等代理工具拦截和修改 Token。
4. 签名篡改
-
原理: 验证系统是否能够检测并拒绝签名被篡改的 Token,确保 Token authenticity。
内容:
-
获取一个有效的 Token。
-
修改 Token 的载荷部分。
-
尝试使用原始签名验证修改后的 Token。
方法:
-
使用文本编辑器或代码编辑器修改 Token 载荷。
-
使用 Burp Suite 等代理工具拦截和修改 Token。
-
使用 jwt_tool 等工具尝试使用原始签名验证修改后的 Token。
5. 算法测试
-
原理: 测试系统是否正确实现了所有支持的加密算法,并确保使用安全的算法。
内容:
-
识别系统支持的 JWT 算法,例如 HS256、RS256 等。
-
创建使用不同算法签名的 Token。
-
验证系统是否能够正确验证不同算法签名的 Token。
方法:
-
查阅系统文档或配置,识别支持的算法。
-
使用不同的 JWT 库创建使用不同算法签名的 Token。
-
尝试使用弱算法 (例如 none) 签名的 Token 访问资源。
6. 暴力破解
-
原理: 尝试暴力破解 Token 的签名,评估 Token 的加密强度和密钥安全性。
内容:
-
获取一个有效的 Token。
-
使用暴力破解工具尝试猜测签名密钥。
方法:
-
使用 hashcat 或 John the Ripper 等工具进行离线暴力破解。
-
使用 jwt_tool 等工具进行在线暴力破解。
7. 重放攻击
原理: 验证系统是否能够防止攻击者重放之前有效的 Token,确保 Token 的 freshness。
内容:
-
获取一个有效的 Token。
-
在 Token 过期前,多次使用相同的 Token 访问受保护资源。
方法:
-
使用 Burp Suite 等代理工具拦截和重放 Token。
-
编写脚本模拟重放攻击。
8. 信息泄露
原理: 检查 Token 中是否包含敏感信息,例如用户密码、API 密钥等,防止信息泄露。
内容:
-
解码 Token,检查载荷数据中是否存在敏感信息。
方法:
-
使用在线工具或 JWT 库解码 Token。
-
搜索代码库,查找可能泄露敏感信息的代码。
9. Token 撤销
原理: 验证系统是否能够及时撤销失效的 Token,例如用户退出登录或 Token 被盗用。
内容:
-
创建一个有效的 Token。
-
触发 Token 撤销机制,例如用户退出登录。
-
尝试使用已撤销的 Token 访问资源。
方法:
-
手动触发 Token 撤销操作。
-
编写脚本模拟 Token 撤销场景。
10. 密钥管理
原理: 评估系统对用于 Token 签名和验证的密钥的管理 practices,确保密钥安全。
内容:
-
了解密钥的存储方式,例如文件、数据库或硬件安全模块 (HSM)。
-
检查密钥的轮换策略,确保定期更换密钥。
-
评估密钥的强度,例如密钥长度和熵。
方法:
-
查阅系统文档或配置,了解密钥管理 practices。
-
进行代码审查,识别与密钥管理相关的代码。
-
使用密码强度评估工具评估密钥强度。
11. 访问控制
原理: 验证系统是否正确执行基于 Token 的访问控制,确保只有授权用户才能访问资源。
内容:
-
创建具有不同权限的 Token。
-
使用不同权限的 Token 访问受保护资源。
-
验证系统是否根据 Token 中的权限信息授予或拒绝访问。
方法:
-
使用 JWT 库创建具有不同权限的 Token。
-
编写测试脚本来模拟不同权限的访问请求。
12. Token 枚举
原理: 枚举不同类型的 Token,尝试发现潜在的漏洞或弱点。
内容:
-
收集系统中使用的不同类型的 Token,例如访问 Token、刷新 Token 等。
-
分析每个 Token 的结构和用途,识别潜在的攻击面。
方法:
-
使用 Burp Suite 等代理工具拦截和收集 Token。
-
分析系统日志,识别不同类型的 Token。
13. 签发者验证
原理: 验证 Token 中的签发者 (iss) 声明,确保 Token 来自可信来源。
内容:
-
创建一个 Token,修改其 iss 声明。
-
尝试使用修改后的 Token 访问资源。
-
验证系统是否拒绝来自不可信签发者的 Token。
方法:
-
使用 JWT 库创建 Token,修改 iss 声明。
-
使用 Burp Suite 等代理工具拦截和修改 Token。
14. 受众验证
原理: 验证 Token 中的受众 (aud) 声明,确保 Token 只能由预期的接收者使用。
内容:
-
创建一个 Token,修改其 aud 声明。
-
尝试使用修改后的 Token 访问不同的资源。
-
验证系统是否拒绝将 Token 用于非预期受众。
方法:
-
使用 JWT 库创建 Token,修改 aud 声明。
-
使用 Burp Suite 等代理工具拦截和修改 Token。
15. 安全存储
原理: 评估系统如何存储和保护 JWT Token,防止未经授权的访问和泄露。
内容:
-
了解 Token 的存储机制,例如数据库、cookie 或本地存储。
-
检查 Token 是否加密存储。
-
评估存储 Token 的服务器或数据库的安全性。
方法:
-
查阅系统文档或配置,了解 Token 存储机制。
-
进行代码审查,识别与 Token 存储相关的代码。
-
评估存储 Token 的服务器或数据库的访问控制和安全配置。
16. 工具使用
原理: 使用专门的 JWT 工具辅助进行 Token 解码、验证和生成,提高测试效率。
内容:
-
使用 jwt.io 等在线工具解码、验证和生成 Token。
-
使用 jwt 库等编程语言库进行 Token 操作。
方法:
-
访问在线工具网站,例如 jwt.io。
-
安装和使用编程语言的 JWT 库。
17. OWASP ZAP
原理: 使用 OWASP ZAP 作为代理拦截和修改 JWT Token,测试 Web 应用的安全性。
内容:
-
配置 OWASP ZAP 拦截来自 Web 应用的流量。
-
拦截包含 JWT Token 的请求。
-
修改 Token 内容,例如载荷或签名。
-
将修改后的 Token 发送到服务器,观察应用的行为。
方法:
-
下载和安装 OWASP ZAP。
-
配置代理设置,拦截 Web 应用流量。
-
使用 ZAP 的各种功能,例如手动修改、脚本编写等,修改 Token。
18. Burp Suite
原理: 使用 Burp Suite 进行全面的 Web 应用安全测试,包括针对 JWT Token 的测试。
内容:
-
使用 Burp Suite 的代理功能拦截 Web 应用流量。
-
拦截包含 JWT Token 的请求。
-
使用 Burp Suite 的各种工具,例如 Repeater、Intruder 和 Scanner,测试 Token 的安全性。
方法:
-
下载和安装 Burp Suite。
-
配置代理设置,拦截 Web 应用流量。
-
使用 Burp Suite 的各种功能,例如手动修改、自动攻击等,测试 Token。
19. JWT Inspector
原理: 使用 JWT Inspector 浏览器插件分析和操作 JWT Token,简化测试流程。
内容:
-
在浏览器中安装 JWT Inspector 插件。
-
使用插件查看和解码 Token。
-
修改 Token 内容,例如载荷或签名。
-
将修改后的 Token 发送到服务器,观察应用的行为。
方法:
-
在浏览器扩展商店中搜索并安装 JWT Inspector。
-
使用插件的界面查看和修改 Token。
20. jwt_tool
原理: 使用 jwt_tool 命令行工具进行 JWT Token 的测试和操作,包括伪造、篡改和破解。
内容:
-
使用 jwt_tool 解码、验证和生成 Token。
-
尝试使用 jwt_tool 伪造 Token 签名。
-
使用 jwt_tool 进行暴力破解,尝试猜测密钥。
方法:
-
下载和安装 jwt_tool。
-
使用命令行界面执行 jwt_tool 命令。
21. Python-JWT
原理: 使用 Python-JWT 库创建、验证和操作 JWT Token,进行安全测试。
内容:
-
使用 Python-JWT 库生成 Token,并使用不同的算法进行签名。
-
验证 Token 的签名和有效性。
-
修改 Token 内容,例如载荷或签名,并观察应用的行为。
方法:
-
安装 Python-JWT 库 (pip install pyjwt)。
-
编写 Python 代码,使用 Python-JWT 库进行 Token 操作。
22. JWS Unit
原理: 使用 JWS Unit 库进行 JWT Token 的暴力破解测试,尝试猜测签名密钥。
内容:
-
使用 JWS Unit 库加载 Token。
-
配置暴力破解参数,例如密钥空间和字符集。
-
执行暴力破解,尝试猜测密钥。
方法:
-
安装 JWS Unit 库。
-
编写代码,使用 JWS Unit 库进行暴力破解。
23. jwtcat
原理: 使用 jwtcat 命令行工具分析和提取 JWT Token 中的信息,方便进行安全评估。
内容:
-
使用 jwtcat 解码 Token,查看头部、载荷和签名信息。
-
提取 Token 中的特定声明,例如 iss、aud 和 exp。
方法:
-
下载和安装 jwtcat。
-
使用命令行界面执行 jwtcat 命令。
24. Tokenbreaker
原理: 使用 Tokenbreaker 脚本检测 JWT Token 实现中的漏洞,例如算法弱点和签名绕过。
内容:
-
使用 Tokenbreaker 脚本分析 Token 的结构和签名。
-
尝试使用 Tokenbreaker 脚本进行常见的攻击,例如 none 算法攻击和密钥混淆攻击。
方法:
-
下载 Tokenbreaker 脚本。
-
使用 Python 执行 Tokenbreaker 脚本,并提供 Token 作为输入。
25. JWT Attack Toolkit
原理: 使用 JWT 攻击工具包进行各种攻击,例如签名伪造、篡改和重放攻击。
内容:
-
使用工具包中的不同工具进行各种 JWT 攻击。
-
例如,使用 jwt_tool 伪造 Token 签名,使用 Burp Suite 进行重放攻击。
方法:
-
下载和安装 JWT 攻击工具包。
-
使用命令行界面或图形界面执行工具包中的工具。
总结:
这份 JWT Token 安全测试指南提供了一种全面且系统化的方法来评估和加固 JWT Token 的安全性。应用安全专家可以使用这些测试方法和工具,发现和修复潜在的漏洞,确保应用免受 JWT 相关的安全威胁。
如果您觉得文章对您有所帮助,还请您关注我!
如果您也想更进一步加深对网络安全行业了解,请参阅我这篇文章;
原文始发于微信公众号(再说安全):25种JWT Token渗透测试方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论