当前位置:   article > 正文

每天搞懂一个小漏洞——jwt_jwt越权

jwt越权

每天搞懂一个小漏洞——jwt

jwt漏洞成因:用户成功登录后,服务端会返回一段加密后的数据用于替代cookie的作用,当下一次打开此登录页面时候,客户端会将这一段数据自动发送给服务器端,服务器端根据收到的这一段数据,返回不同的页面,基本功能与cookie类似

jwt和cookie都是成功登录后服务器端返回客户端的一段数据, 下次登录时避免重新输入账号密码之类,提高用户体验
cookie本身不具有危害性,但是通过其他手段xss等获取到对方相关网站的cookie后,即可实现免密码登录,
jwt由于加密的特殊性可能会造成越权登录,越权修改等危害
jwt语句很好辨认,主要有三部分组成,前两部分由base64加密,最后一段为key加密(可以理解为md5加盐加密),中间使用点.截断,并且前两位字符为ew({),一般存在于请求包(返回包)中的cookie属性值中
主要利用方面:当获得系统的一个低权限之后,使用此漏洞可以实现越权登录,相当于web层面的提权
由于jwt使用的加密方式的不同,无论是alg:None属性值修改还是爆破HS256加密方式,特殊构造的字典加上一点点运气才能成功利用
以jwt.io网站显示为例

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • 1

以点.截断显示的三段内容为

{
  "alg": "HS256",
  "typ": "JWT"
}
  • 1
  • 2
  • 3
  • 4

显示了加密方式和类型

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
  • 1
  • 2
  • 3
  • 4
  • 5

数据传输的内容

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  
) 
  • 1
  • 2
  • 3
  • 4
  • 5

加盐组合加密

JWT支持将算法设定为“None”。如果“alg”字段设为“ None”,那么签名会被置空,这样任何token都是有效的。

也就是说 上述的数据传输可以转变为ewogICJhbGciOiAiTm9uZSIsCiAgInR5cCI6ICJKV1QiCn0.ewogICJzdWIiOiAiMTIzNDU2Nzg5MCIsCiAgIm5hbWUiOiAiSm9obiBEb2UiLAogICJpYXQiOiAxNTE2MjM5MDIyCn0.其中base64加密后会有个等于号=,需要去掉等于号=变换成.点
在这里插入图片描述

这种方式不需要理会加密方式,无论是HS256还是HS512 都可以使用这个方式,然后更改传输的数据看是否能够改变相应的页面达到越权的目的
还有一种方式就是爆破出来相应的key,然后修改数据包中的内容,可以使用hashcat或者使用c-jwt-cracker进行爆破
然后在下图中的位置输入相应的key修改数据包,但是仅限于HS256对称加密,简单的说就是服务端和客户端采用同一个key加密
在这里插入图片描述

欢迎各位大佬指正

参考链接:
https://www.freebuf.com/vuls/219056.html
https://www.cnblogs.com/xiaozi/p/12031111.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/1005684
推荐阅读
相关标签
  

闽ICP备14008679号