Burp靶场JWT学习笔记1

JWT(JSON Web Token)

从其名字就可以看出来,它具有表示身份的作用,其本质是将用户信息储存到一串json字符串中再将其编码得到一串token

JWT由三部分组成,分别是

Header,Payload,Signatrue

JWT=Base64(Header).Base64(Payload).加密函数(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

例如: 

Header部分

{

"kid":"4ff7ccb9-58a2-47de-8f91-cfc7582ebe41",

"alg":"RS256"

}

 Payload部分

{

"iss":"portswigger",

"exp":1745253912,

"sub":"administrator"

}

Signature部分

#一大堆加密后的信息(签名)

u9e8ddhECxkGzuvGk9u78LcmBmLK4apCDh84l2BgYjauMcWkzSF2A9rqDEzqdBDiBMyHkUYeLiVF7Nu7km94PfMskQlIeVxuSF0MxI3a7I53mJ7woT3ypQm3Jw6VAOlqapLEC7VRa3Vfgv7H_dJpbFJkrHwE9KfW3TzdQeVAz-QKglJritq5WAPXP4oGAu5lSK8QUVECvUcnTYYzGS_TYYuOewbqgiq1w_dm5wn0M1LEYu1QM1fu7l8kOcDnkw7nMxeBM3iiZpAESvhd2myN_MCuIFFkC5OKghsWqIRehMKG3qR1X2YWnem04_ki6YMRA1jqEcvp5acH58rhGrDEyQ

1.JWT authentication bypass via unverified signature

本关要求我们进入管理员界面/admin并且删除用户carlos

我们访问admin,会发现提示只有administrator可以访问

那么我们登录wiener用户并且抓包,在放行了第一个包后第二个抓到的包就是我们所要的包

我们要去到管理员的/admin界面,就需要以管理员身份去访问

先登录到我们的账号wiener

这一步的目的是先让我们得到自己的cookie以查看jwt信息以让我们可以去分析其构成

再访问/admin界面,同时抓包

我们在burp里双击jwt的内容可以在inspector栏里看到对应的信息以及对应的解码结果,这里我们就查看payload信息,也就是第一个句点.后的内容,可以看到里面有个sub参数对应的值为wiener

我们将其修改为administrator后应用

再放行这个包会发现访问/admin成功,网站将我们认成了administrator

我们要删除carlos用户,执行删除操作也要以管理员的身份执行,具体方法和前面一样,抓包修改jwt信息为administrator

放行后成功过关

2.JWT authentication bypass via flawed signature verification

本关要求也和上一关一样要去/admin里删除carlos

但是本关还会校验jwt里的签名信息,所以单单修改用户名是没有用的,我们还是先登录wiener用户然后访问/admin再抓包

修改payload部分里的用户名为administrator

再修改header里的加密方式为none

修改为none后我们需要把jwt里的签名信息给删掉,但别把句点.也删了,不然jwt格式错误

随后放行,发现成功访问admin界面

删除carlos时也要重复前面一样的操作

放行后成功过关

3.JWT authentication bypass via weak signing key

本关要求也一样是删除carlos

同时将签名加密类型修改为none给过滤掉了,也就是不得不破解加密用的密钥了,并且本关也是提示弱签名,可以爆破

同样的步骤登录账号,访问/admin然后抓包,此时将jwt信息复制出来,使用hashcat工具破解

使用命令

hashcat -a 0 -m 16500 <jwt信息> <爆破字典>

得到密钥为secret1

于是前往json编辑网站JSON Web Tokens - jwt.io进行修改

将原有的jwt复制进去后修改decoded的内容,encoded的内容就是我们要的

将其替换原有的jwt

放行后成功绕过验证

再以一样的操作删除carlos用户

放行后成功过关

4.JWT authentication bypass via jwk header injection

本关也一样要求在/admin下删除carlos

并且本关也同样限制了none加密方式,同时加密很复杂很难爆破,那么根据本关题目提示,应该是通过修改jwt的header部分实现绕过,题目提示服务器支持jwk也就是JSON Web Key,它可以作为jwt里header的一部分,在这里用于数字签名身份验证

一下就是一串jwk结构(以RSA为例)

{"kty": "RSA",           // 密钥类型(RSA/EC/oct)"alg": "RS256",         // 算法(如 RS256、ES256、HS256)"kid": "2023-01",       // 密钥唯一标识(用于轮换)"n": "Modulus...",      // RSA 模数(Base64URL)"e": "AQAB",            // RSA 公钥指数(通常为 65537)"d": "PrivateExponent", // 私钥参数(仅私钥包含)"p": "Prime1",          // 私钥参数(仅私钥包含)"q": "Prime2",          // 私钥参数(仅私钥包含)"use": "sig",           // 用途(sig 签名/enc 加密)
}

如果服务器没有对用于验证的公钥做筛选(比如白名单),我们可以通过构造管理员的签名来欺骗服务器认为我们是administrator

一样我们先登录wiener,然后抓取前往/admin的包

我们这里要先安装一个burp插件叫做JWT editor

安装后我们抓的包会发现多了一栏选项叫做json web token也就是jwt

我们要构造jwk,就需要用到jwt editor来生成一个rsa密钥

进入jwt editor界面在右边选择new rsa key

选择类型为JWK,然后生成

随后我们要先修改我们的身份信息为administrator

然后在json web token栏内的攻击方式里选择Embedded JWK(嵌入式JWK)

注意要先修改身份信息在配置攻击方式,不然jwk验证出来会是修改之前的wiener

随后选择我们刚生成的rsa密钥,通过kid来选择

确认后可以看到我们的JWT信息已经被修改

随后放行,发现我们已经成功进入/admin了

然后删除carlos,也使用和前面一样的操作,密钥就不用重新生成了

注意要先修改身份信息再配置攻击模式

放行后成功过关

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

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

相关文章

第53.5讲 | 小项目实战:用 SHAP 值解释农作物产量预测模型 [特殊字符][特殊字符]

目录 ✅ 项目背景 &#x1f4e6; 所用工具 &#x1f4c1; 数据字段&#xff08;模拟&#xff09; &#x1f9d1;‍&#x1f4bb; 代码实现步骤 &#x1f3af; 解读与启发 &#x1f9e0; 项目拓展建议 ✅ 项目背景 我们使用一个简化的玉米产量数据集&#xff08;可模拟实…

极狐GitLab 合并请求依赖如何解决?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 合并请求依赖 (PREMIUM ALL) 在极狐GitLab 16.6 中引入了对复杂合并依赖关系的支持&#xff0c;通过名为 remove_mr_blockin…

Django DRF实现用户数据权限控制

在 Django DRF 中使用 ModelViewSet 时&#xff0c;若需实现用户仅能查看和操作自己的数据详情&#xff0c;同时允许所有认证用户访问列表&#xff0c;需结合权限类和动态权限分配。以下是具体步骤&#xff1a; 1. 自定义对象权限类 创建一个 IsOwner 权限类&#xff0c;检查…

【数据结构】——线性表之单链表

一、单链表的概念和结构 1、单链表的概念&#xff1a; 链表也是属于我们的线性表中的一种&#xff0c;其物理结构上是不一定连续的&#xff0c;但是逻辑结构上是一定连续的&#xff0c;所以其是没办法像前面的顺序表一样通过找到下一个元素的&#xff0c;其是通过指针来找到下…

线程函数库

pthread_create函数 pthread_create 是 POSIX 线程库&#xff08;pthread&#xff09;中的一个函数&#xff0c;用于创建一个新的线程。 头文件 #include <pthread.h> 函数原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*s…

2.5 桥梁桥面系及附属结构施工

2.5.1 桥面系施工 1.排水设施 设置纵横坡及泄水孔&#xff0c;减少桥面积水、防排结合。汇水槽、泄水孔顶面高程低于桥面铺装10-15mm。泄水孔边缘设渗水盲沟泄水管下端至少应伸出构筑物底面100-150mm。泄水管通过竖向管道直接引至地面或雨水管线。竖向管道抱箍、卡环、定位卡…

docker 代理配置冲突问题

问题描述 执行 systemctl show --property=Environment docker 命令看到有如下代理配置 sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://127.0.0.1:65001 HTTPS_PROXY=http://127.0.0.1:65001 NO_PROXY=127.0.0.1,docker.io,ghcr.io,uhub…

MATLAB基础应用精讲-【基础知识篇】发布和共享 MATLAB 代码

目录 MATLAB发布代码---生成文档pdf 分节符对发布文件的分节 实时脚本 Matlab workspace与m脚本数据共享 发布和共享 MATLAB 代码 在实时编辑器中创建和共享实时脚本 发布 MATLAB 代码文件 (.m) 添加帮助和创建文档 发布 MATLAB 代码文件 (.m) 可创建包括您的代码、注释…

JDBC 批处理与事务处理:提升数据操作效率与一致性的密钥

目录 一. JDBC批量添加数据 1. 什么是批量添加数据 2. 实现数据的批量添加 a. 方式一&#xff1a;不分块 二. JDBC事务处理 1. 什么是事务 2. JDBC事务处理实现 三. 总结 前言 本文来讲解JDBC的批处理和事务处理 这对数据的安全性和准确性以及高效率提供很好的办法 话不…

C++实现Atbash密码

详细说明 埃特巴什密码是一种替换密码&#xff0c;在该密码中字母表中的字母是反向对应的。例如&#xff0c;A 会被替换为 Z&#xff0c;B 会被替换为 Y&#xff0c;依此类推。 #include <cassert> /// for assert #include <iostream> /// for IO operations #…

QuecPython+GNSS:实现快速定位

概述 QuecPython 结合 GNSS&#xff08;全球导航卫星系统&#xff09;模块为物联网设备提供开箱即用的定位能力解决方案。该方案支持 GPS/北斗/GLONASS/Galileo 多系统联合定位&#xff0c;为物联网开发者提供从硬件接入到云端服务的全栈式定位解决方案。 优势特点 多体系定…

leetcode刷题日记——逆波兰表达式求值

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 借助栈的特性&#xff0c;遇见数字就将这个数压入栈内&#xff0c;遇见符号&#xff0c;就从栈中弹出两个数&#xff0c;进行相应的运算&#xff0c;然后将结果压入栈中运行如下 int evalRPN(char** tokens, int tokensSize…

firewalld 详解

firewalld 详解 firewalld 是 Linux 系统中一个动态防火墙管理工具&#xff0c;取代了传统的 iptables&#xff0c;提供更灵活、动态的规则配置&#xff0c;支持运行时修改且无需重载服务。以下是其核心概念、常用操作及示例指南&#xff1a; 一、核心概念 区域&#xff08;Zo…

面向高性能运动控制的MCU:架构创新、算法优化与应用分析

摘要&#xff1a;现代工业自动化、汽车电子以及商业航天等领域对运动控制MCU的性能要求不断提升。本文以国科安芯的MCU芯片AS32A601为例&#xff0c;从架构创新、算法优化到实际应用案例&#xff0c;全方位展示其在高性能运动控制领域的优势与潜力。该MCU以32位RISC-V指令集为基…

支付宝小程序组件与页面构造器使用指南:从页面到组件的正确迁移

引言 在支付宝小程序开发中&#xff0c;我们经常会遇到需要将页面组件化的情况。本文将通过一个实际案例&#xff08;将 /pages/plugin/device 从页面迁移到组件&#xff09;&#xff0c;深入分析支付宝小程序中页面和组件的区别&#xff0c;以及正确的迁移方式。我们将从问题…

26-算法打卡-字符串-右旋字符串-第二十六天

1 题目说明 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k&#xff0c;请编写一个函数&#xff0c;将字符串中的后面 k 个字符移到字符串的前面&#xff0c;实现字符串的右旋转操作。 例如&#xff0c;对于输入字符串 &qu…

fastbev mmdetection3D 角度和方向损失

角度/方向损失 sin(a−b)sinacosb−cosasinb config参数 dir_offset0.7854, # pi/4 dir_limit_offset0, box编解码 # Copyright (c) OpenMMLab. All rights reserved. import torchfrom mmdet.core.bbox import BaseBBoxCoder from mmdet.core.bbox.builder import BBOX_COD…

极狐GitLab 如何 cherry-pick 变更?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 拣选(cherry-pick)更改 (BASIC ALL) 在 Git 中&#xff0c;cherry-pick 是从一个分支获取一个提交并将其添加为另一个分支的…

java多线程(7.0)

目录 ​编辑 定时器 定时器的使用 三.定时器的实现 MyTimer 3.1 分析思路 1. 创建执行任务的类。 2. 管理任务 3. 执行任务 3.2 线程安全问题 定时器 定时器是软件开发中的一个重要组件. 类似于一个 "闹钟". 达到一个设定的时间之后, 就执行某个指定好的…

优化非线性复杂系统的参数

非线性项组合的系统 对于系统中的每一个复杂拟合&#xff0c;即每一个残差函数&#xff0c;都能表示为非线性方程的趋势&#xff0c;例如较为复杂的系统函数组&#xff0c; from optimtool.base import sp, np x sp.symbols("x1:5") res1 0.5*x[0] 0.2*x[1] 1.…