JWT可爆破——未验证签名导致越权&加密为None导致不验证签名越权漏洞
字数 1357 2025-09-23 19:27:46
JWT安全漏洞分析与利用教学文档
0x01 JWT基础概念
JSON Web Token (JWT) 是一种开放标准 (RFC 7519),用于在各方之间安全地传输信息作为JSON对象。JWT通常由三部分组成:
- Header - 包含令牌类型和签名算法
- Payload - 包含声明(claims)
- Signature - 用于验证消息在传输过程中未被篡改
典型JWT格式:header.payload.signature
0x02 JWT常见安全漏洞
1. 可爆破密钥漏洞
漏洞原理:
- 当JWT使用弱密钥或可预测密钥时,攻击者可以通过暴力破解获取签名密钥
- 一旦获取密钥,攻击者可伪造任意令牌
利用条件:
- JWT使用对称加密算法(如HS256)
- 服务器未对密钥强度做限制
- 服务器未实施爆破防护机制
利用工具:
hashcatjwt_tool- 自定义爆破脚本
爆破步骤:
- 捕获有效JWT令牌
- 使用字典攻击尝试破解密钥
- 使用破解出的密钥生成新令牌
2. 未验证签名漏洞
漏洞原理:
- 服务器端未正确验证JWT签名
- 攻击者可修改payload后直接提交,无需有效签名
利用方法:
- 捕获有效JWT
- 修改payload中的权限相关字段(如user→admin)
- 直接提交修改后的JWT
3. "None"算法漏洞
漏洞原理:
- JWT规范允许使用"none"算法,表示不签名
- 如果服务器配置不当,可能接受"none"算法的令牌
- 攻击者可移除签名部分或将算法改为"none"绕过验证
利用步骤:
- 修改header中的alg字段为"none"
- 删除签名部分(保留最后的点)
- 修改payload中的权限信息
- 提交修改后的令牌
0x03 实战案例分析
案例1:小程序JWT密钥爆破
-
信息收集:
- 使用Burp Suite抓取小程序流量
- 识别包含JWT的数据包(通常Authorization头中)
- 使用HAE等插件高亮敏感信息
-
分析JWT结构:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c -
爆破尝试:
hashcat -a 0 -m 16500 jwt.txt rockyou.txt或使用jwt_tool:
python3 jwt_tool.py <JWT> -C -d wordlist.txt
案例2:未验证签名越权
-
原始JWT payload:
{ "user": "test", "role": "user" } -
修改payload:
{ "user": "test", "role": "admin" } -
直接提交修改后的JWT,观察是否可提权
案例3:"None"算法绕过
-
原始JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c -
修改为:
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.(注意最后的点保留)
0x04 防御措施
-
密钥管理:
- 使用强密钥(长度≥256位)
- 定期轮换密钥
- 不同服务使用不同密钥
-
签名验证:
- 严格验证所有JWT签名
- 拒绝"none"算法
- 验证header中的alg字段与预期算法一致
-
其他防护:
- 实施速率限制防止爆破
- 使用非对称加密算法(如RS256)
- 设置合理的令牌有效期
- 对敏感操作实施二次验证
0x05 检测工具
-
jwt_tool:
- JWT漏洞综合测试工具
- 支持多种攻击方式
-
Burp Suite插件:
- JSON Web Tokens插件
- Autorize插件检测越权
-
在线检测:
- https://jwt.io/
- https://token.dev/
0x06 总结
JWT安全漏洞主要源于实现不当而非协议本身缺陷。开发人员应:
- 严格验证签名
- 使用强密码学算法
- 避免接受"none"算法
- 对密钥实施严格管理
安全测试人员应重点关注:
- JWT算法类型
- 签名验证逻辑
- 密钥强度
- 权限提升可能性