CTF比赛中JWT漏洞的利用

前言

在最近的ctf比赛中,经常可以碰到一些jwt相关的题目,然后感觉思路挺有意思,拿出来分享一下,后边也总结一下ctf比较常见的集jwt相关题目解题思路

算法混淆漏洞

腾龙杯 web[这又是一个登录页面]

使用zkaq/zkaq登录之后,又跳到了一个登录页面。账号密码我用的是admin/admin(随便输入的)

之后会跳转到http://ckqongk8.lab.aqlab.cn/fl4g页面,告诉我们只有`@dministr@t0r`用户可以访问

解题思路

用yakit抓一下这个页面的登录包看看

很容易可以看出来是jwt做的身份校验,解密发现使用的算法是RSA256

使用的事RSA算法,弱密钥有点不太现实,试了一下另外两个jwt简单绕过:未对签名进行验证、未对加密算法进行强验证,不过都没成功

原理挺简单的,可以看看我之前的文章奇安信攻防社区-JWT渗透姿势 (butian.net)

后边经过测试在robots.txt拿到了公钥

然后就想起之前打过的一个靶场,大概思路就是对签名方法过滤不严

比如:

function verify(token, secretOrPublicKey){ algorithm = token.getAlgHeader(); if(algorithm == "RS256"){ // Use the provided key as an RSA public key }else if (algorithm == "HS256"){ // Use the provided key as an HMAC secret key } 
}

当随后使用此方法的网站开发人员假设它将专门处理使用 RS256 等非对称算法签名的 JWT 时,就会出现问题。由于这个有缺陷的假设,他们可能总是将固定的公钥传递给该方法,如下所示:

publicKey = <public-key-of-server>; 
token = request.getCookie("session"); 
verify(token, publicKey);

在这种情况下,如果服务器收到使用 HS256 等对称算法签名的令牌,则库的通用verify()方法会将公钥视为 HMAC 密钥。这意味着攻击者可以使用 HS256 和公钥对令牌进行签名,并且服务器将使用相同的公钥来验证签名。

复现

1、把pem格式的秘钥base64编码

2、在Burpsuite的JWT Editor 中

3、base64加密过的那个替换k

4、抓包,需要改两个地方

5、点击sign,选择刚刚创建的JWT

6、复制新生成的秘钥

7、替换之前的旧JWT

Other

未验证签名

首先看到jwt相关题目,第一个想法就是先直接修改,看看能不能过签

未对签名算法强验证

若直接修改内容无法过签,那就在尝试修改Header部分加密算法

秘钥泄露

翻一番robots等文件,看看有无秘钥泄露,有的话就可以直接构造

弱密钥

弱密钥,我们就可以通过一些工具来进行爆破

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

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

相关文章

在编程中使用中文到底该不该??

看到知乎上有个热门问题&#xff0c;为什么很多人反对中文在编程中的使用&#xff1f; 这个问题有几百万的浏览热度&#xff0c;其中排名第一的回答非常简洁&#xff0c;我深以为然&#xff1a; 在国内做开发&#xff0c;用中文写注释、写文档&#xff0c;是非常好的习惯&…

Lua环境下载与配置

这里介绍如何下载已经编译好的Lua环境&#xff0c;如何配置Lua环境。 如希望自己从源码编译Lua环境&#xff0c;请自行搜索资料。 第一步&#xff1a;下载编译好的lua环境 打开下面链接&#xff0c;然后根据指引下载。 The Programming Language Luahttps://www.lua.org/hom…

linux进程退出之exit与_exit

linux进程退出之exit与_exit _exitexit流程清理函数atexit()函数&#xff1a;on_exit()函数&#xff1a; _exit /* Terminate program execution with the low-order 8 bits of STATUS. */ /** status参数定义了进程的终止状态&#xff0c;父进程可以通过wait&#xff08;&am…

前端学习<四>JavaScript基础——01-编程语言和JavaScript简介

计算机语言 概念 计算机语言&#xff1a;人与计算机之间通信的语言。它是人与计算机之间传递信息的媒介&#xff0c;它通过特定的语法规则和语义约定&#xff0c;将人类可理解的指令转化为计算机可以执行的机器指令。 计算机程序&#xff1a;就是计算机所执行的一系列的指令…

【2024系统架构设计】案例分析- 5 Web应用

目录 一 基础知识 二 真题 一 基础知识 1 Web应用技术分类 大型网站系统架构的演化:高性能、高可用、可维护、应变、安全。 从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务。

Pytorch for training1——read data/image

blog torch.utils.data.Dataset create dataset with class torch.utils.data.Dataset automaticly import torch from torch.utils.data import Datasetclass MyDataset(Dataset):def __init__(self, data):self.data datadef __getitem__(self, index):# 根据索引获取样本…

排序算法-归并排序

Leetcode链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 归并&#xff1a;将原始数组划分为若干个子数组&#xff0c;然后将这些子数组分别排序&#xff0c;最后再将已排序的子数组合并成一个有序的数组。是一种分治思想 思路&#xff1a; 1.分 2.治 3.怎么治 …

Codeforces TypeDB Forces 2023 C. Remove the Bracket【上下界DP】

C. Remove the Bracket 题意 给定一个长度为 n n n 的整数数组 a a a 和一个非负整数 s s s 要求 ∀ i ∈ [ 2 , n − 1 ] , 选定两个整数 x i , y i &#xff0c;满足 x i y i s 且 ( x i − s ) ( y i − s ) ≥ 0 \forall i \in [2,n - 1],选定两个整数 x_i, y_i&am…

恶意勒索Word文档模版注入分析

文章目录 前言1、工具&#xff1a;2、IOC样本&#xff1a;3、样本提取4、恶意文档分析参考手册 恶意的文档执行流程一、使用 OLEDUMP 和 OLEVBA 分析Word 文档1、OlEDUMP2、OLEVBA 二、使用 Detect-It Easy 识别文件类型-简单三、使用 7-zip 探索 OOXML 文档并查找模板注入四、…

程序员为什么要一直写 bug ?

程序员并不是故意写bug的&#xff0c;bug的产生通常是由多种因素导致的&#xff0c;例如&#xff1a; 需求理解不足&#xff1a;如果程序员没有完全理解项目的需求或者功能要求&#xff0c;可能会在编程过程中遗漏一些重要的细节&#xff0c;导致bug的产生。编程经验不足&…

Three.js真实相机模拟

有没有想过如何在 3D Web 应用程序中模拟物理相机&#xff1f; 在这篇博文中&#xff0c;我将向你展示如何使用 Three.js和 OpenCV 来完成此操作。 我们将从模拟针孔相机模型开始&#xff0c;然后添加真实的镜头畸变。 具体来说&#xff0c;我们将仔细研究 OpenCV 的两个失真模…

是谁?写的Java神作一出版就获Jolt图书大奖【抽奖赠书】

送书活动 1️⃣参与方式&#xff1a;点此参与抽书抽奖 2️⃣获奖方式&#xff1a;小程序随机 抽5位&#xff0c;每位小伙伴一本《Effective Java中文2024版》 3️⃣活动时间&#xff1a;截止到 2024-4-6 12:01:00 注&#xff1a;所有抽奖活动都是全国范围免费包邮到家&#xff…