【网络安全】JWT安全漏洞

什么是JWT

Json Web Token(JWT)
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在两个组织之间传递安全可靠的信息。
在这里插入图片描述
JWT是一个有着简单的统一表达形式的字符串:

在这里插入图片描述
头部(Header)
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。 JSON内容要经Base64 编码生成字符串成为Header。

载荷(PayLoad)
payload的五个字段都是由JWT的标准所定义的。

  1. iss: 该JWT的签发者
  2. sub: 该JWT所面向的用户
  3. aud: 接收该JWT的一方
  4. exp(expires): 什么时候过期,这里是一个Unix时间戳
  5. iat(issued at): 在什么时候签发的
    后面的信息可以按需补充。 JSON内容要经Base64 编码生成字符串成为PayLoad。

签名(signature)
这个部分header与payload通过header中声明的加密方式,使用密钥secret进行加密,生成签名。 JWS的主要目的是保证了数据在传输过程中不被修改,验证数据的完整性。但由于仅采用Base64对消息内容编码,因此不保证数据的不可泄露性。所以不适合用于传输敏感数据。

在这里插入图片描述

JWT验证流程

首先,前端通过web表单将自己的用户名和密码发送到后端的接口。这一过程一般是一个HTTP POST请求。建议的方式是通过SSL加密的传输(https协议),从而避免敏感信息被嗅探。

后端核对用户名和密码成功后,形成一个JWT Token。

后端将JWT字符串作为登录成功的结果返回给前端。前端可以将返回的结果保存在localStorage或sessionStorage中,退出登录时前端删除保存的JWT即可。

前端在每次请求时将JWT放入HTTP Header中的Authorization字段。

后端校验前端传来的JWT的有效性。

验证通过后,后端使用JWT中包含的用户信息进行其他逻辑操作,返回相应结果。
————————————————
版权声明:本文为CSDN博主「kali_Ma」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kali_Ma/article/details/121609999

漏洞介绍

我们可以通过伪造jwt的方式来伪装以达成认证通过的目的,从而进一步入侵服务器

方法一:伪造JWT
  1. 把头部加密方式修改为空
    在这里插入图片描述
  2. 舍弃签名部分,与载荷进行拼接形成新的jwt(无加密方式所以不会生成签名)
    在这里插入图片描述
  3. 去除=号

因为http传输过程中,base64编码中“=”。“+”,“/”等特殊符号通过url解码通常容易产生歧义,因此产生了与url兼容的base64 url编码

拼接完成后得到:
eyJhbGciOiIifQ.ewocc3ViHRocMTIzNDU2Nzg5MB0MChxuYW1lHToiSm9obiBEb2UiLAoiaWF0IjoxNTE2MjM5MDIyCn0.

tips:需要用.隔开

方法二:爆破密钥

通过脚本对密钥进行爆破从而构造新的jwt达成伪造目的

爆破代码

脚本暂时未找到,待补充
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值