当前位置: 首页 > news >正文

【网络安全 | 密码学】JWT基础知识及攻击方式详析

前言

JWT(Json Web Token)是一种用于在网络应用之间安全地传输信息的开放标准。它通过将用户信息以JSON格式加密并封装在一个token中,然后将该token发送给服务端进行验证,从而实现身份验证和授权。

流程

JWT的加密和解密过程如下:

1、 生成JWT Token
客户端登录成功后,服务器使用用户的信息(如用户ID、用户名等)以及服务器端的密钥,通过特定的加密算法(如HMACSHA256、RSA等)生成JWT Token。

2、发送JWT Token
客户端将生成的JWT Token发送给服务器,通常是通过HTTP请求的头部Authorization字段或者其他方式发送。

3、服务器验证JWT Token
服务器收到JWT Token后,首先会对Token进行解析,检查Token的格式是否正确,并获取到头部和载荷部分的内容。

然后,服务器使用存储在服务器端的密钥和相同的加密算法,对头部和载荷进行签名验证,以确认Token的真实性和完整性。

4、响应处理
如果JWT Token验证成功,服务器可以根据用户的请求执行相应的操作,并向客户端返回相应的响应。

如果JWT Token验证失败,则服务器通常会返回相应的错误信息或拒绝服务。

认证区别

这里以传统Token验证方式与JWT验证方式做区分。

在传统Token方式中,用户登录成功后,服务端生成一个随机Token并分配给用户,同时在服务端(如数据库或缓存)保存一份Token记录。随后,用户在后续的请求中需携带该Token。服务端在接收到Token后,会进行数据库或缓存的查询,以验证Token的有效性和合法性,包括检查Token是否超时或被篡改。

在JWT方式中,用户登录成功后,服务端使用JWT生成一个随机Token,并将其发送给用户,服务端无需在数据库或缓存中保存Token记录。用户在后续的请求中需要携带该Token。服务端在接收到Token后,通过JWT对Token进行验证。

这两种方式的本质区别在于Token的验证和存储方式。

JWT组成

JWT包含三个部分:头部(Header)、载荷(Payload)和签名(Signature)。

1、头部(Header):头部包含了两部分信息,分别是令牌的类型(typ)和所使用的加密算法(alg),它们由json格式经base64url编码得到。(base64url编码:base64编码后,用 - 替代 +,用 _ 替代/)

例如:

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

加密得到:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

该字符串成为了Header部分

2、载荷(Payload):载荷包含了要传输的用户信息,如用户ID、用户名等。此外,也可以包含其他自定义的信息。载荷的内容是经过base64url编码的,能够被解码。

例如:

{"name": "ice","phone": 123456789,"address": "ice.home" 
}

编码得到:

eyJuYW1lIjoiaWNlIiwicGhvbmUiOjEyMzQ1Njc4OSwiYWRkcmVzcyI6ImljZS5ob21lIn0

该字符串成为了Payload部分

3、签名(Signature):签名用于验证token的真实性和完整性。签名是由头部、载荷以及密钥结合特定的加密算法生成的。

加密算法例如:

HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),ice
) 

本例中,对Header.Payload进行HS256加密(密钥为ice)后,再进行base64url加密,从而得到签名。

GJd4DLWt-IWWhE4ELHUXiLJjJG5C_HcvTY87c2s74Z0

最后将三段字符串通过.拼接起来就生成了JWT的token:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiaWNlIiwicGhvbmUiOjEyMzQ1Njc4OSwiYWRkcmVzcyI6ImljZS5ob21lIn0.GJd4DLWt-IWWhE4ELHUXiLJjJG5C_HcvTY87c2s74Z0

https://jwt.io/可用于编码、解码和验证JSON Web Tokens(JWT):

在这里插入图片描述

JWT攻击方式

1、修改加密算法伪造token

JWT中最常用的两种算法为HMAC和RSA。

HMAC是一种对称加密算法,使用相同的密钥对传输信息进行加解密。
RSA是一种非对称加密算法,使用私钥加密明文,公钥解密密文。

若存在一场景:某应用程序在JWT传输过程中使用RSA算法,同时使用密钥ice对JWT token进行签名,公钥abc对签名进行验证。

{"alg" : "RS256","typ" : "jwt"
}

通常情况下密钥ice是无法获取到的,但是公钥abc却可以通过某些途径得到,此时将JWT的加密算法修改为HMAC,同时使用获取到的公钥abc作为算法的密钥,对token进行签名,发送到服务器端:

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

服务器端会将RSA的公钥(abc)视为当前算法(HMAC)的密钥,而HMAC是对称加密算法,故服务器使用密钥abc对接收到的签名进行验证,从而造成token伪造问题。

