Omar-OM7/jshunter
GitHub: Omar-OM7/jshunter
一款专为漏洞赏金场景设计的命令行 JavaScript 密钥扫描器,支持管道组合、代理转发和多层误报过滤。
Stars: 2 | Forks: 0
# jshunter 🔍
一款快速、利于管道组合的 JavaScript 密钥扫描器,专为漏洞赏金猎人设计。
从 stdin 读取 JS URL,抓取每个文件,并将发现的任何密钥直接打印到终端——没有 HTML 输出,没有杂乱信息。
## 功能
- **原生支持管道** — 专为 `cat urls.txt | jshunter` 设计
- **低误报率** — 熵检查、CamelCase 过滤、单词边界匹配以及已知嘈杂 URL 跳过列表
- **30 多种密钥类型** — AWS、GitHub、Slack、Stripe、Twilio、Firebase、OpenAI、Discord、Telegram、JWT 等
- **支持 Burp/代理** — 使用 `-p` 通过 Burp Suite 路由流量
- **支持 Cookie/header** — 使用 `-c` 扫经过身份验证的 JS 文件
- **彩色输出** — 突出显示发现结果,状态消息输出至 stderr
## 安装说明
```
git clone https://github.com/YOUR_USERNAME/jshunter
cd jshunter
pip install -r requirements.txt
chmod +x jshunter.py
sudo ln -s $(pwd)/jshunter.py /usr/local/bin/jshunter
```
## 用法
```
# 基本用法
cat js_urls.txt | jshunter
# 仅打印有发现的 URL(更简洁的输出)
cat js_urls.txt | jshunter --only-findings
# 配合 Burp Suite
cat js_urls.txt | jshunter -p 127.0.0.1:8080
# 使用 cookies(已认证的 JS)
cat js_urls.txt | jshunter -c "session=abc123; token=xyz"
# 通过管道传递给 grep 以查找特定的 secret 类型
cat js_urls.txt | jshunter | grep aws
# 将发现保存到文件
cat js_urls.txt | jshunter --only-findings | tee findings.txt
```
## 输出格式
```
https://target.com/app.js [aws_access_key_id] AKIAIOSFODNN7EXAMPLE
https://target.com/app.js [google_api_key] AIzaSyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
https://target.com/main.js [json_web_token] eyJhbGciOiJIUzI1NiJ9.eyJ...
```
- **发现结果** → stdout(支持通过管道传输)
- **状态消息** → stderr(在通过管道传输时不可见)
## 选项
| 参数 | 描述 |
|------|-------------|
| `--only-findings` | 隐藏“未找到”提示行 |
| `-c, --cookie` | Cookie header(例如 `"session=abc"`) |
| `-p, --proxy` | 代理 host:port(例如 `127.0.0.1:8080`) |
| `-H, --headers` | 额外的 headers(`"Name:Value\nName:Value"`) |
| `-t, --timeout` | 请求超时时间(秒)(默认:10) |
| `--no-color` | 禁用 ANSI 颜色 |
## 检测到的密钥类型
| 类别 | 类型 |
|----------|-------|
| **AWS** | Access Key ID, Secret Access Key, MWS Token, S3 URL |
| **Google** | API Key, OAuth Token |
| **GitHub** | PAT Classic, PAT Fine-Grained, OAuth, Actions, Refresh Token |
| **Slack** | Bot Token, User Token, App Token, Webhook |
| **Stripe** | Secret Key, Publishable Key, Test Secret, Restricted Key |
| **Twilio** | API Key, Account SID, App SID |
| **Firebase** | Server Key, Database URL |
| **OpenAI / Anthropic** | API Keys |
| **Discord** | Bot Token, Webhook |
| **Telegram** | Bot Token(上下文感知) |
| **Shopify** | Access Token, Shared Secret, Custom App |
| **Email** | SendGrid, Mailgun, Mailchimp |
| **Payment** | PayPal/Braintree, Square |
| **Other** | npm token, Databricks, Heroku, Facebook |
| **Auth** | Basic, Bearer, API Key, JWT |
| **Crypto** | Private Keys(RSA, EC, DSA, OpenSSH, PGP) |
| **Generic** | 硬编码密码,通用密钥 |
## 推荐工作流
```
# 1. 收集 JS URL
echo "https://target.com" | gau --blacklist png,jpg,gif,css | grep "\.js$" > js_urls.txt
# 或者使用 katana
katana -u https://target.com -jc -d 3 | grep "\.js$" >> js_urls.txt
# 2. 去重
sort -u js_urls.txt -o js_urls.txt
# 3. 搜索
cat js_urls.txt | jshunter --only-findings | tee findings.txt
```
## 降低误报
jshunter 包含多层噪声过滤机制:
- **嘈杂 URL 跳过列表** — 完全跳过 Cloudflare 验证脚本、Zaraz、reCAPTCHA 加载器
- **熵检查** — 拒绝低熵匹配(纯单词、连续字符)
- **CamelCase 检测** — 拒绝与 token 模式匹配的 Salesforce/LWC schema 名称
- **严格十六进制的 Twilio/Databricks** — SID 和 token 仅限十六进制,拒绝字母数字组成的类名
- **单词边界 auth headers** — `basic`/`bearer` 后面需要空格,拒绝匹配到 `basicPageSchema=`
- **大小写敏感模式** — AWS 和 token 前缀进行精确匹配,而非大小写不敏感匹配
## 环境要求
```
requests
requests-file
jsbeautifier
urllib3
```
## 致谢
灵感来自 m4ll0k 的 [SecretFinder](https://github.com/m4ll0k/SecretFinder)。
为真实世界的漏洞赏金用途构建了额外的误报过滤机制。
## 免责声明
此工具仅用于授权的安全测试。请仅对您拥有明确测试许可的目标使用。作者不对任何滥用行为负责。
标签:Python, StruQ, 敏感信息扫描, 无后门, 逆向工具