核心原理:JWT 结构与 HMAC 签名
JWT(JSON Web Token)由三部分组成,用 . 分隔:
-
Header(头部):描述签名算法(如 HS256 = HMAC-SHA256)
-
Payload(载荷):存放业务数据(如用户名 username)
-
Signature(签名):HMAC-SHA256( base64(Header) + "." + base64(Payload), 密钥 )

将网站给我们的Token,复制下来放入无影(TscanPlus)的轻武器库,
JwtCrack 是:针对使用对称加密算法(如 HS256/HS384/HS512) 的 JWT,通过暴力 / 字典攻击找到签名用的密钥,进而篡改 JWT 内容并生成能通过服务器验证的伪造 Token。

构造并提交伪造 Token
修改 Payload 中的 username 为 WebGoat
对新的 Header 和 Payload 分别做 Base64URL 编码
还需要修改时间戳exp:
用破解出的密钥,计算新签名:HMAC-SHA256(新Header.新Payload, 密钥)
拼接成新 Token:新Header.新Payload.新签名
提交到 WebGoat,服务器验证签名一致 → 通关
一、JWT 中常见的时间戳字段
JWT 的 Payload(载荷)里通常包含以下时间戳字段(都是 Unix 时间戳,即从 1970-01-01 00:00:00 UTC 到当前的秒数):
| iat | Issued At | Token 签发时间 | 1735372400 | 2026-01-28 10:33:20 |
| exp | Expiration Time | Token 过期时间 | 1735376000 | 2026-01-28 11:33:20 |
| nbf | Not Before | Token 生效时间(可选) | 1735372000 | 2026-01-28 10:26:40 |
| jti | JWT ID | Token 唯一标识(非时间,但常和时间配合) | 随机字符串 | – |
最核心的两个:
-
iat:记录 Token 什么时候发的,服务器可验证 Token 签发时间是否合理;
-
exp:最重要的「过期时间」,服务器会强制校验这个字段 —— 如果当前时间 > exp,直接拒绝 Token,哪怕签名合法。

修改之后:

新签名的核心是「用破解的密钥,对 Base64URL 编码后的 Header+Payload 做 HMAC-SHA256 哈希,再对哈希结果做 Base64URL 编码」;

总结
本次实验通过TscanPlus 的 JwtCrack工具实现了 JWT 密钥的爆破,掌握了对称加密 JWT 的伪造核心流程,核心要点为破解密钥和正确生成签名,同时理解了 JWT 中 exp 时间戳的强制校验机制。JWT 作为前后端分离、微服务架构中常用的认证方式,其密钥泄露和签名伪造是高频安全漏洞,掌握本次实验的方法对 Web 安全渗透测试具有重要实际意义。
创作不易,点赞 + 收藏 + 关注,后续持续更新 WebGoat 靶场通关实战、Web 安全渗透技巧!



