JWT安全
文章目录
- 理论知识
- cookie(放在浏览器)
- session(放在 服务器)
- token
- jwt(json web token)
- header
- payload
- Signature
- JWT通信流程
- JWT与Token 区别
- 相同点
- 区别
- WebGoat靶场--JWT tokens
- 环境启动
- 第四关
- 第五关
- 第七关
属于越权漏洞
理论知识
cookie(放在浏览器)
cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏 览器实现的一种数据存储功能。
cookie 由服务器生成,发送给浏览器,浏览器把 cookie 以 kv 形式保存到某个目录下的 文本文件内,下一次请求同一网站时会把该 cookie 发送给服务器。由于 cookie 是存在客户 端上的,所以浏览器加入了一些限制确保 cookie 不会被恶意使用,同时不会占据太多磁盘空 间,所以每个域的 cookie 数量是有限的
session(放在 服务器)
session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交 谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。
session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服 务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都 带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份 标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。
服务器使用 session 把用户的信息临时保存在了服务器上,用户离开网站后 session 会被 销毁。这种用户信息存储方式相对 cookie 来说更安全,可是 session 有一个缺陷:如果 web 服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候 session 会丢失。
token
Token是用户进行一些权限操作时的许可凭证。token本质是字符串,里面包含了用户信息,过期时间,加密方式等。token是在前端进行登录之后,由服务器分发给前端,然后前端进行权限操作时,再将token发送给服务器,由服务器来验证。token是有过期时间的,一但token过期,用户就要重新登陆让服务器生成新的token。
在 Web 领域基于 Token 的身份验证随处可见。在大多数使用 Web API 的互联网公司中, tokens 是多用户下处理认证的最佳方式。
以下几点特性会让你在程序中使用基于 Token 的身份验证
- 无状态、可扩展
- 支持移动设备
- 跨程序调用
- 安全
jwt(json web token)
一个 JWT 实际上就是一个字符串,它由三部分组成:
- 头部(head)
- 负载(payload)
- 签名(Signature)

前两部分需要经过 Base64 编码,后一部分通过前两部分Base64编码后再加密而成
header
头部通常由两部分组成:算法类型和令牌类型。
- 算法类型:指定用于生成签名的算法,例如 HMAC、RSA 或者 ECDSA。
- 令牌类型:指定令牌的类型,常见的是 JWT。
头部使用 Base64URL 编码表示,并作为整个 JWT 的第一部分。头部的一个示例:
{"alg": "HS256","typ": "JWT"
}alg:是说明这个 JWT 的签名使用的算法的参数,常见值用 HS256(默认),HS512 等,也可以为
None。HS256 表示 HMAC SHA256。
typ:说明这个 token 的类型为 JW算法类型也可以是 none,表示不加密,不加密的话签名就没用了,但是最后那个 点 必须要有
payload
载荷存储了有关用户或实体的声明和其他有关信息
- 声明:如用户 ID、角色、权限等信息
- 注册声明:包含一些标准的声明(比如发行人、过期时间等)和一些自定义的 声明
载荷也使用 Base64URL编码表示,并作为整个 JWT 的第二部分。载荷的一个示例:
{"sub": "1234567890","name": "John Doe","iat": 1516239022
}

Signature
签名是拿到被base64编码的头部和负载后,用标头里的加密算法对拿到的标头和负载进行加密,然后作为jwt的第三部分。签名是用来验证标头和负载中的信息有没有被篡改。如果标头和负载的信息被篡改,则这个jwt是失效的。反之验证通过 ----------------用于验证 JWT 的完整 性和真实性
服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用 此密码进行加密,生成的字符串就是 JWT 的签名
签名生成方式:将头部和载荷进行 Base64URL 编码后拼接在一起,然后使 用指定的加密算法(如 HMAC、RSA)进行签名,将生成的签名添加到JWT中
JWT通信流程

