RemmyNine/Confusional

GitHub: RemmyNine/Confusional

一款 Python JWT 安全测试工具,支持多种算法混淆攻击向量的伪造令牌生成与载荷篡改。

Stars: 25 | Forks: 8

## 描述 这个 Python 脚本 `jwt_confusion.py` 是一个命令行工具,旨在演示和利用 JWT (JSON Web Token) 算法混淆漏洞。它可以生成伪造的 JWT,以测试依赖 JWT 认证的系统的安全性。本工具仅供教育和授权安全测试目的使用。不当使用可能会导致严重后果。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4da132c05c101314.png) #### 该脚本实现了以下攻击向量: `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安全, 加密文件系统, 数据展示, 无后门, 漏洞搜索, 签名绕过, 算法混淆, 红队, 网络安全, 蓝队分析, 身份验证绕过, 逆向工具, 隐私保护, 零信任