JWT渗透与攻防(一)

news2024/11/17 21:54:50

目录

前言

JWT漏洞介绍

案列演示之Leaky_JWT

 JWT漏洞具体的实现方式:

案列演示之JWT None Algorithm

JWT漏洞工具的利用

JWT利用工具介绍

jwt_tool

漏洞利用

jwt-cracker

c-jwt-cracker


前言

Json web token (JWT)相关漏洞对于渗透测试人员而言可能是一种非常吸引人的攻击途径,因为它们不仅是让你获得无限访问权限的关键,而且还被视为隐藏了通往以下特权的途径:特权升级,信息泄露,SQLi,XSS,SSRF,RCE,LFI等,在测试JWT时,通过对目标服务的Web请求中使用的Token进行读取,篡改和签名。

JWT漏洞介绍

什么是身份认证

身份认证(Authentication)又称“身份验证”、“鉴权”,是指通过一定的手段,完成对用户身份的确认。

Web服务目前认证的方式有:session+cookie、jwt、token

Session认证机制 需要配合Cookie才能实现。由于 Cookie默认不支持跨域访问 ,所以,当涉及到前端跨域请求后端接口的时候,需要做 很多额外的配置,才能实现跨域Session认证。

JWT的概念

JWT(英文全称:JSON Web Token)是一个开放标准(RFC 7519),用于在双方之间安全地表示声明。一种无状态的认证机制,通常用于授权和信息交换。是目前 最流行的跨域认证解决方案。

 JWT认证举例:

 如上图,图中的1对应的是Header部分的编码后的样子,2对应的是Payload部分编码后的样子,3对应的是Signature编码后的样子。

JWT的安全性

从安全性的角度来看,至少存在两个潜在的问题。


1、缺乏机密性-我们能够轻松解码有效载荷payload(和报头header)。
2、用户插入另一个操作(例如删除)并绕过授权

案列演示之Leaky_JWT

靶场:https://authlab.digi.ninja/Leaky_JWT

 如图这里因为是靶场所以直接把JWT给爆露出来,实战中我们可以去抓包,如果抓到的数据包中有类似这样的JWT认证,那我们就可以直接拿去解密了。我们拿到的数据是这样的:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsZXZlbCI6ImFkbWluIiwicGFzc3dvcmQiOiIyYWM5Y2I3ZGMwMmIzYzAwODNlYjcwODk4ZTU0OWI2MyIsInVzZXJuYW1lIjoiam9lIn0.6j3NrK-0C7K8gmaWeB9CCyZuQKfvVEAl4KhitRN2p5k

这是一个标准的JWT认证的格式,之前说了JWT格式分为三个部分,分别为Header、Payload、Signature,每个部分之间又以“.”号分割。

他这里的JWT认证是经过base64加密的,所以我们这里先要拿到base64解密网站去解密一下

base64在线加解密网址:http://www.jsons.cn/base64/

Header部分解密:

 Payload部分解密:

我们这里看到了解密出来后的信息,password后面解出来的是一串md5数据,我们拿到md5网站去解密。

MD5在线解密网站:md5在线解密破解,md5解密加密

可以看到我们破解出来后的密码为:Password1

 我们来登录一下:

 显示登陆成功。

 

 JWT漏洞具体的实现方式:

1、算法为none
2、算法修改
3、签名失败问题
4、暴力破解
5、密钥泄露
6、令牌刷新

攻击思路

首先找到需要JWT鉴权后才能访问的页面,如个人资料页面,将该请求包重放测试:
(1)未授权访问:删除Token后仍然可以正常响应对应页面
(2)敏感信息泄露:通过JWt.io解密出Payload后查看其中是否包含敏感信息,如弱加密的密码等
(3)破解密钥+越权访问:通过JWT.io解密出Payload部分内容,通过空加密算法或密钥爆破等方式实现重新签发Token并修改Payload部分内容,重放请求包,观察响应包是否能够越权查看其他用户资料

(4)检查Token时效性:解密查看payload中是否有exp字段键值对(Token过期时间),等待过期时间后再次使用该Token发送请求,若正常响应则存在Token不过期
(5)通过页面回显进行探测:如修改Payload中键值对后页面报错信息是否存在注入,payload中kid字段的目录遍历问题与sql注入问题

案列演示之JWT None Algorithm

我们再来看一下有关于JWT签名算法的一个关卡

我们打开Burpsurite抓包,然后点击 Valite Token。

我们抓到如下数据包:

 然后我们到JSON Web Tokens模块中查看,JSON Web Tokens是BurpSuite的一个扩展模块,他会自动识别有JWT认证的数据包,并处理。

 我们这里可以看到这里的JWT认证已经被解密出来了,是一个经过HS256加密的JWT,payload部分也可以看出很多信息,事实上这里就存在了一个信息泄露的漏洞了。

 我们看到如上图存在一个JWT认证,我们将其Headr部分拿去解密得到:

 我们将其加密方式修改为None:

 

然后将其放到上面在加密:

 得到这么一串数据,再将其替换到原本的数据包格式中:

 然后我们在将payload的部分解密后修改:

 

 修改为:

