一、JWT 原理详解
1. JWT 结构
JWT 由三部分组成,以 .
分隔:
-
Header:声明算法(
alg
)和类型(typ
),例如:{ "alg": "HS256", "typ": "JWT", "kid": "default" // 可选参数,用于指定密钥 ID }
-
Payload:存储用户身份和权限信息,例如:
{ "sub": "user123", "exp": 1720000000, // 过期时间 "admin": true }
-
Signature:对 Header 和 Payload 的签名,防止篡改。
签名生成逻辑(以 HS256 为例):signature = HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret_key )
最终 Token 格式:base64(Header).base64(Payload).base64(Signature)
。
2. JWT 工作流程
-
用户登录:客户端发送凭证(如用户名/密码)。
-
服务端生成 JWT:验证成功后返回签名的 Token。
-
客户端存储:通常存储在 Cookie 或 LocalStorage。
-
后续请求:客户端携带 Token,服务端验证签名和有效期。
二、JWT 漏洞场景深度剖析
1. 敏感信息泄露
-
漏洞原理
JWT 的 Payload 仅通过 Base64 编码,未加密。若开发者将敏感数据(如密码、密钥、手机号)存入 Payload,攻击者可轻易解码获取信息。 -
实际案例
某电商平台将用户地址和手机号明文存入 JWT,攻击者通过解码 Token 获取用户隐私数据。 -
代码示例(错误 vs 正确)
# 错误:明文存储手机号 payload = {"user": "admin", "phone": "13800138000"} # 正确:仅存储必要标识 payload = {"user_id": "a3f8b", "role": "user"} # 使用无意义 UUID 替代敏感字段
-
利用方式
使用浏览器开发者工具或在线解码工具(如 jwt.io)直接读取 Payload:echo "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwaG9uZSI6IjEzODAwMTM4MDAwIn0" | base64 -d # 输出:{"phone":"13800138000"}
-
防御方案
-
最小化 Payload 内容,避免存储敏感数据。
-
对必要敏感字段加密(如 AES)后再存入 Payload。
-
2. 接受任意签名(alg: none
攻击)
-
漏洞原理
当服务端未强制校验签名算法时,攻击者可篡改 Header 的alg
为none
,绕过签名验证。 -
攻击步骤
-
截获合法 Token:
header.payload.signature
-
修改 Header 为
{"alg": "none", "typ": "JWT"}
-
删除 Signature,构造新 Token:
malicious_header.payload.
-
发送给服务端,若验证通过则攻击成功。
-
-
代码示例(服务端漏洞代码)
# 错误:未限制算法类型 def decode_token(token): return jwt.decode(token, key="secret", algorithms=None) # 允许所有算法
-
利用工具
使用 Burp Suite 的 Repeater模块修改请求头,或手动生成 Token:import base64 header = base64.urlsafe_b64encode(b'{"alg":"none","typ":"JWT"}').decode().strip("=") payload = base64.urlsafe_b64encode(b'{"user":"admin"}').decode().strip("=") fake_token = f"{header}.{payload}."
-
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)