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,也使用和前面一样的操作,密钥就不用重新生成了
注意要先修改身份信息再配置攻击模式
放行后成功过关
相关文章:

Burp靶场JWT学习笔记1
JWT(JSON Web Token) 从其名字就可以看出来,它具有表示身份的作用,其本质是将用户信息储存到一串json字符串中再将其编码得到一串token JWT由三部分组成,分别是 Header,Payload,Signatrue JWTBase64(Header).Base6…...

C++?类和对象(下)!!!
一、前言 在之前我们已经讨论过了有关类和对象的前置知识以及类中的六大默认成员函数,在本期我们继续再讨论类和对象中剩余的友元、初始化列表等相关知识,如果需要再了解之前的知识的话,链接奉上:C?类和对象࿰…...

FastAPI 零基础入门指南:10 分钟搭建高性能 API
一、为什么选择 FastAPI? 想象一下,用 Python 写 API 可以像搭积木一样简单,同时还能拥有媲美 Go 语言的性能,这个框架凭借三大核心优势迅速风靡全球: 开发效率提升 3 倍:类型注解 自动文档,…...
prometheus通过Endpoints自定义grafana的dashboard模块
1、prometheus自定义的dashboard模块 文件路径/etc/prometheus/config_out/prometheus-env.yaml - job_name: serviceMonitor/monitoring/pfil/0honor_labels: falsekubernetes_sd_configs:- role: endpointsnamespaces:names:- monitoringrelabel_configs:- source_labels:- …...

机器人新革命:Pi 0.5如何让智能走进千家万户
在科技飞速发展的今天,机器人技术正在以一种令人惊喜的方式贴近我们的生活。最近,Physical Intelligence 公司推出了 Pi 0.5 版本,这一创新设计不仅颠覆了传统机器人的运作模式,更让我们看到了未来智能设备融入日常生活的无限可能…...
std::mutex底层实现原理
std::mutex是一个用于实现互斥访问的类,其具备两个成员函数——lock和unlock 锁的底层实现原理 锁的底层实现是基于原子操作的,这些原子操作是由指令支持的,因为单个指令是不能被中断的 一些与锁的实现有关的原子指令为: 待补充…...

从数据结构说起(一)
1 揭开数据结构神奇的面纱 1.1 初识数据结构 在C的标准库模板(Standard Template Library,STL)课程上,我初次结识了《数据结构》。C语言提供的标准库模板是面向对象程序设计与泛型程序设计思想相结合的典范。所谓的泛型编程就是编写不依赖于具…...
【后端】构建简洁的音频转写系统:基于火山引擎ASR实现
在当今数字化时代,语音识别技术已经成为许多应用不可或缺的一部分。无论是会议记录、语音助手还是内容字幕,将语音转化为文本的能力对提升用户体验和工作效率至关重要。本文将介绍如何构建一个简洁的音频转写系统,专注于文件上传、云存储以及…...
矫平机终极指南:特殊材料处理、工艺链协同与全球供应链管理
一、特殊材料矫平:挑战与创新解决方案 1. 高温合金(如Inconel 718)处理 技术难点: 屈服强度高达1100 MPa,传统矫平力不足 高温下易氧化,需惰性气体保护环境 解决方案: 采用双伺服电机驱动&a…...
云服务器 —— 公有 IP 与 私有 IP
云服务器的 公有 IP 和 私有 IP 在网络架构中扮演不同的角色,具体用途和区别如下: 目录 1. 公有 IP(Public IP) 作用: 特点: 示例场景: 2. 私有 IP(Private IP) 作用…...

Git基本使用(很详细)
一:Git 概述 1.1 定义:分布式版本控制系统 1.2 版本控制 (1)定义: 版本控制时一种记录文件内容变化,以便将来查阅特定版本修订情况的系统 (2)举例 多副本 优化: 不使用多…...
【人工智能】基于Python和Transformers库构建高效问答系统的实践与实现**
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着自然语言处理(NLP)的发展,问答系统成为了人工智能应用中的一个重要领域。近年来,预训练模型如BERT、GPT、T5等,通过大规模数据的预…...

仓颉编程语言最佳实例 “Hello, world!”
仓颉编程语言最佳实例 “Hello, world!” The Best Practice to Cangjie Programming Language - “Hello, world!” BY JACKSON 1. 仓颉集成开发工具(IDE)安装 打开Chrome浏览器,访问仓颉编程语言官网:https://cangjie-lang.…...
【机器学习-线性回归-3】深入浅出:简单线性回归的概念、原理与实现
在机器学习的世界里,线性回归是最基础也是最常用的算法之一。作为预测分析的基石,简单线性回归为我们理解更复杂的模型提供了完美的起点。无论你是机器学习的新手还是希望巩固基础的老手,理解简单线性回归都至关重要。本文将带你全面了解简单…...

[mysql]窗口函数
目录 窗口函数: 为何要学习窗口函数,与mysql5.7实现语句对比 现在我们介绍一下窗口函数: 函数规则 1序号函数 2分布函数 3前后函数 5其他函数 总结 窗口函数: 首先数据库的迁移是非常慢的,大家学习新特性的时候要考虑自己公司的数据库版本是不是和自己学习的吻合 为何…...

