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+
-
获取方式 :
bashgit 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