浅谈JWT越权原理与利用

admin 2023年2月14日00:20:17评论320 views字数 2390阅读7分58秒阅读模式

1.什么是JWT

JWT=JSON+WEB+TOKEN,它并不是一个具体的技术实现,而更像是一种标准。

JWT规定了数据传输的结构,一串完整的JWT由三段落组成,每个段落用英文句号连接(.)连接;

他们分别是:Header、Payload、Signature,所以,常规的JWT内容格式是这样的:AAA.BBB.CCC,并且,这一串内容会base64加密;也就是说base64解码就可以看到实际传输的内容。

解码网站: https://jwt.io/

2.JWT结构组成

JWT由三部分组成,header(头部)、payload(荷载)、signature(签证)。

浅谈JWT越权原理与利用

2.1 header

记录了整个令牌的类型和签名算法,格式为json,如下:

{  "alg":"HS256",  "typ":"JWT"}

2.2 payload

部分是jwt的主体信息,它仍然是一个JSON对象,它可以包含以下内容:

{  "ss""发行者",  "iat""发布时间",  "exp""到期时间",  "sub""主题",  "aud""听众",  "nbf""在此之前不可用",  "jti""JWT ID"}

2.3 signature

这一部分是jwt的签名,正是它的存在,保证了整个jwt不被篡改

这部分的生成,是对前面两个部分的编码结果,按照头部指定的方式进行加密

3.使用JWT的会话流程

浅谈JWT越权原理与利用

1、用户端登录,用户名和密码在请求中被发往服务器
2、(确认登录信息正确后)服务器生成JSON头部和声明,将登录信息写入JSON的声明中(通常不应写入密码,因为JWT是不加密的),并用secret用指定算法进行加密,生成该用户的JWT。此时,服务器并没有保存登录状态信息。
3、服务器将JWT(通过响应)返回给客户端
4、用户下次会话时,客户端会自动将JWT写在HTTP请求头部的Authorization字段中
5、服务器对JWT进行验证,若验证成功,则确认此用户的登录状态
6、服务器返回响应

4.JWT安全性问题

1.修改算法为none2.修改算法从RS256HS2563.信息泄漏 密钥泄漏4.爆破密钥

5.存在的漏洞

CVE-2015-9235 Alg:无攻击
CVE-2016-5431 密钥混淆攻击
CVE-2018-0114 密钥注入攻击 其他已知攻击
JWKS 欺骗
“kid” 注射
跨服务中继攻击
弱密钥

6.环境搭建

这里使用一个国外的Java靶场,WebGoat是由OWASP(Open Web Application Security Project)负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的Bug,而是故意设计用来讲授Web应用程序安全课程的。

WebGaot:https://github.com/WebGoat/WebGoat/releases/tag/v8.2.2

由于WebToken需要jdk17来启动,有些小伙伴可能不想去再安装一个Java,我们可以去Oracle官网下载JDK17。

https://www.oracle.com/java/technologies/downloads/#jdk17-windows

浅谈JWT越权原理与利用

将WebGoat放到bin文件下,使用./java -jar webgoat-server-8.2.2.jar来启动

浅谈JWT越权原理与利用

浅谈JWT越权原理与利用

7.题目复现

一、JWTtokes第三题

我们直接将代码复制到我上面说的网站解码,就看到用户。

浅谈JWT越权原理与利用

直接user提交即可。

浅谈JWT越权原理与利用

二、JWTtokes第五题

任务:尝试更改您收到的令牌并通过更改令牌成为管理员用户,一旦您成为管理员重置投票 。

我们将用户切换为Tom

浅谈JWT越权原理与利用

点击重置进行抓包

浅谈JWT越权原理与利用

抓包发送,显示只有admin才有重置权限。

浅谈JWT越权原理与利用

我们队token进行解码,将admin后边的false改为true,将签名算法HS512改为none,因为签名算法为空,我们可以直接舍弃第三部分签名。

浅谈JWT越权原理与利用

我们base64加密,构造新的JWT

浅谈JWT越权原理与利用

浅谈JWT越权原理与利用

ew0KICAiYWxnIjogIm5vbmUiDQp9.ew0KICAiaWF0IjogMTY3Njc5NDYzMiwNCiAgImFkbWluIjogInRydWUiLA0KICAidXNlciI6ICJUb20iDQp9.

成功重置

浅谈JWT越权原理与利用

浅谈JWT越权原理与利用

三、JWTtokes第十题

浅谈JWT越权原理与利用

这道题目需要冒充tom来支付,我们点击checkout来抓包,进行重放。

浅谈JWT越权原理与利用

提示我们Not a valid JWT token, please try again,在127.0.0.1:8080/WebGoat/images/logs.txt,发现一个过期的token。

浅谈JWT越权原理与利用

浅谈JWT越权原理与利用

我们继续去解码一下,看看有没有用到的信息。

浅谈JWT越权原理与利用

虽然我们不知道密钥,但是可以通过直接把算法改成None,去掉密钥。

再修改一下exp(token过期时间,单位毫秒),把光标放在exp或iat的值上会自动显示时间。

我们去生成一个新的时间戳(要比当前时间晚),因为签名算法为空,我们可以直接舍弃第三部分签名。

浅谈JWT越权原理与利用

eyJhbGciOiJOb25lIn0.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTY3NjAxNDQxMywiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ.

我们添加为Authorization字段的值

浅谈JWT越权原理与利用

成功!!!

借鉴:

https://blog.csdn.net/weixin_44736637/article/details/124005231https://www.jianshu.com/p/576dbf44b2aehttps://blog.csdn.net/qq_45557476/article/details/123171281https://blog.csdn.net/XenonL/article/details/104645445
觉得可以的话,麻烦转发+关注走一波

不然.......别怪我

浅谈JWT越权原理与利用

原文始发于微信公众号(白虎实验室):浅谈JWT越权原理与利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月14日00:20:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   浅谈JWT越权原理与利用https://cn-sec.com/archives/1552433.html

发表评论

匿名网友 填写信息