2、None算法攻击绕过验证

在Header中指定alg为None,同时不添加signature,服务器在验证JWT时会认为这个JWT是不需要签名的,从而跳过了对签名的验证,直接信任JWT中的信息,实现伪造身份绕过服务器验证。

HEADER:

{"alg" : "None","typ" : "jwt"
}

Payload:

{"username" : "Admin"
}

生成的完整token为

ew0KCSJhbGciIDogIk5vbmUiLA0KCSJ0eXAiIDogImp3dCINCn0.ew0KCSJ1c2VyIiA6ICJBZG1pbiINCn0

3、KID参数

“kid” 是 JWT 头部中的一个可选参数,全称为 “Key ID”,它用于指定加密算法所使用的密钥。

例如:

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

{"alg": "HS256","typ": "JWT","kid": "/home/jwt/.ssh/pem"
}

由于该参数可控,将导致以下漏洞。

3.1任意文件读取

系统并不会验证kid参数路径指向的文件是否是有效的密钥文件。因此,在没有对参数进行过滤或验证的情况下,可造成任意文件读取。

例如:

{"alg" : "HS256","typ" : "jwt","kid" : "../../etc/passwd"
}
3.2SQL注入

"kid"参数也可能从数据库中提取数据,故存在SQL注入攻击的风险。

例如:

{"alg" : "HS256","typ" : "jwt","kid" : "ice' || union select 'users' -- "
}
3.3命令注入

若服务器后端使用的是Ruby,在读取密钥文件时使用了open函数,通过构造参数可能实现命令注入。

例如:

{"alg" : "HS256","typ" : "jwt","kid" : "/path/to/key_file|whoami"
}

其它语言可进行思路延申。

4、信息泄露

JWT确保的是数据传输过程中的完整性和真实性,而不是机密性。由于payload是使用Base64url编码的,相当于明文传输。因此,如果在payload中携带了敏感信息(例如存放密钥对的文件路径),那么仅对payload部分进行Base64url解码就可以读取其中携带的信息。

相关文章:

【网络安全 | 密码学】JWT基础知识及攻击方式详析

前言 JWT(Json Web Token)是一种用于在网络应用之间安全地传输信息的开放标准。它通过将用户信息以JSON格式加密并封装在一个token中,然后将该token发送给服务端进行验证,从而实现身份验证和授权。 流程 JWT的加密和解密过程如…...

Chrome修改主题颜色

注意:自定义Chrome按钮只在搜索引擎为Google的时候出现。...

大数据:【学习笔记系列】Flink基础架构

Apache Flink 是一个开源的流处理框架,用于处理有界和无界的数据流。Flink 设计用于运行在所有常见的集群环境中,并且能够以高性能和可扩展的方式进行实时数据处理和分析。下面将详细介绍 Flink 的基础架构组件和其工作原理。 1. Flink 架构概览 Flink…...

Debezium系列之:部署Debezium采集Oracle数据库的详细步骤

Debezium系列之:部署Debezium采集Oracle数据库的详细步骤 一、部署Debezium Oracle连接器二、Debezium Oracle 连接器配置三、添加连接器配置四、可插拔数据库与不可插拔数据库一、部署Debezium Oracle连接器 部署的详细步骤可以参考博主这篇技术文章: Debezium系列之:安装…...

C语言通过键盘输入给结构体内嵌的结构体赋值——指针法

1 需求 以录入学生信息&#xff08;姓名、学号、性别、出生日期&#xff09;为例&#xff0c;首先通过键盘输入需要录入的学生的数量&#xff0c;再依次输入这些学生的信息&#xff0c;输入完成后输出所有信息。 2 代码 #include<stdio.h> #include<stdlib.h>//…...

AWS Key disabler:AWS IAM用户访问密钥安全保护工具

关于AWS Key disabler AWS Key disabler是一款功能强大的AWS IAM用户访问密钥安全保护工具&#xff0c;该工具可以通过设置一个时间定量来禁用AWS IAM用户访问密钥&#xff0c;以此来降低旧访问密钥所带来的安全风险。 工具运行流程 AWS Key disabler本质上是一个Lambda函数&…...

【第1节】书生·浦语大模型全链路开源开放体系

目录 1 简介2 内容&#xff08;1&#xff09;书生浦语大模型发展历程&#xff08;2&#xff09;体系&#xff08;3&#xff09;亮点&#xff08;4&#xff09;全链路体系构建a.数据b 预训练c 微调d 评测e.模型部署f.agent 智能体 3 相关论文解读4 ref 1 简介 书生浦语 InternLM…...

代码随想录-链表 | 707设计链表

代码随想录-数组 | 707设计链表 LeetCode 707-设计链表解题思路代码复杂度难点总结 LeetCode 707-设计链表 题目链接 题目描述 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点…...

