jwt_tool、jwt-cracker、c-jwt-cracker

jwt 介绍

jwt_tool (全称 JSON Web Token Toolkit v2)是一款专门用于对 JWT (JSON Web Tokens) 进行验证、伪造、扫描和篡改的渗透测试工具包。它由 Python 3 编写,是安全研究人员、渗透测试工程师以及 CTF 选手在测试 JWT 安全性时的必备利器。

以下是关于 jwt_tool 的详细介绍:

1. 核心功能

jwt_tool 不仅仅是一个解码器,它更侧重于攻击与防御测试,主要功能包括:

  • 令牌解析与验证:快速解码 JWT 的 Header、Payload 和 Signature,检查令牌格式及有效性。
  • 已知漏洞自动化测试 :内置了多种经典 JWT 漏洞的攻击模块,包括:
    • alg=none 签名绕过漏洞 (CVE-2015-2951)
    • RS/HS256 公钥不匹配/算法混淆漏洞 (CVE-2016-10555)
    • 密钥注入漏洞 (CVE-2018-0114)
    • 空白密码/空签名漏洞 (CVE-2019-20933, CVE-2020-28637, CVE-2020-28042)
  • 暴力破解与字典攻击:支持对 HMAC 签名密钥进行高速字典爆破,识别弱密钥。
  • 令牌篡改与伪造:允许用户修改 Payload 中的声明(Claims),并利用已知密钥或通过上述攻击手段重新生成有效签名。
  • 模糊测试 (Fuzzing):对声明值进行模糊测试,以触发服务端的意外行为或错误处理逻辑。
  • Web 交互测试:可以直接将篡改后的 Token 发送到目标 URL,配合自定义 Header/Cookie 进行实时测试。

2. 安装与运行

  • 环境要求:Python 3.6+

  • 获取方式

    bash 复制代码
    git clone https://github.com/ticarpi/jwt_tool.git
    cd jwt_tool
    pip install -r requirements.txt
  • 基本用法示例

    • 解析令牌python3 jwt_tool.py <JWT_TOKEN>
    • 篡改模式python3 jwt_tool.py <JWT_TOKEN> -T (交互式修改 Payload)
    • 漏洞利用python3 jwt_tool.py <JWT_TOKEN> -X a (测试 alg=none 等特定攻击)
    • 密钥爆破python3 jwt_tool.py <JWT_TOKEN> -C -d dictionary.txt
    • 验证签名python3 jwt_tool.py <JWT_TOKEN> -V public.pem

3. 适用场景

  • Web 应用渗透测试:检测登录认证、API 鉴权机制是否存在 JWT 实现缺陷。
  • CTF 比赛:快速解决 Crypto 或 Web 方向中涉及 JWT 的题目。
  • 开发自查:开发者在上线前验证自己的 JWT 实现是否抵御了常见攻击。

jwt_tool 是目前 JWT 安全测试中最强大的瑞士军刀。为了让你更高效地使用它,我将参数按功能场景进行了分类整理,并附带了详细用法和实战示例。

⚠️ 前置提醒 :以下所有示例均基于你之前提供的 Token,实际使用时请替换为你的目标 Token。所有测试必须在已授权的环境下进行。

jwt_tool使用方式详解

jwt_tool 是一个用于验证、伪造、扫描和篡改JWT(JSON Web Token)的工具包。它支持多种攻击方式,如alg:none绕过、密钥混淆等。

📖 核心参数与功能模式

jwt_tool 的功能通过不同的参数和模式来区分,以下是主要分类:

一、通用参数
  • -h: 显示帮助信息。
  • -t / --targeturl: 指定目标URL,用于向应用发送请求。
  • -rc / --cookies: 指定请求要携带的Cookies。
  • -rh / --headers: 指定请求要携带的Headers。
  • -pd / --postdata: 指定POST请求要发送的数据。
  • -cv / --canaryvalue: 设置"金丝雀值",用于在响应中快速定位成功标志。
  • -np / --noproxy: 禁用代理。
  • -v / --verbose: 输出更详细的运行信息。
二、主要功能模式

1. 破解模式 (-C / --crack)

用于暴力破解HS256等HMAC系列算法的密钥。

  • -d / --dict: 指定字典文件。
  • -p / --password: 直接指定一个密码进行测试。

2. 漏洞利用模式 (-X / --exploit)

用于执行针对特定JWT漏洞的利用。

  • a : alg:none签名绕过攻击。
  • n: 空签名攻击。
  • k : 密钥混淆攻击,需用-pk指定公钥文件。
  • s: 伪造JWKS(JSON Web Key Set)。
  • i: 注入内联JWKS。

3. 扫描模式 (-M / --mode)

对目标应用进行自动化的安全扫描。

  • pb (Playbook): 剧本扫描,执行全面的JWT攻击剧本测试。
  • er (Error): 强制错误扫描,通过模糊测试触发错误信息。
  • cc (Common Claims): 模糊测试常见声明。
  • at (All Tests): 运行以上所有测试。

4. 篡改模式 (-T / --tamper)

进入交互式菜单,手动修改JWT的Header和Payload。

  • -hc / --headerclaim: 指定要篡改的Header声明。
  • -pc / --payloadclaim: 指定要篡改的Payload声明。
  • -iv / --injectclaims: 注入新的声明或更新现有声明。

