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

JWT介绍及演示

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

相关文章:

JWT介绍及演示

JWT 介绍 cookie(放在浏览器) cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本…...

Android Studio新版UI介绍

顶部菜单栏 左侧主要菜单入口项目名称分支名称 展开之后,主要功能与原来菜单栏功能一样,最大的变化就是把setting独立出去了。 而项目名称这里,展开就可以看到打开的历史工程列表,可以直接新建工程,原来需要在项目名称…...

基于ssm应急资源管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本应急资源管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...

K8S学习指南(9)-k8s核心对象init pod

文章目录 引言什么是Init容器?Init容器的使用场景1. 数据初始化2. 网络设置3. 等待依赖服务 Init容器的生命周期1. **Pending**2. **Running**3. **Terminated** Init容器的示例Init容器的高级用法结论 引言 Kubernetes(简称K8s)是一个强大的…...

以太坊:前世今生与未来

一、引言 以太坊,这个在区块链领域大放异彩的名字,似乎已经成为了去中心化应用(DApps)的代名词。从初期的萌芽到如今的繁荣发展,以太坊经历了一段曲折而精彩的旅程。让我们一起回顾一下以太坊的前世今生,以…...

vue3若依框架,在页面中点击新增按钮跳转到新的页面,不是弹框,如何实现

在router文件中的动态路由数组中新增一个路由配置,这个配置的就是新的页面。 注意path不要和菜单配置中的路径一样,会不显示内容。 在菜单配置中要写权限标识就是permissions:[]里的内容 在children里的path要写占位符info/:data 点击新增按钮&#x…...

【大模型】800万纯AI战士年末大集结,硬核干货与音乐美食12月28日准时开炫

文章目录 WAVE SUMMIT五载十届,AI开发者热血正当时酷炫前沿、星河共聚!大模型技术生态发展正当时 回望2023年,大语言模型或许将是科技史上最浓墨重彩的一笔。从技术、产业到生态,大语言模型在突飞猛进中加速重构万物。随着理解、生…...

linux配置python环境

目录 安装screen安装解压工具安装python环境安装程序所需要的依赖包镜像附录 安装screen screen用于后台运行程序 先升级包管理工具 sudo apt-get update 安装screen sudo apt-get install screen创建screen screen -S erl安装解压工具 对上传到服务器的文件进行解压 …...

【教程】app备案流程简单三部曲即可完成

APP备案流程包括以下步骤: 1. 开发者实名认证:在提交备案申请之前,开发者需要通过移动应用开发平台进行实名认证。这个步骤需要提供身份证号码、姓名、联系方式等信息,并上传相关证件照片或扫描件。 2. 应用信息登记&#xff1a…...

C++使用vector创建二维数组并指定大小

一、一维容器的初始化&#xff1a; vector<int> v(n)表示声明一个容器v&#xff0c;并给他预定存储空间。每一个单元初始化为0&#xff0c;因此&#xff0c;vector<int> v(n)vector<int> v(n, 0)。 如果想要初始化为其他值&#xff0c;可改为vector<int…...

Spring支持哪几种事务管理类型,Spring 的事务实现方式和实现原理是?

1.Spring事务简介 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败 Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据库操作同成功同失败 为何需要在业务层处理事务&#xff1f;&#xff1a;有些操作在数据层无法保证同成功同失败&#xff0c;…...

书-二分查找找某个数字p155

#include<stdio.h> int main(){int a[10]{1,4,5,6,7,8,23,34,90,14567};int mid;int low0;int high9;while(low<high){mid(lowhigh)/2;//数组分成两段&#xff0c;前一段low-mid&#xff0c;后一段mid-highif (a[mid]<23)//因为已经是排序好的了&#xff0c;所以如…...

【NLP】RAG 应用中的调优策略

​ 检索增强生成应用程序的调优策略 没有一种放之四海而皆准的算法能够最好地解决所有问题。 本文通过数据科学家的视角审视检索增强生成&#xff08;RAG&#xff09;管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似&#xff0c;例如&am…...

Android-Framework 默认隐藏导航栏,添加控制显示属性

一、环境 高通865 Android 10 二、源码修改 device/qcom/qssi/system.prop -217,3 217,5 persist.ruichi.gpu2persist.ruichi.gpu_max587persist.ruichi.gpu_min305# Show navigation bar, 0 for display, 1 for hidden persist.navbar.status1 frameworks/base/services/…...

【AIGC】Midjourney高级进阶版

Midjourney 真是越玩越上头&#xff0c;真是给它的想象力跪了~ 研究了官方API&#xff0c;出一个进阶版教程 命令 旨在介绍Midjourney在Discord频道中的文本框中支持的指令。 1&#xff09;shorten 简化Prompt 该指令可以将输入的Prompt为模型可以理解的语言。模型理解语言…...