内存四区(栈)
今天我再次学到了有趣的知识,内存四区! 内存四区分为代码区,全局区,栈区,堆区,今天我们详细来讲讲栈区! 内存四区和栈区都是用来存放数据的,而栈区存放的数据具体有两类 1.形参数…...

新零售行业时代:如何用科技驱动传统零售的转型升级
新零售行业时代:如何用科技驱动传统零售的转型升级 “在变化的世界中,唯一不变的是变化本身。” 一、传统零售的困局:当“生存”成为一场鏖战 街角的便利店老板老王,每天凌晨4点起床进货,却在月…...

长途骑行装备攻略:VELO维乐 Angel Revo坐垫伴我畅享旅途
工作忙碌了很久,终于迎来了一个难得的假期。我决定和朋友一起踏上一场长途骑行之旅,远离城市的喧嚣,去寻找那份久违的宁静与自由。这次旅行,不仅是为了旅途风景的放松,更是为了体验一场身体与心灵的挑战。而朋友推荐的…...
WebcamJS中文文档
文章目录 WebcamJS针对Chrome 47及以上版本的重要说明浏览器支持演示示例开源协议快速入门指南配置初始化拍摄照片自定义图像大小裁剪图像翻转图像(镜像模式)冻结/预览图像设置备用SWF文件位置重置(关闭)API 参考自定义事件向服务器提交图像跟踪上传进度包含在现有表单中自…...
用Python做有趣的AI项目1:用 TensorFlow 实现图像分类(识别猫、狗、汽车等)
项目目标 通过构建卷积神经网络(CNN),让模型学会识别图片中是什么物体。我们将使用 CIFAR-10 数据集,它包含 10 类:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。 🛠️ 开发环境与依赖 安装依赖&…...

微软官网Win10镜像下载快速获取ISO文件
如何从微软官网轻松下载win10镜像?win10镜像的下载方式主要包括两种: 目录 一:借助官方工具 二:直接微软官网通过浏览器进行下载。 三:实现方法与步骤: 1:利用微软官方提供的MediaCreationT…...
Python循环结构深度解析与高效应用实践
引言:循环结构在编程中的核心地位 循环结构作为程序设计的三大基本结构之一,在Python中通过while和for-in两种循环机制实现迭代操作。本文将从底层原理到高级应用,全面剖析Python循环机制的使用技巧与优化策略,助您掌握高效迭代的…...
springboot入门-controller层
在 Spring Boot 中,Controller 层是处理 HTTP 请求的核心组件,负责接收客户端请求、调用业务逻辑(Service 层)并返回响应。其核心原理基于 Spring MVC 框架,通过注解驱动的方式实现请求的路由和参数绑定。以下是 Contr…...
SpringBoot技术概述与应用实践
一、SpringBoot简介 SpringBoot是由Pivotal团队开发的一个基于Spring框架的开源框架,旨在简化Spring应用的开发与部署。它通过约定大于配置的理念,减少了配置复杂性,并通过内嵌式服务器的支持,使得开发者可以更方便地创建独立运行…...

逆向|dy|a_bogus|1.0.1.19-fix.01
2025-04-26 请求地址:aHR0cHM6Ly93d3cuZG91eWluLmNvbS91c2VyL01TNHdMakFCQUFBQV96azV6NkoyMG1YeGt0eHBnNkkzRVRKejlyMEs3d2Y2dU9EWlhvd2ttblZWRnB0dlBPMmMwN2J0WFotcVU4V3M 个人主页的视频数据 我们需要逆向这个接口,所以现在需要分析这个请求, 分析这几个数据包可以发现: 只有…...
golang的cgo的一点小心得
最后有个项目需要涉及到cgo,在这块以前用的不多, 这次略微用得深入了一点,记下来几点以备以后使用 本质上cgo去用的时候就是遵守一些ABI而已,总体而言,尽量避免复杂结构的来回传递。1 对于变长参数,只有…...
第三方测试机构如何保障软件质量并节省企业成本?
在软件行业,第三方测试机构扮演着极其重要的角色。他们提供独立且专业的测试服务,目的是为了保障软件的质量以及提升用户的使用体验。 专业独立 测试机构拥有经验丰富的测试员和严谨的测试流程。他们会对软件各项功能进行细致检验,力求不放…...

高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
目录 思路"情境 对象 问题"型 课题选题的类型有哪些呢?这要从课题题目的构成说起。通过对历年来国家社会科学基金立项项目进行分析,小编发现,课题选题类型非常丰富,但一般是围绕限定词、研究对象和研究问题进行不同的组…...

springboot项目配置nacos,指定使用环境
遇到这样一个问题,在开发、测试、生成环境之间切换的问题。 大多数的操作是通过修改spring.profiles.active来确定指向使用的环境配置文件,对应项目中需要增加对应的配置文件。 但是现在几乎所有公司都会有代码管理不管是SVN、git,这样就会涉…...

DIFY 浅尝 - DIFY + Ollama 添加模型
准备物料 Dify 本地部署 Ollama 下载 Open WebUI 好了现在,假设访问 http://localhost/apps 应该可以打开 Dify,设置用户登录后应该可以看到以下界面 打开 http://localhost:3000/, 你应该可以看到部署好的Open WebUI,并假设有下载好你感…...