渗透测试 | JWT攻击面分析
字数 1431 2025-08-19 12:42:16

JWT安全分析与渗透测试指南

1. JWT概述

JWT(JSON Web Token)是一种用于身份认证和授权的开放标准(RFC 7519),它通过在网络应用间传递被加密的JSON数据来安全地传输信息。

主要作用:

  • 身份验证(Authentication)
  • 授权(Authorization)

2. JWT基本结构

JWT由三部分组成,以"."分隔:

Header.Payload.Signature

2.1 Header部分

包含JWT使用的算法和类型等元数据信息,使用Base64Url编码。

典型结构:

{
  "alg": "HS256",  // 签名算法
  "typ": "JWT"     // 令牌类型
}

常见算法:

  • HS256:HMAC + SHA256
  • RS256:RSA + SHA256
  • ES256:ECDSA + SHA256

2.2 Payload部分

包含JWT的主要信息,使用Base64Url编码。包含三类声明:

  1. 注册声明(Registered Claims):预定义标准字段

    • iss (issuer):签发者
    • sub (subject):面向用户
    • aud (audience):接收方
    • exp (expiration time):过期时间
    • nbf (not before):生效时间
    • iat (issued at):签发时间
    • jti (JWT ID):唯一标识
  2. 公共声明(Public Claims):可自定义的公开信息

  3. 私有声明(Private Claims):提供者和消费者共同定义的私有信息

示例:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

2.3 Signature部分

用于验证消息完整性,防止篡改。生成方式:

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)

3. JWT攻击面分析

3.1 敏感信息泄露

  • 风险:Header和Payload仅Base64编码,未加密
  • 检测:使用工具解码JWT查看内容
  • 工具:https://jwt.io/

3.2 算法篡改攻击

  • None算法:将alg改为"none"绕过签名验证
  • HS256转RS256:当应用支持多种算法时,将算法从非对称改为对称

3.3 密钥爆破攻击

  • 对HS256算法尝试常见密钥爆破
  • 工具:hashcat, jwt_tool

3.4 无效签名验证

  • 某些实现不验证签名
  • 测试方法:修改Payload后不更新签名

3.5 过期时间篡改

  • 修改exp字段延长令牌有效期
  • 测试方法:删除exp字段或设为未来时间

3.6 密钥泄露

  • 通过信息泄露、源码分析获取签名密钥
  • 测试方法:检查GitHub、配置文件等

3.7 其他攻击

  • Kid注入:通过kid参数进行路径遍历或SQL注入
  • JWT复用:捕获未过期的JWT重复使用
  • 标头参数注入:注入恶意标头参数

4. 渗透测试工具

  1. jwt_tool:功能全面的JWT测试工具

    python3 jwt_tool.py <JWT>
    
  2. Burp Suite JWT插件:直接在Burp中测试JWT

  3. 在线工具

    • https://jwt.io/
    • https://jwtdebugger.com/

5. 防御措施

  1. 敏感信息:不要在JWT中存储敏感数据
  2. 强算法:优先使用RS256而非HS256
  3. 密钥管理:使用强密钥并妥善保管
  4. 验证机制
    • 严格验证签名
    • 检查过期时间
    • 验证算法一致性
  5. 黑名单:实现JWT撤销机制
  6. 安全配置
    • 禁用"none"算法
    • 限制支持的算法类型
    • 验证所有声明字段

6. 总结

JWT作为现代认证机制的核心组件,其安全性至关重要。渗透测试人员应全面检查JWT的生成、传输、验证各环节,重点关注算法实现、密钥管理、声明验证等方面。开发人员则应遵循安全最佳实践,避免常见配置错误。

JWT安全分析与渗透测试指南 1. JWT概述 JWT(JSON Web Token)是一种用于身份认证和授权的开放标准(RFC 7519),它通过在网络应用间传递被加密的JSON数据来安全地传输信息。 主要作用: 身份验证(Authentication) 授权(Authorization) 2. JWT基本结构 JWT由三部分组成,以"."分隔: 2.1 Header部分 包含JWT使用的算法和类型等元数据信息,使用Base64Url编码。 典型结构: 常见算法: HS256:HMAC + SHA256 RS256:RSA + SHA256 ES256:ECDSA + SHA256 2.2 Payload部分 包含JWT的主要信息,使用Base64Url编码。包含三类声明: 注册声明(Registered Claims) :预定义标准字段 iss (issuer):签发者 sub (subject):面向用户 aud (audience):接收方 exp (expiration time):过期时间 nbf (not before):生效时间 iat (issued at):签发时间 jti (JWT ID):唯一标识 公共声明(Public Claims) :可自定义的公开信息 私有声明(Private Claims) :提供者和消费者共同定义的私有信息 示例: 2.3 Signature部分 用于验证消息完整性,防止篡改。生成方式: 3. JWT攻击面分析 3.1 敏感信息泄露 风险 :Header和Payload仅Base64编码,未加密 检测 :使用工具解码JWT查看内容 工具 :https://jwt.io/ 3.2 算法篡改攻击 None算法 :将alg改为"none"绕过签名验证 HS256转RS256 :当应用支持多种算法时,将算法从非对称改为对称 3.3 密钥爆破攻击 对HS256算法尝试常见密钥爆破 工具:hashcat, jwt_ tool 3.4 无效签名验证 某些实现不验证签名 测试方法:修改Payload后不更新签名 3.5 过期时间篡改 修改exp字段延长令牌有效期 测试方法:删除exp字段或设为未来时间 3.6 密钥泄露 通过信息泄露、源码分析获取签名密钥 测试方法:检查GitHub、配置文件等 3.7 其他攻击 Kid注入 :通过kid参数进行路径遍历或SQL注入 JWT复用 :捕获未过期的JWT重复使用 标头参数注入 :注入恶意标头参数 4. 渗透测试工具 jwt_ tool :功能全面的JWT测试工具 Burp Suite JWT插件 :直接在Burp中测试JWT 在线工具 : https://jwt.io/ https://jwtdebugger.com/ 5. 防御措施 敏感信息 :不要在JWT中存储敏感数据 强算法 :优先使用RS256而非HS256 密钥管理 :使用强密钥并妥善保管 验证机制 : 严格验证签名 检查过期时间 验证算法一致性 黑名单 :实现JWT撤销机制 安全配置 : 禁用"none"算法 限制支持的算法类型 验证所有声明字段 6. 总结 JWT作为现代认证机制的核心组件,其安全性至关重要。渗透测试人员应全面检查JWT的生成、传输、验证各环节,重点关注算法实现、密钥管理、声明验证等方面。开发人员则应遵循安全最佳实践,避免常见配置错误。