玩转JSON Web Tokens:从漏洞挖掘到账户接管实战

本文详细解析如何通过篡改JWT令牌实现邮箱验证绕过、密码重置漏洞利用,最终接管企业管理员账户的全过程,包含JWT结构解析和实际攻击案例演示。

玩转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令牌,我实现了无需验证令牌的邮箱确认:

  1. 使用攻击者邮箱attacker@attacker.com发起邀请请求
  2. 从Burp响应中获取JWT令牌:
1
2
3
4
5
{
  "email": "attacker@attacker.com",
  "user_id": "attacker123",
  "iat": 1585939200
}
  1. 解码后修改关键字段:

    • 将email改为admin@company.com
    • 将user_id改为管理员ID
    • 调整时间戳与服务器"created date"匹配
  2. 重新编码后成功接管管理员账户,可访问企业SSO集成系统(如支持面板等)

密码重置漏洞利用

通过物理访问浏览器历史记录获取用户ID后:

  1. 使用攻击者邮箱请求密码重置链接:
1
https://example.com/reset?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxxx
  1. 修改JWT中的用户ID为目标用户ID
  2. 由于Web应用未验证签名有效性,成功重置他人密码

技术要点总结

  • 服务器未严格验证JWT签名是根本漏洞
  • 时间戳校验缺失导致令牌可被复用
  • 用户ID暴露导致横向权限提升

参考资源:

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计