JWT | JWT 漏洞介绍

news2024/11/18 13:28:38

关注这个漏洞的其他相关笔记:JWT 漏洞 - 学习手册-CSDN博客

0x01:JWT 漏洞介绍

JWT(Json Web Token)是用于在网络应用环境间传递声明的一种基于 JSON 的开放标准。它通过使用 JSON 对象进行安全的信息传输,可以用于身份验证和信息交换,是目前最流行的跨域认证解决方案。

如果你不了解 JWT,可以先看看这篇文章:JWT 详解

尽管 JWT 是一种旨在确保信息交换安全性的技术,但是如果使用不当,它同样可能带来安全风险。

从安全性的角度来看,JWT 至少存在两个潜在的问题:

  1. 缺乏机密性:JWT 的 Header 和 Payload 部分只是采用了 Base64URL 编码,攻击者可以很轻松的获取明文数据。

  2. 密钥安全性: JWT 的安全性取决于签名采用的密钥是否安全,倘若密钥通过某种方式泄露了,那 JWT 的安全也就无从说起了。

下面笔者通过两个案例,来演示 JWT 存在的一些问题。注意,本文只是引入 JWT 漏洞的概念,JWT 具体的漏洞挖掘思路(碰到 JWT 验证可以测试的点有哪些),笔者会在后面单独出一个模块讲解。

0x0101:JWT 漏洞 - 信息泄露

实验环境准备

  • JWT 信息泄露 - 在线靶场:Leaky JWT (digi.ninja)

本次的实验环境,我们采用一个在线的靶场 Authentication Lab,该靶场是由 DigiNinja 提供的,专注于身份验证和未授权漏洞的一个实验平台。

访问上面提供的链接,进入靶场。可以看到,靶场给了我们一个 JWT 的数据,还有一个登录框,我们需要通过这个 JWT 认证信息解密出用户名和密码,来完成登录:

b82d51c5d9bb4119b5ed924ec1b44cce.jpeg