C语言学习----指针和数组

&#x1f308;这篇blog记录一下指针学习~ 主要是关于指针和数组之间的关系&#xff0c;还有指针的使用等~ &#x1f34e;指针变量是一个变量 其本身也有一个地址 也需要存放&#xff0c;就和int char等类型一样的&#xff0c;也需要有一个地址来存放它 &#x1f34c;而指针变量…...

学习Node.js与Webpack总结

今天学习了模块化的简介&#xff0c;其实一个项目是由很多个模块文件组成的&#xff0c;它们有它们各自的功能和用途来协助这个项目的完成&#xff0c;这样的模块组成有很多的好处比如提高代码的复用性、还可以按需加载、还有独立的作用域&#xff0c;还需要搞清楚的一点就是No…...

JAVA基础知识:泛型

一、什么是泛型&#xff1f; 泛型是Java中的一种参数化类型机制&#xff0c;它允许在类或方法的声明中使用类型参数&#xff0c;以实现代码的通用性和类型安全性。通过使用泛型&#xff0c;我们可以编写更加灵活和可复用的代码&#xff0c;同时减少类型转换错误的可能性。 二、…...

【WinRAR】为什么右键没有压缩选项?

我们安装了WinRAR之后想要压缩文件&#xff0c;但是右键点击文件之后发现并没有WinRAR压缩选项&#xff0c;这应该如何设置才能出现右键带有压缩选项呢&#xff1f;方法如下&#xff1a; 首先打开WinRAR&#xff0c;在上面功能中点击选项 – 设置 然后我们在设置界面中切换到集…...

数据云:数据基础设施的一小步,数字经济的一大步

随着数字经济的崛起&#xff0c;数据正成为推动社会发展和经济增长的核心要素。在这个数字化时代&#xff0c;数据已经被誉为新的生产要素&#xff0c;是数字经济发展的基础性资源和战略性资源。为了更好地支持数据的汇聚、流通和应用&#xff0c;数据基础设施迎来了一次重要的…...

极兔速递查询,极兔速递单号查询,筛选出指定派件员的单号

批量查询极兔速递单号的物流信息&#xff0c;并将指定派件员的单号筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 极兔速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#xff…...

条款25:考虑写出一个不抛出异常的swap函数

1.前言 swap是个有趣的函数&#xff0c;原本它只是STL的一部分&#xff0c;而后成为异常安全编程的基石&#xff0c;以及用来处理自我赋值可能性的一个常见机制。由于swap功能如此强大&#xff0c;适当的实现很重要。然而在非凡的重要性之外它也带来了非凡的复杂度。 所谓swa…...

linux 中crontab 定时任务计划创建时间文件夹示例

1.创建一个sh脚本 /usr/bin/mkdir 是mkdir命令的路径 /usr/bin/chmod 是chmod命令的路径 2.编辑定时任务 crontab -e...

欣赏动态之美,不如欣赏C语言实现动态内存管理之美 ! ! !

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

from pycocotools.coco import COCO报错

需要注意的是&#xff0c;自己的系统是windows还是linux的系统&#xff1a; windows系统的安装&#xff1a; pip install pycocotools-windows linux的系统安装&#xff1a; pip install pycocotools 别用错了命令哦&#xff01;...

CentOS服务自启权威指南:手动启动变为开机自启动(以Jenkins服务为例)

前言 CentOS系统提供了多种配置服务开机自启动的方式。本文将介绍其中两种常见的方式&#xff0c; 一种是使用Systemd服务管理器配置&#xff0c;不过&#xff0c;在实际中&#xff0c;如果你已经通过包管理工具安装的&#xff0c;那么服务通常已经被配置为Systemd服务&#…...

第二百零一回 介绍一个三方包open_settings

文章目录 1. 概念介绍2 使用方法3 代码与效果3.1 示例代码3.2 运行效果 4. 经验分享 我们在上一章回中介绍了Form Widget相关的内容&#xff0c;本章回中将介绍Form系列组件的验证与提交功能.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的的验…...

iview Table实现跨页勾选记忆功能以及利用ES6的Map数据结构实现根据id进行对象数组的去重

因为iview Table组件的勾选是选中当前页的所有数据,当我们切到别的页面时,会发送请求给后端,这个时候就会刷新我们之前页码已经选中的数据。现在有个需求就是,在我们选择不同页码的数据勾选中之后,实现跨页勾选记忆功能,就是说已经打钩了的数据,不管切到哪一页它都是打钩…...

【Spring 源码】 贯穿 Bean 生命周期的核心类之 AbstractAutowireCapableBeanFactory

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…...

漏洞复现-某友UFIDA NC系统某接口未授权访问漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...