5. 验证模式 (-V / --verify)

用于验证JWT签名。

  • -pk / --pubkey: 指定公钥文件(PEM格式)。
  • -jw / --jwksfile: 指定JWKS文件。

-h, --help 显示此帮助信息并退出

-b, --bare 仅返回令牌

-t, --targeturl TARGETURL

发送带有新JWT的HTTP请求的目标URL

-r, --request REQUEST

用于生成请求的基础URL

-rt, --rate RATE 每分钟最大请求数

-i, --insecure 对于传入的请求使用HTTP(不加密)

-rc, --cookies COOKIES

随伪造HTTP请求发送的请求Cookie

-rh, --headers HEADERS

随伪造HTTP请求发送的请求头(可多次使用以添加更多头部)

-pd, --postdata POSTDATA

包含POST请求中所有要发送数据的文本字符串

-cv, --canaryvalue CANARYVALUE

在有效令牌响应中出现的文本字符串Welcome, ticarpi")

-np, --noproxy 禁用当前请求的代理(如需永久禁用,请修改jwtconf.ini文件)

-nr, --noredir 禁用当前请求的重定向(如需永久禁用,请修改jwtconf.ini文件)

-M, --mode MODE 扫描模式:

pb = 剧本审计

er = 模糊现有声明以强制错误

cc = 模糊常见声明

at = 所有测试!

-X, --exploit EXPLOIT

利用已知漏洞:

a = alg:none

n = 空签名

b = 签名中接受空白密码p = 在 ECDSA ECDSA 签名中接受"心理签名"

s = 伪造 JWKS(使用 -ju 指定 JWKS URL,或在 jwtconf.ini 中设置以自动化此攻击)

k = 密钥混淆(使用 -pk使用 -pk 指定公钥)

i = 注入内联 JWKS

-ju, --jwksurl JWKSURL

可托管伪造 JWKS 的 URLKS 的 URL 地址

-S, --sign SIGN 对生成的令牌进行签名:

hs256/hs384/hs512 = HMAC-SHA 签名(需使用 -k/-p 指定密钥)

rs256/rs384/rs512 = RSA RSA 签名(需使用 -pr需使用 -pr 指定 RSA 指定 RSA 私钥)

es256/es384/es512 =512 = 椭圆曲线签名(需使用 -pr 指定 EC 私钥)

ps256/ps384/ps512 = PSS-RSA 签名(需使用 -pr 指定 RSA 私钥)

-pr, --privkey PRIVKEY

非对称加密使用的私钥

-T, --tamper 修改 JWT 内容

(使用 -S 设置签名选项,或使用 -X 运行利用模块)

-I, --injectclaims 注入新的声明,并用新值更新现有声明

(使用 -S 设置签名选项,或使用 -X 运行利用模块)

(使用 -hc/-pc 指定目标声明,使用 -hv/-pv 指定注入的值或列表)

-hc, --headerclaim HEADERCLAIM

要修改的头部声明

-pc, --payloadclaim PAYLOADCLAIM

要修改的有效载荷声明

-hv, --headervalue HEADERVALUE要注入到篡改的头部声明中的值(或包含值的文件)

-pv, --payloadvalue PAYLOADVALUE

要注入到篡改的有效载荷声明中的值(或包含值的文件)

-C, --crack crack 破解 HMAC-SHA 令牌的密钥

(需指定 -d / -p / -kf)

-d, --dict DICT DICT 破解用的字典文件

-p, --password PASSWORD

破解用的密码

-kf, --keyfile KEYFILE

破解用的密钥文件(用于"kid"攻击时签名的情况)

-V, --verify 使用公钥验证 RSA RSA 签名

(需指定 -pk / -jw)

-pk, --pubkey PUBKEY key PUBKEY key PUBKEY 非对称加密用的公钥

-jw, --jwksfile JWKSFILE

非对称加密用的 JSON Web的 JSON Web 密钥存储

-Q, --query QUERY 根据日志文件查询某个令牌 ID,查看该请求的详细信息

例如:-Q jwttool_46820e62fe25c10a3f5498e426a9f03a

-v, --verbose 解析和输出时,生成(稍更详细的)输出信息

🚀 典型使用场景示例

  • 查看JWT内容 :直接运行 python3 jwt_tool.py <JWT>
  • 破解HS256密钥python3 jwt_tool.py <JWT> -C -d wordlist.txt
  • 尝试密钥混淆攻击python3 jwt_tool.py <JWT> -X k -pk public.pem
  • 对目标URL进行剧本扫描python3 jwt_tool.py -t https://example.com/api -rc "jwt=<JWT>" -M pb
  • 篡改Token并发送 :使用-T交互式修改后,用-t等参数发送。

以上是 jwt_tool 的核心参数和常见用法。这个工具功能非常丰富,在具体使用时,可以通过组合这些参数来实现复杂的测试流程。

jwt-cracker

该工具仅限于单一的签名算法(HS256) ,如果提供了不同的签名算法,则无法进行操作

https://github.com/lmammino/jwt-cracker

bash 复制代码
jwt-cracker -t you-tooken

hashcat (kali自带)

bash 复制代码
hashcat -a 0 -m 16500 Jwt.txt wordlist.txt