复制上面 JWT 的内容去 JWT 官网(http://jwt.io)进行解密:

a9a9cc4c44fd4f4486dd0ce323ff5faf.png

我们成功获取了明文的用户名,但是密码似乎经过了加密,一眼定真为 MD5 加密。接下来,我们去 md5在线解密破解 进行 MD5 解密:

a083b0455cda4945927fd2130d0886f9.jpeg

解密得到 Password 为 Password1,现在我们成功获得了用户的用户名与密码: joe:Password1,使用该用户名与密码去靶场登录,成功过关:

0c6c01b7719e4ef4a189843c54c65d4d.jpeg

至此,JWT 的信息泄露漏洞已经演示完毕,可以看到,倘若攻击者通过某种渠道获取了用户的 JWT 信息,可以很轻松的解密出其中内容,并伪造用户的身份。

当然,这一切的前置原因,都是因为开发者将用户的敏感信息存放在了 JWT 的 Payload 中,是开发者对 JWT 的信任,导致了此次漏洞。

0x0102:JWT 漏洞 - 密钥泄露

实验环境准备

  • JWT 密钥泄露 - 在线靶场:Cracking JWT Keys (digi.ninja)

  • JWT 密钥破解工具 - 本地资源:CrackingJWTKeys.py

本次的实验,我们采用 Authentication Lab 中的 Craking JWT Keys。该关卡的考点是,爆破 JWT 密钥。

访问上面提供的链接,进入靶场。因为是演示,所以难度就调整为 Easy 了:

eb1e8c373116481fac07f5969e5a9e6d.jpeg

JWT 的安全性取决于最后的签名部分,倘若攻击者通过某种手段获取了签名的密钥,那么攻击者自己就可以伪造签名。

这里笔者使用自己开发的 JWT 破解工具,输入刚刚获取的 JWT 内容,然后导入字典,开始破解:

4395fd5b5dfc4712a6d26be885227649.jpeg

可以看到,成功破解,破解出来的签名密钥是 hello,我们使用该密钥去 JWT 官网进行验证:

3481913655cb48a28366737b3b648e45.png

从 JWT 官网的解析来看,我们当前用户名为 jasper,用户的权限等级是 user,但是我们现在已经有签名的密钥了,我们直接自己修改 JWT 认证信息,把权限改为 admin,用户名改为 Blue17

72f21af2b43c49218d76fcb2c744f797.jpeg

将我们篡改后的 JWT 认证信息发送给服务端,可以看到,服务端依旧接收并认可了我们的权限。

至此,JWT 密钥泄露漏洞演示完毕。产生此漏洞的原因,是由于使用者使用了过于简单的密钥,让攻击者可以通过暴力破解的手段获取签名密钥,从而导致攻击者可以伪造任意用户的身份信息以及等级权限。

另外,还要提的一点是,JWT 的 Payload 中不应该存放敏感信息以及与权限等级相关的内容,原因还是如上面一样,JWT 的 Payload 只是使用了 Base64URL 编码,而不是加密,获取了 JWT 认证信息的攻击者,可以很轻易的恢复 Payload 中的明文数据。

0x02:JWT 漏洞详解

0x0201:JWT 漏洞产生的原因

JWT 漏洞产生的主要原因是因为开发者在实现 JWT 认证机制时没有充分考虑到信息的安全性和对密钥的保护,导致攻击者可以轻易地获取和篡改 JWT 的明文数据,或者通过泄露的密钥伪造有效的 JWT,从而在用户不知情的情况下以用户的名义完成一些恶意操作,如访问敏感数据、执行未授权的操作等。

0x03:参考资料

  • JSON Web Token 入门教程 - 阮一峰的网络日志

  • 什么是 JWT?深入理解 JWT 从原理到应用(上)-阿里云开发者社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2184199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT实时语音将于本周向免费用户推出:OpenAI DevDay 2024详细解读

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

激活函数ReLU,Sigmoid,tanh,softmax性质讲解及使用matplotlib绘制

Sigmoid及tanh sigmoid及tanh的函数图像较为相似,它们的公式如下 Sigmoid公式 tanh公式 Sigmoid及tanh性质解析 Sigmoid和tanh作为激活函数都可以有效完成非线性映射的功效,其中Sigmoid经常作为2分类的神经网络的输出层的激活函数,由于其非线性映射会将输出值转换到0-1的区间…

心觉:潜意识开发为何失败?99%的人卡在理性与感性学习的误区

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作187/1000天 小时候看武侠剧的时候,经常看到剧中有武林高手把绝世武功传给某个涉世未深的铁憨憨主角,比如《天…

四、Drf认证组件

四、Drf认证组件 4.1 快速使用 from django.shortcuts import render,HttpResponse from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.authentication import BaseAuthentication from rest_framework.exception…

win11 升级报 0x80073713 错误

安装错误 - 0x80073713 通常是由于系统文件损坏或 Windows Update 组件异常引起的。‌ 这个问题可能阻止您的系统正常接收和安装更新,影响系统的稳定性和安全性。 可以尝试如下如下方法: 首先,您可以尝试使用命令提示符运行系统文件检查器…

资源《Arduino 扩展板2-矩阵按钮 》说明。

资源链接: Arduino 扩展板2-矩阵按钮 1.文件明细 2.文件内容说明 包含:AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程,采用AD做的。 该文件打板后配合Arduino使用,属于Arduino的扩展板。 该文件主要有16个按钮…

wgan的实现的伪代码,和原理,dcgan,模型坍塌 em距离 js kl散

原文地址 https://blog.csdn.net/Keep_Trying_Go/article/details/130471766 伪代码详细看这个, 特别注意点:gan(xnosize) 生成器 是 输入噪声 ,而不是全部噪声生成的 特别注意点:gan(xnosize) 生成器 是 输入噪声 &#…

vue3使用Teleport 控制台报警告:Invalid Teleport target on mount: null (object)

Failed to locate Teleport target with selector “.demon”. Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree main.…

基于SSM+小程序的选课管理系统2(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 教师的账号和密码可以注册,管理员的账号和密码可由系统开发者在数据库中设置,学生的账号和密码可以由注册获得。 1、管理员的主要功能为学生资料、教师资料的添…

如何升级OCAT

如何升级OCAT 一. 从官网下载OCAT 官网下载地址链接:https://github.com/ic005k/OCAuxiliaryTools/releases 目前下载下来版本为0.8.8,但RapidEFI显示最新版本已经为1.0.1。 为了防止OC版本过低导致进不了系统,需要对OCAT进行升级。![在这里…

.NET 一款支持冰蝎的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

探索 PixiJS:强大的 2D 图形渲染库

探索 PixiJS:强大的 2D 图形渲染库 演示地址 演示地址 源码地址 源码地址 获取更多 获取更多 随着 Web 技术的发展,越来越多的开发者希望在网页中实现丰富的视觉效果和动画。PixiJS 作为一个高性能的 2D 渲染库,凭借其强大的功能和易用性…

《NoSQL》非关系型数据库MongoDB 学习笔记!

Mongo基础: 使用数据库: 使用use 命令 后面跟着要使用的数据库名字即可, 例如:use cities, 值得注意的是, mongo中不像mysql, 还需要先创建数据库,后访问, mongo中,你无…

媒介坊:在数字化时代,企业如何在竞争激烈的市场中脱颖而出

在当今的数字化时代,企业如何在竞争激烈的市场中脱颖而出,成为消费者关注的焦点?软文投放作为一种高效的营销手段,正受到越来越多企业的青睐。而媒介坊,作为一站式软文投放平台,正是帮助企业实现这一目标的…

Android Camera2 与 Camera API技术探究和RAW数据采集

Android Camera2 Android Camera2 是 Android 系统中用于相机操作的一套高级应用程序接口(API),它取代了之前的 Camera API。以下是关于 Android Camera2 的一些主要信息: 主要特点: 强大的控制能力:提供…

JavaWeb——Vue组件库Element(4/6):案例:基本页面布局(基本框架、页面布局、CSS样式、完善布局、效果展示,含完整代码)

目录 步骤 基本页面布局 基本框架 页面布局 CSS样式 完善布局 效果展示 完整代码 Element 的基本使用方式以及常见的组件已经了解完了,接下来要完成一个案例,通过这个案例让大家知道如何基于 Element 中的各个组件制作一个完整的页面。 案例&am…

Labview helper

IMAQ Advanced Setup Learn Geometric Pattern 2 VI 参数说明Curve Extraction Mode (0)指定VI如何识别图像中的曲线。如果您希望VI不对图像中对象的均匀性或图像背景做出任何假设,请将此选项设置为正常。如果您希望VI假定图像中的对象或图像背景由均匀的像素值组成…

PCL 最远点采样(FPS)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 可视化函数 2.1.2 最远点采样 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新&#xff0…

事务原理,以及MVCC如何实现RC,RR隔离级别的

事务原理 redo log 保持持久性: 首先原来的情况是我们做一组操作的时候,先去操作bufferpool缓冲区,如果没有,那么后台线程将数据页换入换出到缓冲区,然后我们对这个buffer pool进行修改,为脏页&#xff0c…

Redis篇(Redis原理 - 数据结构)(持续更新迭代)

目录 一、动态字符串 二、intset 三、Dict 1. 简介 2. Dict的扩容 3. Dict的rehash 4. 知识小结 四、ZipList 1. 简介 2. ZipListEntry 3. Encoding编码 五、ZipList的连锁更新问题 六、QuickList 七、SkipList 八、RedisObject 1. 什么是 redisObject 2. Redi…