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

Web攻防-身份验证篇JWT令牌空密钥未签名密钥爆破JWKJWUKID算法替换CVE报告复盘

知识点:
1、WEB攻防-JWT令牌-组成&识别&检测&安全
2、WEB攻防-JWT令牌-空算法&未签名&爆破密钥
3、WEB攻防-JWT令牌-JWK&JWU&KID&加密替换&CVE&报告复盘

在这里插入图片描述
在这里插入图片描述
JSON Web Token(JWT)。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。这使得JWT成为高度分布式网站的热门选择,在这些网站中,用户需要与多个后端服务器无缝交互。

文章参考:https://blog.csdn.net/weixin_44288604/article/details/128562796

一、演示案例-WEB攻防-JWT令牌-组成&识别&检测&安全

JWT组成

1、标头(Header)

HeaderJWT的第一个部分,是一个JSON对象,主要声明了JWT的签名算法,如"HS256”、"RS256"等,以及其他可选参数,如"kid"、"jku"、"x5u"
alg字段通常用于表示加密采用的算法。如"HS256"、"RS256"
typ字段通常用于表示类型
还有一些其他可选参数,如"kid"、"jku"、"jwk"

2、有效载荷(Payload)

PayloadJWT的第二个部分,这是一个JSON对象,主要承载了各种声明并传递明文数据,用于存储用户的信息,如id、用户名、角色、令牌生成时间和其他自定义声明。
iss:该字段表示jwt的签发者。
sub:该jwt面向的用户。
aud:jwt的接收方。
exp:jwt的过期时间,通常来说是一个时间戳。
iat:jwt的签发时间,常来说是一个时间戳。
jti:此jwt的唯一标识。通常用于解决请求中的重放攻击。该字段在大多数地方没有被提及或使用。因为使用此字段就意味着必须要在服务器维护一张jti表, 当客户端携带jwt访问的时候需要在jti表中查找这个唯一标识是否被使用过。使用这种方式防止重放攻击似乎让jwt有点怪怪的感觉, 毕竟jwt所宣称的优点就是无状态访问

3、签名(Signature)

Signature是对HeaderPayload进行签名加密,具体是用什么加密方式写在Headeralg 中。同时拥有该部分的JWT被称为JWS,也就是签了名的JWT
HeaderPayload进行签名,具体是用什么加密方式写在Headeralg中。
同时拥有该部分的JWT被称为JWS,也就是签了名的JWT

第一部分:对 JSON 的头部做 base64 编码处理得到
第二部分:对 JSON 类型的 payloadbase64 编码处理得到
第三部分:分别对头部和载荷做base64编码,并使用.拼接起来
使用头部声明的加密方式,对base64编码前两部分合并的结果加盐加密处理,作为JWT(算法密钥是在第三部分)

HS256:对称性加密(同一的密钥加密和解密) 可以采用爆破密钥攻击
RS256:非对称性加密(公钥和私钥,私钥解密或加密,公钥加密或解密)

JWT识别-人工识别

在这里插入图片描述
在这里插入图片描述

JWT识别-工具插件识别检测

1、Hae(识别)

项目地址:https://github.com/gh0stkey/HaE/
在这里插入图片描述
在这里插入图片描述

2、JSON Web Tokens(识别解析修改)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、JWT Editor(识别解析修改)

在这里插入图片描述
在这里插入图片描述

4、jwt-scanner(漏洞检测)

项目地址:https://github.com/CompassSecurity/jwt-scanner
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、jwt_tool 综合利用工具(漏洞探测和密钥爆破)

项目地址:https://github.com/ticarpi/jwt_tool

6、jwt-secrets(jwt爆破字典)

项目地址:https://github.com/wallarm/jwt-secrets

7、Venom-JWT(漏洞探测和密钥爆破)

项目地址:https://github.com/z-bool/Venom-JWT
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JWT在线解析

https://jwt.io/
在这里插入图片描述
在这里插入图片描述

JWT安全

首先找到需要JWT鉴权后才能访问的页面,如个人资料页面,将请求重放测试:
1)未授权访问:删除Token后仍然可以正常响应对应页面。
2)敏感信息泄露:通过JWt.io解密出Payload后查看其中是否包含敏感信息,如弱加密的密码等。
3)破解密钥+越权访问:通过JWT.io解密出Payload部分内容,通过空加密算法或密钥爆破等方式实现重新签发Token并修改Payload部分内容,重放请求包,观察响应包是否能够越权查看其他用户资料。
4)检查Token时效性:解密查看payload中是否有exp字段键值对(Token过期时间),等待过期时间后再次使用该Token发送请求,若正常响应则存在Token不过期。
5)通过页面回显进行探测:如修改Payload中键值对后页面报错信息是否存在注入,payloadkid字段的目录遍历问题与sql注入问题。

二、演示案例-WEB攻防-JWT令牌-空算法&未签名&爆破密钥