然后在重新给他加密一下:

 得到这么一串数据,再将其放到原本属于payload的部分:

然后我们得到一个回显,显示签名是错误的:

我们这里直接把它的签名部分删掉,变成如下图所示,再重放包:

原本的用户数据是不是就被我们修改了呢:

对比

原本的:

修改后的:

 

JWT漏洞工具的利用

JWT利用工具介绍

jwt_tool(git clone https://github.com/ticarpi/jwt_tool)可以用来验证、伪造和破解JWT令牌。

jwt-cracker
该工具仅限于单一的签名算法(HS256) ,如果提供了不同的签名算法,则无法进行操作
https://github.com/lmammino/jwt-cracker

c-jwt-cracker
同样是暴力破解 JWT 私钥的工具。
https://github.com/brendan-rius/c-jwt-cracker

jwt_tool

一、安装

git clone https://github.com/ticarpi/jwt_tool

 二、安装依赖

pip install pycryptodomex

三、进入到安装目录

 四、解密

python jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoicm9iaW4iLCJsZXZlbCI6InVzZXIifQ.oYPuxIPnm6lYx3Zx_8zaMGVw7Np5nZtgJVnaMqlZcOQ

 

漏洞利用

1.签名算法可被修改为none(CVE-2015-9235)

使用jwt_tool进行攻击(该工具适用于不改变原有payload的数据的基础上而没有签名算法获得的token)

使用这个漏洞模块可以将原本的加密的算法修改为None,然后我们就可以直接去执行一些越权修改payload等操作。

python3 jwt_tool.py    eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZGVtby5zam9lcmRsYW5na2VtcGVyLm5sXC8iLCJpYXQiOjE2NjI3Mzc5NjUsImV4cCI6MTY2MjczOTE2NSwiZGF0YSI6eyJoZWxsbyI6IndvcmxkIn19.LlHtXxVQkjLvW8cN_8Kb3TerEEPm2-rAfnwZ_h0pZBg  -X a

 得到签名算法为none/NONE/None/nOnE认证的token 。

 2、JWKS公钥 注入 ——伪造密钥(CVE-2018-0114)

jwk是header里的一个参数,用于指出密钥,存在被伪造的风险。 攻击者可以通过以下方法来伪造JWT:删除原始签名,向标头添加新的公钥,然后使用与该公钥关联的私钥进行签名。

python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw      -X i

执行后我们得到了一串很长的密钥,这串密钥删除了原始的签名,在Header中添加了新的公钥,再使用与该公钥关联的私钥进行签名:

 3、空签名(CVE-2020-28042)

从令牌末尾删除签名

python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw         -X n

 

jwt-cracker

该工具仅限于单一的签名算法(HS256) ,如果提供了不同的签名算法,则无法进行操作 。

用法就是命令后面直接加上JWT数据,他会一直给你进行爆破,直到爆破成功。

 

 c-jwt-cracker

c-jwt-cracker是暴力破解 JWT 私钥的工具。

使用c-jwt-cracker需要我们在我们linux里安装好openssl头文件。

apt-get install libssl-dev

下载好c-jwt-cracker,还需要我么在工具所在目录执行make命令。目的是让文件makefile运行起来。编译完后会生成一个jwtcrack文件。

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

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

相关文章

node.js+uni计算机毕设项目店内点餐微信小程序LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

【Pandas入门教程】如何从现有列派生新列

如何从现有列派生新列 来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study 文章目录如何从现有列派生新列导包数据集准备【1】如…

C++——STL之stack和queue详解

C——STL之stack和queue详解🏐什么是stack和queue🏐stack和queue的实现🏀什么是deque🏀stack的模拟实现🏀queue的模拟实现🏐优先级队列(priority_queue)🏀优先级队列的实现⚽push⚽p…

Spring Authorization Server1.0 介绍与使用

一、版本使用 1、Java&#xff1a;17或者更高的版本。 2、springboot 3.0 3、Spring Authorization Server 1.0版本。 <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-authorization-server</ar…

使用proxy_pool来为爬虫程序自动更换代理IP

文章目录1. 前言2. 教程3. 官网4. 在线demo4.1. 本地部署4.2. 安装4.2.1. Python源码构建安装4.2.1.1. 安装redis数据库4.2.1.1.1. 下载redis源码4.2.1.1.2. 启动redis服务4.2.1.1.3. 安装redis服务4.2.1.1.4. 再次通过命令启动redis服务4.2.1.1.5. 测试redis服务是否可用4.2.1…

node.js+uni计算机毕设项目基于微信小程序的车位共享系统LWPPT(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

C语言程序设计--银行管理系统

主界面 登入界面 #include <stdio.h> #include <malloc.h> #include <conio.h> #include <time.h> #include <windows.h> #define MB_ICONINFORMATION MB_ICONASTERISK //对 错误 struct account_information /…

腾讯云轻量应用服务器使用Matomo 应用镜像搭建网站流量统计系统!

Matomo 是一款开源的网站数据统计软件&#xff0c;可以用于跟踪、分析您的网站的流量&#xff0c;同时充分保障数据安全性、隐私性。该镜像基于 CentOS 7.6 64位操作系统&#xff0c;已预置 Nginx、MariaDB、PHP 软件。本文介绍如何使用 Matomo 快速搭建您的网站流量统计系统。…

【文本检测】2、DBNet++ | 为 DBNet 引入多级特征图聚合模块 ASF

文章目录一、背景二、方法2.1 Adaptive Scale Fusion (ASF) 模块2.2 Binarization2.3 Adaptive Threshold2.4 Deformable Convolution2.5 Label Generation2.6 Optimization三、效果论文&#xff1a;Real-Time Scene Text Detection with Differentiable Binarization and Adap…

Hadoop综合项目——二手房统计分析(可视化篇)

Hadoop综合项目——二手房统计分析&#xff08;可视化篇&#xff09; 文章目录Hadoop综合项目——二手房统计分析&#xff08;可视化篇&#xff09;0、 写在前面1、数据可视化1.1 二手房四大一线城市总价Top51.2 统计各个楼龄段的二手房比例1.3 统计各个城市二手房标签的各类比…

人工智能轨道交通行业周刊-第27期(2022.12.12-12.25)

本期关键词&#xff1a;虚拟中台、智轨、数字员工客服、钢轨光带异常、小目标检测 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨…

4、前端笔记-JS-数据类型

1、数据类型简介 1.1为什么需要数据类型 不同的数据占用的存储空间不同&#xff0c;为了充分利用存储空间&#xff0c;便于把数据分成所需内存大小不同的数据&#xff0c;定义了不同的数据类型 1.2变量的数据类型 js是弱类型&#xff08;动态语言&#xff09;的语言&#x…

这12类Oracle日期函数,全都给你总结了

在使用Oracle数据库过程中&#xff0c;对日期的使用不可避免&#xff0c;那Oracle中的日期函数有哪些呢&#xff1f;本篇就日期函数进行整理了&#xff0c;不一定全部了解记住&#xff0c;但是要做到心中有数&#xff0c;以后在写脚本的时候就不会绕弯子了。 1、sysdate、curr…

大话设计模型 Task05 状态、适配、单例

目录一、状态模式问题描述问题分析模式定义代码实现二、适配器模式问题描述问题分析模式定义代码实现三、单例模式问题描述问题分析模式定义代码实现一、状态模式 问题描述 假设我们要描述一名员工一天不同时间的工作状态&#xff0c;正常来看是比较简单的&#xff0c;直接从…

卡塔尔世界杯半自动越位识别技术(SAOT)的工作原理

随着卡塔尔世界杯的深入举行&#xff0c;半自动越位识别技术 (Semi-automated offside technology&#xff0c;简称为 SAOT) 这项数字技术正在被越来越多的国内外球迷所熟知。 作为 VAR(Video Assistant Referee&#xff0c;视频助理裁判) 的扩展&#xff0c;SAOT 的引入是为了…

腾讯云轻量应用服务器使用 OpenFaaS 部署云函数!

OpenFaaS 是开源的流行 FaaS&#xff08;Function-as-a-Service&#xff0c;函数即服务&#xff09;框架&#xff0c;OpenFaaS 让开发者聚焦业务代码的编写&#xff0c;无需过多关注语言框架、部署、配置等其他步骤。 轻量应用服务器 Lighthouse 为您提供了 OpenFaaS 应用镜像…

C语言程序设计--个人账簿管理系统

目的在于&#xff1a; 为编码人员提供依据&#xff1b;为修改、维护提供条件&#xff1b;项目负责人将按计划书的要求布置和控制开发工作全过程&#xff1b;项目质量保证组将按此计划书做阶段性和总结性的质量验证和确认。 本说明书的预期读者包括&#xff1a; 项目开发人员&…

车用DC-DC模块 1224V转5V2A过认证大塑料外壳

名称&#xff1a;车用12V转5V2A电源转换器 型号&#xff1a;LM40J5V2A3S 性质&#xff1a;非隔离型的BUCK电源转换器&#xff0c; 特点&#xff1a;采用集成IC设计&#xff0c;具有转换效率高&#xff0c;体积小&#xff0c;稳定可靠的特点&#xff0c;采用灌胶工艺&#xf…

Arcgis使用教程(十三)ARCGIS地图制图之地图输出参数设置详解

目录 1.加载数据 2.页面大小设置 2.1 根据页面大小设置地图 2.2 根据固定比例尺设置页面大小 1.加载数据 在Arcmap中加载中国矢量图层数据&#xff08;中国省级行政区图&#xff0c;国界线两个图层&#xff09;&#xff0c;切换到Layout View窗口&#xff0c;设置地图符号要…

jvm-sandbox-repeater环境搭建

引流回放这个技术现在真的越来越成为了很多公司测试同学必备的一个工具了。当然引流回放的技术有很多&#xff0c;比如下来会提到的jvm-sandbox-repeater。 当然你也可以通过日志分析解析的方式去获取到请求返回的信息等。因为刚听过testerhome开发者大会&#xff0c;好几个主题…