AIGC算法1:Layer normalization

1. Layer Normalization μ E ( X ) ← 1 H ∑ i 1 n x i σ ← Var ⁡ ( x ) 1 H ∑ i 1 H ( x i − μ ) 2 ϵ y x − E ( x ) Var ⁡ ( X ) ϵ ⋅ γ β \begin{gathered}\muE(X) \leftarrow \frac{1}{H} \sum_{i1}^n x_i \\ \sigma \leftarrow \operatorname{Var}(…...

【C语言】——字符串函数的使用与模拟实现(下)

【C语言】——字符串函数的使用与模拟实现&#xff08;下&#xff09; 前言五、长度受限类字符串函数5.1、 s t r n c p y strncpy strncpy 函数5.2、 s t r n c a t strncat strncat 函数5.3、 s t r n c m p strncmp strncmp 函数 六、 s t r s t r strstr strstr 函数6.1、函…...

mac安装nvm详细教程

0. 前提 清除电脑上原有的node (没有装过的可以忽略)1、首先查看电脑上是否安装的有node,查看node版本node -v2、如果有node就彻底删除nodesudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}2、保证自己的电脑上有安装git,不然下载n…...

上线流程及操作

上节回顾 1 搜索功能-前端&#xff1a;搜索框&#xff0c;搜索结果页面-后端&#xff1a;一种类型课程-APIResponse(actual_courseres.data.get(results),free_course[],light_course[])-搜索&#xff0c;如果数据量很大&#xff0c;直接使用mysql&#xff0c;效率非常低--》E…...

MobX入门指南:快速上手状态管理库

一、什么是MobX MobX 是一个状态管理库&#xff0c;它可以让你轻松地管理应用程序的状态&#xff0c;并且可以扩展和维护。它使用观察者模式来自动传播你的状态的变化到你的 React 组件。 二、安装及配置 安装 MobX 和 MobX-React&#xff1a;你可以使用 npm 或 yarn 安装这…...

技术洞察:Selenium WebDriver中Chrome, Edge, 和IE配置的关键区别

综述 webdriver.EdgeOptions(), webdriver.ChromeOptions(), 和 webdriver.IeOptions() 都是 Selenium WebDriver 的配置类&#xff0c;用于定制化启动各自浏览器的设置。它们分别对应 Microsoft Edge&#xff0c;Google Chrome&#xff0c;和 Internet Explorer 浏览器。 每…...

使用自定义OCR提升UIE-X检测效果:结合PaddleOCR和UIE模型进行文档信息提取

在实际应用中&#xff0c;识别文档中的特定信息对于许多任务至关重要&#xff0c;例如发票识别、表格信息提取等。然而&#xff0c;由于文档的多样性和复杂性&#xff0c;传统的光学字符识别&#xff08;OCR&#xff09;技术可能无法准确识别文档中的信息。为了解决这个问题&am…...

题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

题目&#xff1a;写一个函数&#xff0c;求一个字符串的长度&#xff0c;在main函数中输入字符串&#xff0c;并输出其长度。  There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog con…...

.net反射(Reflection)

文章目录 一.概念&#xff1a;二.反射的作用&#xff1a;三.代码案例&#xff1a;四.运行结果&#xff1a; 一.概念&#xff1a; .NET 反射&#xff08;Reflection&#xff09;是指在运行时动态地检查、访问和修改程序集中的类型、成员和对象的能力。通过反射&#xff0c;你可…...

P1278 单词游戏 简单搜索+玄学优化

单词游戏 传送门 题目描述 Io 和 Ao 在玩一个单词游戏。 他们轮流说出一个仅包含元音字母的单词&#xff0c;并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致。 游戏可以从任何一个单词开始。 任何单词禁止说两遍&#xff0c;游戏中只能使用给定词典中含有…...

软考 - 系统架构设计师 - 数据架构真题

问题 1&#xff1a; (相当于根据题目中提到的 4 点&#xff0c;说一下关系型数据库的缺点) &#xff08;1&#xff09;.用户数量的剧增导致并发负载非常高&#xff0c;往往会达到每秒上万次读写请求。关系数据库应付每秒上万次的 SQL 查询还勉强可以&#xff0c;但是应付上万…...

Ubuntu22.04下opencv4.9.0环境的搭建

目录 1、更新系统包列表:2、安装依赖项:3、下载 OpenCV 源代码:4、编译和安装 OpenCV:5、配置环境变量:6、测试1、更新系统包列表: 在终端中执行以下命令,以确保系统包列表是最新的: sudo apt update2、安装依赖项: 安装构建 OpenCV 所需的依赖项: sudo apt inst…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...