JWT介绍及演示

news2024/11/24 2:38:37

JWT

介绍

cookie(放在浏览器)

cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。

cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的

session(放在服务器)

session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。

session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。

服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

token

在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。

以下几点特性会让你在程序中使用基于Token的身份验证

  1. 无状态、可扩展

  2. 支持移动设备

  3. 跨程序调用

  4. 安全

jwt(json web token)

image-20231208174146988

JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)。

头部(Header):头部通常由两部分组成,算法类型和令牌类型。

​ 算法类型:指定用于生成签名的算法,例如 HMAC、RSA 或者 ECDSA。

​ 令牌类型:指定令牌的类型,常见的是 JWT。

头部使用 Base64Url 编码表示,并作为整个 JWT 的第一部分。头部的一个示例:

{

“alg”: “HS256”,none

“typ”: “JWT”

}

载荷(Payload):载荷存储了有关用户或实体的声明和其他有关信息。

​ 声明:如用户 ID、角色、权限等信息。

​ 注册声明:包含一些标准的声明(比如发行人、过期时间等)和一些自定义的声明。

载荷也使用 Base64Url 编码表示,并作为整个 JWT 的第二部分。载荷的一个示例:

{

“sub”: “1234567890”,

“name”: “John Doe”,

“iat”: 1516239022

}

签名(Signature):签名是对头部和载荷进行签名的结果,用于验证 JWT 的完整性和真实性。

​ 签名生成方式:将头部和载荷进行 Base64Url 编码后拼接在一起,然后使用指定的加密算法(如 HMAC、RSA)进行签名,将生成的签名添加到 JWT 中。

头部

alg

是说明这个JWT的签名使用的算法的参数,常见值用HS256(默认),HS512等,也可以为None。HS256表示HMAC SHA256。

typ

说明这个token的类型为JWT

payload

image-20231208174325991

签名

服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用此密码进行加密,生成的字符串就是JWT的签名

通信流程

image-20231208174249484

环境

使用webgoat靶场

使用以下代码拉取环境

java -jar webgoat-server-8.1.0.jar --server.port=8888 --server.address=10.4.7.138

访问该网址进入靶场

http://10.4.7.138:8888/WebGoat/login

本文打的靶场为jwt tokens

image-20231208163922218

4

此处点票点到8

image-20231208164109569

用户为jerry

点击垃圾桶后显示只有admin用户才可以

此处开启bp抓包,

找到刚才发送的post请求包

image-20231208164513479

发给repeater

可以看到这一串jwt

image-20231208164557693

使用jwt.io

将刚才jwt粘贴进去

可以看到右边解码的结果

image-20231208164706930

此处需要将加密方式改为none,admin改为true

使用base64编码完成

image-20231208164907152

image-20231208164943957

去掉等号将结果粘过去到一起

image-20231208165013539

最终使用header和payload部分,包含点

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNzAyODg5MDQ3LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJKZXJyeSIKfQ.

替换bp中原始部分

发包即可成功

image-20231208165143747

回到网页重新看一下,发现操作完成变成1

image-20231208165221743

5

将它提供的jwt放进去看看

image-20231208171544816

将jwt写入一个文本文件

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMjAyNjAwNywiZXhwIjoxNzAyMDI2MDY3LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19

另一个为字典文件

victory
secret1
business
washington

然后使用工具进行爆破

hashcat -m 16500 2.txt -a 3 -w 2 1.txt --force

其中

-m 16500 这里的16500对应的就是jwt的token爆破;

-a 3 代表蛮力破解

-w 3 可以理解为高速破解,就是会让桌面进程无响应的那种高速

2.txt为jwt

1.txt为字典

爆破得到密钥

image-20231208173014689

修改截至时间和username

image-20231208173237853

然后粘贴过去再将密钥换成刚刚爆破出来的

最后得到

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMjAyNzkwNywiZXhwIjoxNzAyMDMzNTUwLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IldlYkdvYXQiLCJFbWFpbCI6InRvbUB3ZWJnb2F0Lm9yZyIsIlJvbGUiOlsiTWFuYWdlciIsIlByb2plY3QgQWRtaW5pc3RyYXRvciJdfQ.3IMBgQVgvJzL1m7nE3XLXdfF--ja1ouXcjLNdKqvw5g

然后提交jwt即可

image-20231208174005244

7

image-20231208165810892

第七关要求以tom的身份付款

并且给了日志信息提示,可以看到jwt

image-20231208165948663

粘贴过来可得

image-20231208170042238

会发现这个到期时间已经过期了

image-20231208170249353

这个时间格式是unix纪元时间

使用在线工具获取现在的时间戳,然后base64

image-20231208170625616

eyJhbGciOiJIUzUxMiJ9.ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNzAyMDI2MzYxLAogICJhZG1pbiI6ICJmYWxzZSIsCiAgInVzZXIiOiAiVG9tIgp9.

将该字段的值更改为新的jwt过后即可完成

image-20231208171003749

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

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

相关文章

Ubunutu18.04 ROS melodic 无人机 XTDrone PX4 仿真平台配置

一、依赖安装 sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python-pip python3-pip gawk pip2 install pandas jinja2 pyserial cerberus pyulog0.7.0 n…

【博客园美化】博客园简单动态背景美化(css个人现写的,不喜勿喷)

