【安全笔记】Web安全之- JWT

admin 2024年5月19日01:00:18评论5 views字数 1153阅读3分50秒阅读模式
欢迎关注公众号,更多内容喔~

JWT是什么

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

在哪些场景使用

Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。

Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web Tokens无疑是一种很好的方式。因为JWT可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。

如何工作

服务器创建了一个json web token,它进行了编码,使用自己的key对其签名。如果您进行篡改,则它知道已无效。服务器上没有任何JWT的信息,而是将它发送给了浏览器。但是key本身保存于服务器中,确保密钥安全性。

浏览器可以选择存储它,比如使用cookie来存储。不管已什么方式,最终浏览器会发送含有jwt内容的请求给服务器,确保服务器知道用户正在使用什么进行授权。

jwt由三个部分组成:header.payload.signature

【安全笔记】Web安全之- JWT

安全问题

  • 修改header部分加密算法值为none,可能会绕过校验

空加密算法的设计初衷是用于调试的,如果开发人员失误在生产环境中开启了空加密算法,就会有问题

  • 修改RSA加密算法为HMAC

是个漏洞,本来使用RSA算法进行的校验,但是我们在header中改为HMAC,我们使用获取到的钥**pub(有办法获取)作为算法的密钥,对token进行签名,发送到服务器端,服务器端会将RSA的公钥(pub**)视为当前算法(HMAC)的密钥,使用HS256算法对接收到的签名进行验证。

  • 爆破密钥

条件:

  • 知悉JWT使用的加密算法

  • 一段有效的、已签名的token

  • 签名用的密钥不复杂(弱密钥)

c-jwt-cracker

  • KID参数问题

kid是jwt header中的一个可选参数,全称是key ID,它用于指定加密算法的密钥,因为该参数可以由用户输入,所以也可能造成一些安全问题。

  • 任意文件读取kid参数用于读取密钥文件,但系统并不会知道用户想要读取的到底是不是密钥文件

  • SQL注入kid也可以从数据库中提取数据,这时候就有可能造成SQL注入攻击

  • 命令注入kid参数过滤不严也可能会出现命令注入问题,但是利用条件比较苛刻。

来玩

欢迎进群吹水交流~~~、

【安全笔记】Web安全之- JWT

原文始发于微信公众号(赛博之眼CyberEye):【安全笔记】Web安全之- JWT

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月19日01:00:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【安全笔记】Web安全之- JWThttps://cn-sec.com/archives/2039433.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息