JWT漏洞

JWT介绍

1.1 JWT概念

JSON Web Token(JWT) 是一个开放标准。它定义了一种紧凑而独立的方法,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用secret(HMAC算法)或使用“RSA或ECDSA的公用/私有key pair密钥对”对JWT进行签名。

简单来说,JWT类似于身份令牌,只要JWT校验通过,即可验证身份。

1.2 JWT结构

在这里插入图片描述
JWT分为三部分,头部(Header),声明(Claims),签名(Signature),三个部分以英文句号.隔开。JWT的内容以Base64URL进行了编码。
在这里插入图片描述

  1. header 头部:指明签名时使用的算法参数,token类型。上面为HS256加密,JWT类型。
  2. pyaload 数据 也叫声明:表明该JWT字符串内携带了哪些进行
  3. signature 签名:给上面的头部和数据进行签名,其实就是加密,保证上面数据没有被篡改、没有被替换。服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用此密码进行加密,生成的字符串就是JWT的签名。注意:签名本质就是加密,该字段会对头部和payload进行加密。上面加密过程为:HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload),secret)

总结

JWT其实就是对传输数据套了一层加密,保证数据没有被篡改和替换。没有密钥的情况下,直接修改数据时无效的,无法通过数据校验。
JWT其实是明文传输。JWT对传输的header、payload数据其实就是Base64加密,可直接解密。仅是加了签名字段,校验数据是否被更改,所以JWT一般不传输敏感数据。同时程序员没注意也存在敏感信息泄露。

2.漏洞利用

2.1思路

上述知道,JWT一般用于身份验证,但其实JWT的header和payload字段仅为base64编码,相当于明文。那如果后台验证时,并没检查签名字段,那可直接修改payload字段信息。
如果后台确实进行签名校验,但其实签名生成是通过header头中的加密算法和一段密文。如果知道密文,则可直接修改JWT数据。
如果不知道密文,那后端校验时存在2中情况:1. 后台提取header中的alg字段数据,再使用对应算法进行校验。2. 后台不提取header中的alg数据,直接默认使用指定的加密算法进行校验。
其实从代码逻辑中考虑,应该使用1的情况。这是就存在漏洞,header中的alg字段可设置为none,表明不使用加密算法,此时签名就为空。而header数据和payload数据直接base64加密即可。如果是2情况,那只有暴力破解密文,由于签名算法是已知的,加密数据除了secret之外也是已知的,只需要有密文字典,进行爆破即可。
注意:base6 4后其实还要适应URL,将base64的等号= 删掉即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值