JWT与Token 区别
相同点
- 都是访问资源的令牌
- 都可以记录用户的信息
- 都是使服务端无状态变化
- 都是验证成功后,客户端才能访问服务端上受保护的资源
区别
- Token: 服务端验证客户端发送过来的Token 时,还需要查询数据库获取用户信息,然后验证Token 是否有效
- JWT: 将token 和 Payload 加密后存储于客户端,服务端只需要使用秘钥进行校验即可,不需要查询或者减少查询数据库,因为JWT自包含了用户信息和加密的数据
WebGoat靶场–JWT tokens
环境启动
启动WebGoat靶场
java -jar webgoat-server-8.0.0.M17.jar --server.port=8888 --
server.address=192.168.8.8

访问WebGoat靶场
127.0.0.1:8888/WebGoat

注册一个用户

第四关
通过目标:以管理员的身份清楚普通用户的投票数


点击删除投票的按钮, BurpSuite拦截数据包,并观察数据包


访问jwt.io网站,粘贴进去

可以看出使用的加密算法为HS512
Payload:admin为false,user不是admin,而是Tom
选中Payload

来到base64这个网站,admin修改为true,



再把JWT头部的算法类型改为none,如果改为了none,后面的签名就没有意义了
签名的意义就是为了加密算法是否正确,内容是否正确,现在不用加密了,所以最后一个.后面的签名部分就不要了




刷新页面

成功重置!!
第五关
修改 exp 有效时间 ,修改username为 WebGoat



爆破秘钥
hashcat -m 16500 jwt.txt -a 3 -w 3 1.txt-m 16500 这里的 16500 对应的就是 jwt 的 token 爆破;
-a 3 代表蛮力破解
-w 3 可以理解为高速破解,就是会让桌面进程无响应的那种高速
jwt.txt 是我把题目要求破解的 token 保存到的文件
pass.txt 密码字典

得出密钥是victory

第七关
通过目标:冒充tom用户,让tom帮我们付钱
BurpSuite拦截数据包,并观察数据包


并不是说一定要把JWT放到Cookie字段里
靶场提供了一个JWT ,点击here跳转链接





修改Payload的过期时间和头部的算法类型
unix时间互换