1、实验:通过未验证的签名绕过JWT身份验证(无签名校验)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、实验:通过有缺陷的签名验证绕过JWT身份验证(空加密算法)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、实验:通过弱签名密钥绕过JWT身份验证(爆破密钥)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
爆破出密匙之后肯定要重新生成JWT呀,如何重新生成?
1、BURP插件-JSON Web Tokens
在这里插入图片描述
在这里插入图片描述
2、使用 JWT在线解析生成:
https://jwt.io/
在这里插入图片描述

三、演示案例-WEB攻防-JWT令牌-JWK&JWU&KID&加密替换&CVE&报告复盘

1、实验:通过jwk标头注入绕过JWT身份验证

有些 JWT 验证库或者配置不当的服务端,在验证签名时,会优先使用 JWT 标头里自带的 jwk 参数提供的公钥,而不是使用服务器自己配置好的、信任的公钥(比如从固定文件或URL获取的)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、实验:通过jku标头注入绕过JWT身份验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、实验:通过kid头路径遍历绕过JWT身份验证

文章参考:https://blog.csdn.net/weixin_44288604/article/details/128562796

4、实验:算法混淆

Web349(公钥私钥泄露)

在这里插入图片描述
这里可以使用专门的js ide打开相关源码文件,看的比较清楚。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
公钥私钥泄露,访问/private.key、/public.key得到公钥密钥。
在这里插入图片描述
在这里插入图片描述
源码中私钥生成jwt,利用公钥解密jwt,只需要有私钥就可以重新生成JWT

使用python脚本来生成JWTimport jwt
public = open('private.key', 'r').read()
payload={"user":"admin"}
print(jwt.encode(payload, key=public, algorithm='RS256'))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意源码中公匙解密的条件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Web350(密钥混淆攻击RS256=>HS256)

在这里插入图片描述
在这里插入图片描述
这里可以使用专门的js ide打开相关源码文件,看的比较清楚。
在这里插入图片描述
在这里插入图片描述
RS256算法改为HS256(非对称密码算法=>对称密码算法)
HS256算法使用密钥为所有消息进行签名和验证。
RS256算法则使用私钥对消息进行签名并使用公钥进行身份验证。
在这里插入图片描述

test.jsvar jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('./public.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'HS256' });
console.log(token)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、InfluxDB JWT未授权漏洞(CVE-2019-20933

文章参考:https://mp.weixin.qq.com/s/obiU3BaFoZ7272z2vS0QgQ
在这里插入图片描述
在这里插入图片描述

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo0MDcyNjE1MzE0fQ.mwI2P1j8CIvhxBKFvcyU7TNLBeuFtiUM1mPrKanF1w4
Content-Type: application/x-www-form-urlencodeddb=sample&q=show users

在这里插入图片描述

6、报告复盘

https://mp.weixin.qq.com/s/ITVFuQpA8OCIRj4wW-peAA
https://mp.weixin.qq.com/s/xuY1oTwFcM1pyiql0U3NPQ
https://mp.weixin.qq.com/s/AVW8DsnLiviopeJYQYKC3A
https://mp.weixin.qq.com/s/st0xma6KoRbo1NUp9rtZhw
https://mp.weixin.qq.com/s/9OL5jZK7S1MiEUb8Q_F1Pw

http://www.dtcms.com/a/288060.html

相关文章:

  • 在Vscode中使用Kimi K2模型:实践指南,三分钟生成个小游戏
  • TypeScript 中的「类」:从语法到实战的完整指南
  • 论C/C++的条件编译#if、#ifdef、#ifndef、#undef
  • Promise入门
  • 三级知识点汇总(详解)【c++】——2
  • 我用Cursor,1周上线了一个虚拟资料流量主小程序技术选型
  • Linux“一切皆文件“设计哲学 与 Linux文件抽象层:struct file与file_operations的架构解析
  • 【ChatOpenAI】常用方法详解
  • HOT100——动态规划篇Leetcode221. 最大正方形
  • C++ std::thread线程类 相关问题、函数总结
  • 单调队列深度解析(下)
  • 如何解决 ‘NoneType‘ object has no attribute ‘get‘问题
  • GA-BP遗传算法优化BP神经网络数据生成,采用SVM分类模型评估
  • LM317 芯片推荐电路中保护二极管工作原理
  • 教育科技内容平台的用户定位与产品方案:从需求到解决方案的精准匹配
  • prometheus UI 和node_exporter节点图形化Grafana
  • GaussDB 数据库架构师修炼(六) 集群工具管理-1
  • 农经权二轮延包—批量出图片
  • 了解.NET Core状态管理:优化技巧与常见问题解决方案
  • 第4章 数据的排序、筛选和分类汇总
  • 金融系统AIGC能力中心赋能实战指南
  • 告别 T+1!解密金融级实时数据平台的构建与实践
  • RK3568 Linux驱动学习——SDK安装编译
  • 浅谈Rust语言特性
  • [C/C++安全编程]_[中级]_[如何避免出现野指针]
  • MySQL 写入性能优化全攻略(附 GitHub 面试题项目链接)
  • 相机参数的格式与作用
  • 大语言模型置信度增强实战指南
  • 第 3 篇:《WHERE 就是刷选项——像点外卖一样精确筛房!》
  • 【硬件】嵌入式问题