玩转JSON Web Tokens:从漏洞挖掘到账户接管
作者:Muhammad Qasim Munir
大家好!今天我想分享关于JSON Web Tokens(JWT)的安全实践。本文将展示如何在不使用验证令牌的情况下确认邮箱、重置其他用户密码,最终实现企业邮箱接管。
什么是JSON Web Token?
JSON Web Token(JWT)是基于RFC 7519的开放标准,用于在各方之间作为JSON对象安全传输信息。JWT可通过数字签名进行验证,支持HMAC算法或RSA/ECDSA公私钥对签名。
JWT结构解析
JWT由三部分组成,用点号(.)分隔:
- Header(头部)
- Payload(载荷)
- Signature(签名)
完整格式示例:xxxxx.yyyyy.zzzzz
绕过邮箱验证机制
通过滥用邀请功能并修改JWT令牌,我实现了无需验证令牌的邮箱确认:
- 使用攻击者邮箱
attacker@attacker.com
发起邀请请求 - 从Burp响应中获取JWT令牌:
|
|
-
解码后修改关键字段:
- 将email改为
admin@company.com
- 将user_id改为管理员ID
- 调整时间戳与服务器"created date"匹配
- 将email改为
-
重新编码后成功接管管理员账户,可访问企业SSO集成系统(如支持面板等)
密码重置漏洞利用
通过物理访问浏览器历史记录获取用户ID后:
- 使用攻击者邮箱请求密码重置链接:
|
|
- 修改JWT中的用户ID为目标用户ID
- 由于Web应用未验证签名有效性,成功重置他人密码
技术要点总结
- 服务器未严格验证JWT签名是根本漏洞
- 时间戳校验缺失导致令牌可被复用
- 用户ID暴露导致横向权限提升
参考资源: