JWT:渗透测试姿势全解析(含实战)

admin 2026-05-06 06:23:01 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细解析JWT在渗透测试中的六种攻击手法,包括有缺陷的校验、空密码算法、密钥爆破、JWK/JKU注入及算法混淆,结合BurpSuite靶场和实战案例演示漏洞利用步骤,并提供jwt_tool等工具的具体操作命令,帮助测试人员快速识别和利用JWT相关漏洞。 综合评分: 87 文章分类: 渗透测试,WEB安全,漏洞分析,实战经验,安全工具


cover_image

JWT:渗透测试姿势全解析(含实战)

hkl1x hkl1x

只会看监控的实习生

2026年5月4日 08:01 广东

在小说阅读器读本章

去阅读

导语

师傅们在渗透测试做越权时,尤其是小程序的资产会经常看到cookie的字段是以eyj开头的字符串,不乏会有些头痛,没办法修改一些敏感字段从而达到越权。这就是jwt(JSON Web Token)。下面我会对jwt的渗透姿势有一个详细的讲解。

原理

简单来说jwt就是一个身份认证的字符串,有三部分组成:第一部分是头部(Header),第二部分是载荷(Payload),第三部分是签名(Signature)。每个部分有.分割并且通过base64编码。对于我们来说其实只需要关注前两个部分。下面我会分别解释这两个部分。

Header部分的功能简单来说就是定义了这个jwt的加密算法和识别签名的密钥。这两个功能分别对应Header部分的alg,kid这两个参数。

Payload

Payload部分其实也就是这个字符串的核心包含身份认证的字段。下图的用户字段是sub实战情况下uid、userid这些也都可能。

那就想问了那我在这里直接改不就好了,这个话说的对,也不对。这个要说一下jwt的工作原理:我们上面的Header和Payload部分在进行base64编码还会通过算法密钥进行加密,如果更改这两部分的一些参数会导致整个字符串更改。从而无法进行过越权。这个也是是否产生漏洞的核心

姿势

有缺陷的jwt校验

原理:JWT库有两个处理令牌的方法,在Node.js中,有verify()和decode()方法,分别进行验证令牌和解码令牌的操作。那么开发者在对令牌校验是使用的是decode(),说明就没有对签名进行检测。就存在安全问题。这也是上面说对也不对的原因。

verify() 方法:用于验证令牌的签名是否有效,同时解码令牌内容。如果签名无效,该方法会抛出错误。 decode() 方法:仅用于解码令牌内容,不解密或验证签名。

案例主要来自bp靶场还有一个实际案例。下面可是我们第一个实验。登录后生成jwt。

放到jwt解析网站,更改其sub字段为administrator。(网站:https://www.jsongj.com/ede/jwt)

我们可以看到这里的签名是随机的,按照jwt的工作原理这个是不行的。但是这个是存在漏洞的。然后我们拿着这个jwt访问管理员路径。

空密码算法

原理:开发者没有对jwt的算法类型严格校验,就存在安全问题。我们上面说过alg参数是决定jwt算法的类型,那么是空算法会导致密钥也不会生效。从而达到越权。

依旧是bp靶场登录生成jwt,放到jwt解析网站,更改其sub字段为administrator,并且把alg字段设置为none。

然后我们拿着这个jwt访问管理员路径。

密钥可爆破

原理:常见的jwt加密算法有两种HS256(对称加密),RS256(非对称加密)。那么对称加密也就是只存在一个密钥对字符串加解密。如果开发者使用了存在弱口令的密钥,就存在安全问题了。

这里使用实际案例分享,找到一处登录框注册登录。

查看cookie为jwt并且加密算法为hs256,尝试使用hashcat爆破密钥

命令:hashcat -m 16500 -a 0 jwt.txt jwt.secrets.list –force 字典:https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list

修改参数为admin,成功登录后台

jwk注入

原理:当jwt使用非对称算法时公钥会可能写在jwt内部,如果开发者没有严格遵守公钥白名单,可能导致任意密钥进行验证,就存在安全问题了。

依旧是bp靶场登录生成jwt,复制jwt使用jwt_tools实现jwk注入攻击。(具体一下参数请看工具使用)

命令:python jwt_tool.py jwt -I -pc sub -pv administrator -hc kid -hv jwt_tool -X i 下载地址:https://github.com/ticarpi/jwt_tool

然后我们拿着这个jwt访问管理员路径。

jku注入

原理:上面说过如果使用非对称加密算法公钥可能写在jwt里,同时也可能写在一个web路径。还是如果开发者没有严格遵守公钥白名单,可能导致任意密钥进行验证。相对与jwk注入是本地加载,而jku是远程加载。

依旧是bp靶场登录生成jwt,复制jwt使用jwt_tools实现jku注入攻击。靶场为我们提供了公钥的加载路径url。

命令:python jwt_tool.py jwt -I -pc sub -pv administrator -hc kid -hv jwt_tool -X s -ju url

然后我们把生成的公钥写到公钥加载的url中

然后我们拿着这个jwt访问管理员路径。

算法混淆

原理:服务器预期用 RS256(非对称)验证,但攻击者将 alg 改为 HS256(对称),并利用服务器公开的 RSA 公钥作为 HS256 的 “共享密钥” 生成签名。

bp靶场指明了公钥的路径。把公钥转换成pem格式。保存到电脑命名为key.pem(网站:https://www.authgear.com/tools/jwk-generator)

依旧是bp靶场登录生成jwt,复制jwt使用jwt_tools实现算法混淆攻击。

命令:python jwt_tool.py jwt -X k -pk key.pem -I -pc sub -pv administrator

然后我们拿着这个jwt访问管理员路径。

针对jwt以上的姿势应该适用于大部分场景,还有一些kid参数sql注入,目录遍历漏洞。因为没有实际案例,就没有说。等实战测试记得测一下就好了

结语

总结一下吧,先看加密算法,如果是对称加密,就尝试爆破密钥,或设置none算法,非对称算法尝试是否存在jkw,jku。或sql注入或目录遍历。

原文链接:https://www.freebuf.com/articles/web/459701.html


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:只会看监控的实习生 hkl1x hkl1x《JWT:渗透测试姿势全解析(含实战)》

评论:0   参与:  0