写点什么

JWT 攻防实战:混淆、破解与红队利用技术详解

作者:qife122
  • 2025-09-27
    英国
  • 本文字数:1324 字

    阅读完需:约 4 分钟

JWT 攻防实战:混淆、破解与红队利用技术

破解、篡改、利用——JWT 不仅是令牌,更是红队的游乐场。

什么是 JWT?

JWT(JSON Web Token)是一种紧凑的 URL 安全方法,用于在双方之间传递声明信息,主要用于无状态认证。JWT 通常通过 Cookie、HTTP 头部或本地存储传递。


JWT 包含 3 个 Base64 编码部分:


<头部>.<载荷>.<签名>
复制代码


示例:


eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFlbm9zaCIsInJvbGUiOiJhZG1pbiJ9.wBwbm_z1gdu9OtUsAoOhPtUp9dJYWpA7U2oPeM4osbQj
复制代码


结构解析:


  • 头部:指定算法(如 HS256)

  • 载荷:包含用户名、角色等声明

  • 签名:确保头部和载荷的完整性


JWT 常用于 API 认证和会话管理。服务器在登录后颁发令牌,客户端在后续请求中携带该令牌。

JWT 混淆技术

虽然 JWT 可通过 Base64 解码阅读,但攻击者或开发人员可能通过混淆增加复杂性或安全性。


混淆目的:


  • 绕过安全控制

  • 隐藏内部声明(如 role=admin)

  • 防止简单检查


常用混淆手法:


# Base64解码示例(仅适用于头部/载荷)echo '<base64>' | base64 -d
# 使用JWT工具包python jwt_tool.py <token> -d
复制代码

JWT 破解技术

根据实现方式的不同,存在多种 JWT 破解方法。

HMAC 密钥暴力破解(HS256)

当 JWT 使用弱密钥签名时:


python jwt_tool.py <token> -C -S <字典文件>
复制代码


常见弱密钥:


  • admin

  • password123

  • jwtsecret


仅适用于对称算法(HS256)且密钥可猜测的情况。

算法混淆攻击:RS256 转 HS256

如果 JWT 使用 RS256(非对称)签名,但服务器未正确验证算法,可将其改为 HS256 并用公钥签名:


python jwt_tool.py <token> -X -pk public.pem -A HS256
复制代码


public.pem 文件通常以 PEM 格式存储公钥。CVE-2018-0114 使此攻击广为人知。

none 算法攻击

早期 JWT 库允许使用{"alg":"none"},并完全忽略签名。如果服务器接受此类令牌:


python jwt_tool.py <token> -S none
复制代码


移除签名后重放令牌,即可实现"登录"。

声明伪造

手动修改载荷为"admin": true,并用破解的密钥重新签名:


python jwt_tool.py <token> -E -pc 'cracked_secret' -A HS256
复制代码

JWT 提取与利用挑战

Cookie 存储场景:


  • HTTP 请求中难以直接查看

  • 需要 BurpSuite 拦截提取

  • 脚本需具备 Cookie 容器感知能力


curl -b "auth=<jwt>" http://target.com/dashboard
复制代码


本地存储场景:


  • 需要 XSS 从浏览器窃取

  • 无法通过纯服务端枚举访问


强签名防护:


  • RS256 配合密钥轮换

  • HMAC 密钥无法破解


短期有效性:


  • 短有效期限制重放攻击

  • 需在有效期内拦截令牌

真实靶场实践

TryHackMe: JWT 实验舱


  • 教授 none 算法攻击、弱密钥破解

  • 修改载荷提升权限

  • 推荐使用 BurpSuite 的 JWT 编辑器扩展


HTB: "JWT 密钥"挑战


  • 在 JavaScript 中查找泄露的密钥

  • 修改令牌劫持管理员会话


自建实验环境


  • 使用 Node.js 的 jsonwebtoken 库

  • 设置弱密钥测试 none 算法绕过

防御措施:如何真正保护 JWT

始终使用可信库在服务端验证令牌。

快速参考手册

# 解码JWT各部分jwt_tool.py <token> -d
# 破解密钥jwt_tool.py <token> -C -S rockyou.txt
# 尝试none算法jwt_tool.py <token> -S none
# 修改并重新签名jwt_tool.py <token> -E -pc 'secret' -A HS256
复制代码


本文原载于 https://aenosh-rajora.gitbook.io,2025 年 9 月 13 日发布更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)


公众号二维码


办公AI智能小助手


公众号二维码


网络安全技术点滴分享


用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
JWT攻防实战:混淆、破解与红队利用技术详解_JWT安全_qife122_InfoQ写作社区