相关文章:
JWT安全
文章目录 理论知识cookie(放在浏览器)session(放在 服务器)tokenjwt(json web token)headerpayloadSignatureJWT通信流程 JWT与Token 区别相同点区别 WebGoat靶场--JWT tokens环境启动第四关第五关第七关 属于越权漏洞 理论知识 cookie(放在浏览器) …...
LabVIEW利用人工神经网络辅助进行结冰检测
LabVIEW利用人工神经网络辅助进行结冰检测 结冰对各个领域构成重大威胁,包括但不限于航空航天和风力涡轮机行业。在起飞过程中,飞机机翼上轻微积冰会导致升力降低25%。研究报告称,涡轮叶片上的冰堆积可在19个月的运行时间内造成29MWh的功率损…...
Linux安装MySQL8.0
又又又又..Linux装MySQL。 删除原有的MySQL 查看安装的mysql信息:rpm -qa|grep -i mysql 删除mysql相关服务:rpm -e --nodeps 查询mysql遗留文件和依赖信息:find / -name mysql 手动删除mysql配置文件:rm -rf /etc/my.cnf 相关…...
【【萌新编写RISCV之前言CPU的部分介绍.3】】
萌新编写RISCV之前言CPU的部分介绍.3 CPU的数字电路结构实际十分简单,最主要的模块有PC(地址生成),ALU(运算),Register(寄存),Decode(译码&#…...
dl_model_param
set_dl_model_param —设置深度学习模型的参数 get_dl_model_param — Return the parameters of a deep learning model 返回深度学习模型的参数 使用read_dl_model读取前一步初始化后的网络模型,得到模型的句柄DLModelHandle。 接着用read_dict读取预处理后的数…...
Android相机调用-CameraX【外接摄像头】【USB摄像头】
Android相机调用有原生的Camera和Camera2,我觉得调用代码都太复杂了,CameraX调用代码简洁很多。 说明文档:https://developer.android.com/jetpack/androidx/releases/camera?hlzh-cn 现有查到的调用资料都不够新,对于外接摄像…...
第一个Java程序
1. 将扩展名.text更改为.java 2.文件夹(Hello.java)上方输入“cmd空格回车”(没有加号) 3.在命令提示符内输入“javac空格文件夹名称.java回车” (javac空格Hello.java回车) 执行成功后,文件夹下多一个Hello.class…...
OpenCV之霍夫变换检测直线
霍夫变换 首先是笛卡尔坐标系到霍夫空间的转换,比如笛卡尔坐标系中有一条直线 yaxb。 笛卡尔坐标系中一条直线,对应霍夫空间的一个点。 反过来同样成立(霍夫空间的一条直线,对应笛卡尔坐标系的一个点) 原理其实很简单 …...
lv3 嵌入式开发-11 Linux下GDB调试工具
目录 1 GDB简介 2 GDB基本命令 3 GDB调试程序 1 GDB简介 GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。 一般来说,GDB主要帮助你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序&#…...
Zabbix监控平台概念
1.概念 Zabbix是一款开源的、免费的、分布式监控平台支持web管理,WEB界面可以方便管理员使用可以监控硬件服务器CPU温度、风扇转速、操作系统CPU、EME、DISK、I/O、流量宽带、负载、端口、进程等Zabbix是C/S架构,Client客户端和Server端组成 2.Zabbix可…...
【javaSE】 枚举与枚举的使用
文章目录 🎄枚举的背景及定义⚾枚举特性总结: 🌲枚举的使用🚩switch语句🚩常用方法📌示例一📌示例二 🎍枚举优点缺点🌴枚举和反射🚩枚举是否可以通过反射&…...
NetSuite知识会汇编-管理员篇顾问篇2023
本月初,开学之际,我们发布了《NetSuite知识会汇编-用户篇 2023》,这次发布《NetSuite知识会汇编-管理员篇&顾问篇2023》。本篇挑选了近两年NetSuite知识会中的一些文章,涉及开发、权限、系统管理等较深的内容,共19…...
根号分治与多项式的巧妙结合:GYM-104386G
使用范围:序列上对于每种数的计数问题 考虑对每种数的出现次数进行根号分治 如果出现次数很少,直接平方暴力即可 如果很大考虑任意 ( i , j ) (i,j) (i,j),我们拆一下,再移一下,然后就变成了卷积形式...
通过FTP高速下载几百G数据
基因组下载 (FTP) 常见问题解答 基因组FTP站点有哪些亮点?下载多个基因组组装数据的最简单方法是什么?下载大型数据集的最佳协议是什么?为什么 NCBI 基因组 FTP 站点要重组?我如何及时了解 NCBI 基因组 FTP 站点的变化?...
cudnn-windows-x86_64-8.6.0.163_cuda11-archive 下载
网址不太好访问的话,请从下面我提供的分享下载 Download cuDNN v8.6.0 (October 3rd, 2022), for CUDA 11.x 此资源适配 cuda11.x 将bin和include文件夹里的文件,分别复制到C盘安装CUDA目录的对应文件夹里 安装cuda时自动设置了 CUDA_PATH_V11_8 及path C:\Progra…...
多线程案例(1) - 单例模式
目录 单例模式 饿汉模式 懒汉模式 前言 多线程中有许多非常经典的设计模式(这就类似于围棋的棋谱),这是用来解决我们在开发中遇到很多 "经典场景",简单来说,设计模式就是一份模板,可以套用。…...
Arduino驱动TCS34725传感器(颜色传感器篇)
目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 TCS34725是一款低成本,高性价比的RGB全彩颜色识别传感器,传感器通过光学感应来识别物体的表面颜色。...
知识库网站如何搭建?需要注意这五个要点!
正因为知识库提供结构化知识库来记载信息和知识,便于团队沉淀经验、共享资源,形成完整的知识体系并持续进化,使得它成为当前企业发展新宠。 构建自己/团队的知识库是一个良好的习惯,可以提高工作和学习效率,以下是一…...
【UE虚幻引擎】UE源码版编译、Andorid配置、打包
首先是要下载源码版的UE,我这里下载的是5.2.1 首先要安装Git 在你准备放代码的文件夹下右键点击Git Bash Here 然后可以直接git clone https://github.com/EpicGames/UnrealEngine 不行的话可以直接去官方的Github上下载Zip压缩包后解压 运行里面的Setup.bat&a…...
树和二叉树的相关概念及结构
目录 1.树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.3.1 孩子兄弟表示法 1.3.2 双亲表示法 1.4 树的实际应用 2.二叉树的概念及结构 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.4.1 顺序存储 2.4.2 链式存储 1.树…...
NanoClaw实战:软件测试与质量保障
NanoClaw实战:软件测试与质量保障 1. 引言 在软件开发过程中,测试环节往往是最耗时且最容易出问题的阶段。传统的测试方法需要大量人工编写测试用例、执行测试脚本、分析测试结果,这不仅效率低下,还容易遗漏关键场景。现在&…...
无人车遥操作中的AR/VR技术:从虚拟驾驶到实时控制的实战指南
无人车遥操作中的AR/VR技术:从虚拟驾驶到实时控制的实战指南 当无人车在复杂环境中行驶时,操作员如何隔着屏幕精准操控?传统视频流监控方式面临延迟高、视角受限等痛点。AR/VR技术正在重塑这一领域——通过构建虚拟驾驶舱,操作员能…...
Dify异步处理插件安装失败率下降76%的关键操作:GPG密钥绑定、离线bundle构建与CI/CD流水线嵌入技巧
第一章:Dify自定义节点异步处理插件下载与安装概述Dify 平台通过自定义节点(Custom Node)机制支持扩展工作流能力,其中异步处理插件可显著提升长耗时任务(如大模型推理后处理、文件转换、外部 API 轮询等)的…...
实战分享:如何用Python脚本快速将Anti-UAV数据集转为YOLO格式(附完整代码解析)
实战指南:Python自动化处理Anti-UAV数据集到YOLO格式的高效方案 在计算机视觉领域,无人机检测正成为安防、军事和民用场景的重要研究方向。Anti-UAV数据集作为专门针对反无人机任务构建的基准库,包含大量复杂背景下的无人机目标标注。但原始数…...
Qwen2.5-VL-7B-Instruct部署教程:多卡GPU负载均衡与并发请求优化配置
Qwen2.5-VL-7B-Instruct部署教程:多卡GPU负载均衡与并发请求优化配置 想试试让AI看懂图片还能跟你聊天吗?今天要聊的Qwen2.5-VL-7B-Instruct,就是一个能“看图说话”的智能模型。它不仅能理解图片里的内容,还能根据你的问题给出详…...
香薰机功率链路设计实战:静音、安全与智能控制的融合之道
【香薰机功率链路设计实战:静音、安全与智能控制的融合之道】在智能香薰设备朝着低噪运行、精细雾化与稳定可靠不断演进的今天,其内部的功率与驱动管理系统已不再是简单的开关控制单元,而是直接决定了雾化效果、用户体验与产品安全的核心。一…...
华三交换机链路聚合实战:从静态配置到动态LACP的完整避坑指南
华三交换机链路聚合实战:从静态配置到动态LACP的完整避坑指南 在企业网络升级或数据中心扩容的场景中,链路聚合技术(Link Aggregation)是提升带宽和可靠性的关键手段。作为网络工程师,我曾多次在华三交换机上实施链路聚…...
快速上手CosyVoice:3步完成声音克隆,制作个性化语音问候和提醒
快速上手CosyVoice:3步完成声音克隆,制作个性化语音问候和提醒 1. 认识CosyVoice语音克隆系统 CosyVoice是阿里巴巴通义实验室开发的多语言语音生成模型,它最大的特点就是能让你用短短几秒钟的参考音频,克隆出一个几乎一模一样的…...
告别数据丢失恐慌!MHDD硬盘健康检测保姆级教程(含最新版本下载)
硬盘健康全掌握:MHDD专业检测工具实战指南 电脑突然蓝屏、文件读取异常缓慢、系统频繁卡顿——这些症状背后往往隐藏着硬盘健康问题。对于普通用户而言,硬盘故障就像一颗定时炸弹,随时可能导致珍贵数据永久丢失。本文将带你深入了解专业级硬…...
解放Alienware:开源硬件控制工具如何重构设备个性化体验
解放Alienware:开源硬件控制工具如何重构设备个性化体验 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 在消费电子领域,"…...