效果如图(背景是动态的) 效果参见: 浅吟清风 的博客园 1、前置操作 1、有一个博客园账号; 2、 登陆博客园,进入设置; 3、 选择“博客设置”-> “博客侧边栏公告”-> 申请JS权限(图片展…

6.19二叉搜索树中的众数

算法: 提到二叉搜索树,一定是中序遍历! 双指针法: pre指向当前节点cur的前一个节点,如果cur.val pre.val,count,count用来统计该数值出现的频率 如果 频率count 等于 maxCount(最…

交付《啤酒游戏经营决策沙盘》的项目

感谢首富客户连续两年的邀请,交付《啤酒游戏经营决策沙盘》的项目,下周一JSTO首席学习官Luna想让我分享下系统思考与投资理财,想到曾经看过的一本书《深度思维》,看到一些结构来预判未来。不仅仅可以应用在企业经营和组织发展上&a…

tomcat篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、Tomcat是什么?二、什么是Servlet呢?三、什么是Servlet规范?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、To…

【Fastadmin】利用 build_select 做一个树状下拉选择框

1.效果展示 系统crud生成的下拉分类有些不是很好看,并且选择困难,看不出级差,效果如下: 经过 build_select 加工后的效果,美观好看,并添加上搜索功能: 2. 首先需要写一个树状图的数据格式 protected $datalist []; pu…

科学指南针走进江南大学,探索科研绘图与3D Max软件应用的精彩世界

2023年11月23日,江南大学迎来了一场精彩的科学指南针线下讲座,该讲座以探索科研绘图与3D Max软件应用为主题,通过专家讲座和实践操作,帮助学生了解科研绘图的重要性和3D Max软件在科研领域的广泛应用,吸引了大量感兴趣…

不一样的年会彩瞳推荐,绮芙莉多款彩瞳彰显个性

临近年底,各种公司年会、跨年晚会活动也逐渐排上日程,出席这种正式场合,每个人都有自己的“杀手锏”,从发型妆容到穿搭都是变美小细节,作为心灵之窗的双眸,更需要一副彩瞳来提升我们的眼妆质感,…

《树莓派不吃灰》第二十四期:懒是第一生产力,为树莓派安装可视化开源管理面板1Panel

最近有哥们推荐了一个现代化Linux开源管理面板1Panel,开源且稳定,懒是第一生产力,虽然命令行很灵活,但图形化界面真的是懒人刚需,本期在树莓派部署一下1Panel,让树莓派Linux运维更省力,进一步降…

主存储器与CPU的连接

目录 一. 单块存储芯片与CPU的连接二. 多块存储芯片与CPU的连接2.1 位扩展2.2 字扩展2.3 字位扩展 三. 译码器知识点的补充 \quad 一. 单块存储芯片与CPU的连接 \quad \quad \quad 暴露出的引脚都是与CPU连接的 上面这个是88位的存储芯片 我们可以看到有8个字, 每个字的字长是8…

【MATLAB源码-第99期】基于matlab的OFDM系统卡尔曼滤波(kalman)信道估计,对比LS,MMSE。

操作环境: MATLAB 2022a 1、算法描述 卡尔曼滤波器(Kalman Filter)是一种有效的递归滤波器,它能够从一系列的含有噪声的测量中估计动态系统的状态。在无线通信领域,尤其是在正交频分复用(OFDM&#xff0…

【人工智能Ⅰ】实验7:K-means聚类实验

实验7 K-means聚类实验 一、实验目的 学习K-means算法基本原理,实现Iris数据聚类。 二、实验内容 应用K-means算法对iris数据集进行聚类。 三、实验结果及分析 0:输出数据集的基本信息 参考代码在main函数中首先打印了数据、特征名字、目标值、目标…

【C语言】操作符详解(一):进制转换,原码,反码,补码

目录 操作符分类 2进制和进制转换 2进制转10进制 10进制转2进制 2进制转8进制和16进制 2进制转8进制 2进制转16进制 原码、反码、补码 操作符分类 操作符中有一些操作符和二进制有关系,我们先铺垫一下二进制的和进制转换的知识。 2进制和进制转换 其实我们经…

Java+Swing: 主界面的窗体 整理8

主界面的写法跟之前登录界面的窗体写法大致相同,在主界面中主要是窗体的大小的设置 package com.student_view;import com.utils.DimensionUtil; import sun.applet.Main;import javax.swing.*; import java.awt.*; import java.net.URL;/*** Author:xie…

基于STM32 + DMA介绍,应用和步骤详解(ADC多通道)

前言 本篇博客主要学习了解DMA的工作原理和部分寄存器解析,针对ADC多通道来对代码部分,应用部分作详细讲解,掌握代码编程原理。本篇博客大部分是自己收集和整理,如有侵权请联系我删除。 本次博客开发板使用的是正点原子精英版&am…

已发表的论文职称查重率高【详细说明】

大家好,今天来聊聊已发表的论文职称查重率高,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 已发表的论文职称查重率高 背景介绍 在学术界,论文的原创性和重复率是评价一篇论文质…

【安卓】安卓xTS之Media模块 学习笔记(3) VTS测试

1. 背景 接下来进行正式的VTS测试。本章节还是以Media模块相关进行介绍。 VTS主要测的是内核和HAL层,media的hal层是以openMax(即将废弃,今日2023.12) 和 Codec2 (后续主流) 接口为主。 这里我们只看Codec2的要求,CDD…

《师兄啊师兄》第二季来了!它凭什么成为修仙流里第一档?

沉寂大半年,修仙喜剧动画《师兄啊师兄》第二季终于“千呼万唤始出来”,即将在12月14日上线。作为优酷动漫本年度的当家之作,这部可谓是热度口碑双丰收,截至第一季收官,相关话题在短视频平台的累计播放量更是高达43亿&a…

字符串函数`strlen`、`strcpy`、`strcmp`、`strstr`、`strcat`的使用以及模拟实现

文章目录 🚀前言🚀库函数strlen✈️strlen的模拟实现 🚀库函数strcpy✈️strcpy的模拟实现 🚀strcmp✈️strcmp的模拟实现 🚀strstr✈️strstr的模拟实现 🚀strcat✈️strcat的模拟实现 🚀前言 …