JSON Web Token 安全漏洞
本实验仅供学习目的,请勿将所学知识用于非法用途!
JWT (JSON Web Token) 是一种用于身份验证的令牌格式,由三部分组成:
Header.Payload.Signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VyIjoiYWRtaW4iLCJyb2xlIjoiYWRtaW4ifQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
算法和类型{"alg":"HS256"}
用户数据{"user":"admin"}
签名验证HMAC(header.payload)
将算法改为 none,绕过签名验证
高危使用字典爆破弱密钥,伪造任意 Token
中危JWT Payload 只是 Base64 编码,不是加密
低危重要:JWT 的 Header 和 Payload 只是 Base64 编码,不是加密!
任何人都可以解码查看内容,签名只保证数据未被篡改。
// 解码 JWT
const [header, payload, signature] = token.split('.')
console.log(JSON.parse(atob(header))) // 明文 Header
console.log(JSON.parse(atob(payload))) // 明文 Payload