RemmyNine/Confusional
GitHub: RemmyNine/Confusional
一款 Python JWT 安全测试工具,支持多种算法混淆攻击向量的伪造令牌生成与载荷篡改。
Stars: 25 | Forks: 8
## 描述
这个 Python 脚本 `jwt_confusion.py` 是一个命令行工具,旨在演示和利用 JWT (JSON Web Token) 算法混淆漏洞。它可以生成伪造的 JWT,以测试依赖 JWT 认证的系统的安全性。本工具仅供教育和授权安全测试目的使用。不当使用可能会导致严重后果。

#### 该脚本实现了以下攻击向量:
`HMAC Algorithm Switching`(HMAC 算法切换):尝试将 RSA 公钥用作 HMAC(HS256、HS384、HS512)算法的密钥。
`'none'` Algorithm Attack('none' 算法攻击):将 JWT 算法设置为 'none',从而有效绕过签名验证。
`Key ID (kid) Manipulation`(密钥 ID 操纵):修改 `kid` 头部参数,使其指向攻击者控制的密钥或系统文件。
`JWK Header Injection`(JWK 头部注入):将精心构造的 JWK (JSON Web Key) 注入到 JWT 头部中。
`Embedded JWK Attack`(嵌入式 JWK 攻击):将 JWK 直接嵌入到令牌头部中。
`X.509 URL (x5u) Attack`(X.509 URL 攻击):添加 X.509 证书 URL。
`Key Confusion Attack`(密钥混淆攻击):使用对称密钥进行非对称验证。
### 功能特性
`JWT Parsing`(JWT 解析):将 JWT 令牌解析为其头部、载荷和签名组件。
`Payload Modification`(载荷修改):允许修改 JWT 载荷声明。支持设置字符串、布尔值、数字、null 和 JSON 值。还支持通过增加或减少秒数来相对修改 `exp`、`nbf` 和 `iat` 声明。
`Header Modification`(头部修改):允许修改 JWT 头部参数。
`Key Handling`(密钥处理):从 PEM 文件读取密钥。还可以为某些攻击生成 RSA 密钥对。
`Algorithm Specification`(算法指定):允许用户指定用于伪造令牌的算法(例如 HS256、HS384、HS512)。
`Output Options`(输出选项):将伪造的 JWT 打印到标准输出或将其写入文件。
`Verbose Output`(详细输出):显示有关原始令牌和伪造令牌的详细信息。
`Token Input from File`(从文件输入令牌):从文件读取 JWT 令牌。
`Print Decoded Token`(打印解码令牌):打印原始令牌的解码头部和载荷。
### 依赖项
Python 3.6 或更高版本
base64
json
hmac
hashlib
argparse
sys
os
re
typing
可选:
*cryptography(用于 RSA 密钥生成和某些攻击)。使用 pip install cryptography 安装。没有它脚本也能运行,但某些高级攻击将不可用。*
### 安装
克隆此仓库:
```
git clone https://github.com/RemmyNine/Confusional
cd Confusional
```
(可选)安装 cryptography 库:
pip install cryptography
用法
`python3 jwt_confusion.py --token --key [OPTIONS]`
参数
`--token, -t`:要攻击的 JWT 令牌。除非使用 --file,否则为必需项。
`--key, -k`:用于签名或验证的密钥文件(PEM 格式)。大多数攻击类型都需要(none 和不带密钥的 kid 除外)。
`--algorithm, -a`:用于伪造令牌的算法(默认值:HS256)。选项取决于攻击类型。
`--attack`:要执行的攻击类型(默认值:hmac)。选项包括:
`hmac`:HMAC 算法切换。
`none`:'none' 算法攻击。
`kid`:密钥 ID (kid) 操纵。
`jwk-injection`:JWK 头部注入。
`embedded-jwk`:将 JWK 嵌入到头部中。
`x5u`:X.509 URL 攻击。
`key-confusion`:密钥混淆攻击。
`--modify, -m`:修改载荷字段。格式:key=value。对 exp、nbf 和 iat 使用 +/-N 来调整 N 秒(例如,exp=+3600 表示将过期时间增加一小时)。可以多次使用。
`--kid-value`:在 kid 攻击中用于 kid 参数的值(默认值:../../../../../dev/null)。
`--jwk-url`:用于 x5u 或 jku 参数的 URL(默认值:https://attacker.com/jwk.json)。
`--gen-key`:为 embedded-jwk 或 jwk-injection 攻击生成新的 RSA 密钥对。如果使用此选项,则不需要 --key 参数。
`--raw-token`:仅打印伪造的 JWT 令牌,不包含任何额外输出。
`--verbose, -v`:启用详细输出,显示原始令牌和伪造令牌的详细信息。
`--print-decoded, -p`:打印原始令牌的解码头部和载荷并退出。
`--header`:以 key=value 格式添加或修改头部字段。
`--file, -f`:从文件而不是命令行读取 JWT 令牌。
`--output, -o`:将伪造的令牌写入文件而不是打印到标准输出。
### 示例
```
python3 jwt_confusion.py --token eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9... --key public.pem
python3 jwt_confusion.py --token eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9... --key public.pem --modify login=admin
python3 jwt_confusion.py --token eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9... --key public.pem --algorithm HS384
python3 jwt_confusion.py --token eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9... --attack none
python3 jwt_confusion.py --token eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9... --attack kid --kid-value ../../../../../dev/null
python3 jwt_confusion.py --token eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9... --attack embedded-jwk --gen-key
python3 jwt_confusion.py --token eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9... --modify exp=+3600 -m admin=true
python3 jwt_confusion.py --file token.txt --key private.key --attack hmac -a HS512 -m user=root
python3 jwt_confusion.py --token --attack jwk-injection --jwk-url https://example.com/my_jwk.json
python3 jwt_confusion.py --token --attack x5u --jwk-url https://example.com/cert.cert
python3 jwt_confusion.py --token --attack key-confusion --key symmetric.key
python3 jwt_confusion.py --token --print-decoded
python3 jwt_confusion.py --token --header typ=JWT -m role=admin
```
### 漏洞利用阶段
- 确保您已经使用 JWT.io 或任何其他网站制作了 base64url 格式的 JWT。此工具仅执行算法混淆攻击
标签:API安全, CTF工具, HMAC, JSONLines, JSON Web Token, JSON输出, JWT, Kali工具, Python, RSA, Token伪造, Web安全, 加密文件系统, 数据展示, 无后门, 漏洞搜索, 签名绕过, 算法混淆, 红队, 网络安全, 蓝队分析, 身份验证绕过, 逆向工具, 隐私保护, 零信任