austinjump-sec/API-SPY-API-PROBE
GitHub: austinjump-sec/API-SPY-API-PROBE
一款专为 API 渗透测试设计的目录暴力破解工具,支持递归扫描、HTTP 方法探测和 JS 文件抓取,帮助安全研究人员高效发现和枚举隐藏的 API 端点。
Stars: 4 | Forks: 1
# API-SPY 🕵️👻
一款专为 API 侦察和渗透测试设计的强大目录暴力破解工具。能够自动发现隐藏的 API endpoint,执行递归子扫描,并探测 HTTP 方法以实现更深度的 API 枚举。
## 功能
✨ **核心功能:**
- 🎯 基于字典的暴力破解,实现快速 endpoint 发现
- 🔄 对已发现的 endpoint 自动进行递归子扫描
- 🔍 HTTP 方法探测(GET、POST、PUT、DELETE、PATCH、OPTIONS)
- ⚡ 多线程扫描以提升性能
- 📊 智能状态码处理(200、401、403)
- 🔗 交互式提示,支持选择性子扫描和探测
- 🕷️ JavaScript 抓取,用于发现常见的 /api/ endpoint
- 🪟 支持终端多路复用,实现并行操作
- ⏱️ 可配置超时,自动跳过提示
## 安装说明
### 前置条件
- Python 3.6+
- `requests` 库
- `tmux`(可选,用于 `--split` 标志)
- `xfce-terminal`(适用于 Linux 桌面环境)
### 设置
```
# 克隆 repository
git clone https://github.com/austinjump-sec/API-SPY.git
cd API-SPY
# 安装 dependencies
pip install requests
# 使 scripts 可执行(可选)
chmod +x apispy.py apiprobe.py
```
## 用法
### 基本语法
```
python3 apispy.py [OPTIONS]
```
### 必选参数
| 参数 | 描述 |
|----------|-------------|
| `` | 目标 URL(例如 `http://example.com` 或 `http://api.example.com`) |
| `` | 包含 endpoint 的字典文件路径(每行一个) |
### 可选参数
| 参数 | 描述 |
|----------|-------------|
| `--t` | 线程数(最大 150,默认:1) |
| `--split` | 使用 tmux 分割窗口,而不是打开新的终端窗口 |
| `--debug` | 显示原本隐藏的错误消息 |
| ` --loud ` | 显示所有消息(包括正向结果和错误),并高亮显示任何未返回 404 的结果 |
|` --js` | 扫描 JavaScript 文件,并从找到的文件中抓取常见的硬编码 API endpoint |
### 示例
#### 使用默认设置进行基本扫描(单线程)
```
python3 apispy.py http://api.example.com wordlist.txt
```
#### 10 线程的多线程扫描
```
python3 apispy.py http://api.example.com wordlist.txt -t10
```
#### 使用 tmux 进行并行操作
```
python3 apispy.py http://api.example.com wordlist.txt -t5 --split
```
#### 使用更高线程数对特定 URL 进行子扫描
```
python3 apispy.py http://api.example.com/v1 wordlist.txt -t20
```
## 工作原理
### 第一阶段:常见 API endpoint 测试
该工具首先会测试一组预定义的常见 API 路径:
- `api`, `v1`, `v2`, `api/v1`, `api/v2`, `graphql`, `rest`
### 第二阶段:字典暴力破解
- 从你的字典中加载 endpoint(忽略以 `#` 开头的注释)
- 使用 HTTP GET 请求测试每个 endpoint
- 采用多线程执行以实现更快的扫描速度
- 识别具有以下状态码的有效 endpoint:`200`、`401`、`403`
### 第三阶段:交互式子扫描(可选)
当发现一个 endpoint 时,系统会提示你:
```
'-> Subscan ? (y/n) [Auto-skip in 5s]:
```
- 选择 `y/yes` 使用相同的字典递归扫描该 endpoint
- 自动在新终端或 tmux 分割窗口中启动
- 如果 5 秒内没有输入,将自动跳过
### 第四阶段:HTTP 方法探测(可选)
子扫描结束后,系统会提示你:
```
'-> Probe methods on ? (y/n) [Auto-skip in 5s]:
```
- 启动 `apiprobe.py`,对发现的 endpoint 测试 HTTP 方法
- 测试的方法包括:GET、POST、PUT、DELETE、PATCH、OPTIONS
- 彩色输出(200 为绿色,与认证相关的错误为黄色)
- 显示响应大小和 `Allow` header 提示
## 输出解读
### API-SPY 主脚本
```
[+] Url found: http://api.example.com/v1 ← 200 OK (accessible)
'-> Subscan http://api.example.com/v1? (y/n) [Auto-skip in 0s]:
[-] Timeout: Skipped prompt for http://api.example.com/v1?
'-> Probe methods on http://api.example.com/v1? (y/n) [Auto-skip in 4s]:
[-] Url found but not permitted (403 ERR): ... ← Forbidden but exists
[-] Url found but not permitted (401 ERR): ... ← Requires authentication
```
### API-Probe 脚本
```
[+] GET -> STATUS: 200 OK (Size: 1024)
[-] POST -> STATUS: 405 (Size: 0)
[Header Hint] Allow: GET, HEAD, OPTIONS
```
## 字典格式
创建一个简单的文本文件,其中包含 endpoint(每行一个):
```
admin
users
api/users
v1/products
v2/customers
/api/v1/auth
/graphql
search
data
config
```
**注意:** 以 `#` 开头的行将被视为注释并被忽略。
## 推荐字典
适用于 API-SPY 的热门 API 字典:
- [SecLists - API endpoint](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content/api)
- [Assetnote API 字典](https://wordlists.assetnote.io/)
- [FuzzDB API 路由](https://github.com/fuzzdb-project/fuzzdb/tree/master/discovery/api)
## 性能建议
### 线程数指南
- **1-5 个线程**:保守模式,被检测风险低,速度较慢
- **5-20 个线程**:性能与隐蔽性的平衡
- **20-50 个线程**:激进扫描,结果产出更快
- **50-150 个线程**:极速扫描(可能会触发 WAF/IDS)
```
# Stealth mode(低线程)
python3 apispy.py http://target.com wordlist.txt -t3
# Balanced mode
python3 apispy.py http://target.com wordlist.txt -t15
# Aggressive mode
python3 apispy.py http://target.com wordlist.txt -t50
```
### 超时行为
- 交互式提示将在 **5 秒** 后自动跳过
- 适用于对大量目标列表进行无人值守扫描
- 修改源代码中的 `timeout=5` 以进行自定义
## 故障排除
### “未找到 Wordlist”
确保字典路径正确且文件存在:
```
ls -la /path/to/wordlist.txt
```
### 脚本名称错误
进行子扫描时,请确保:
- 主脚本命名为:`apispy.py`
- 探测脚本命名为:`apiprobe.py`
- 两者位于同一目录下
### tmux split-window 无法正常工作
如果 `--split` 失败:
- 安装 tmux:`sudo apt install tmux`
- 确保你正在 tmux 会话中运行:`tmux new-session -s scan`
- 程序会自动回退到 xfce-terminal
### 所有 endpoint 均提示 “Connection Failed”
- 验证 base URL 是否正确且可访问
- 检查防火墙/代理设置
- 确保目标服务正在运行
- 手动测试:`curl http://your-url/`
### 未找到任何结果
- 确认字典中包含相关的 endpoint
- 检查目标返回的状态码是否不是 200/401/403
- 尝试使用较少的线程以避免超时
- 在 `check_status()` 函数中增加请求超时时间
## 安全 considerations
⚠️ **法律与道德:**
- **仅对你拥有或获得明确书面授权的系统进行测试**
- 在大多数司法管辖区,未经授权访问计算机系统是违法行为
- 负责任地将 API-SPY 用于授权的渗透测试和安全研究
- 尊重速率限制,请勿执行 DoS 攻击
### 最佳实践
1. **获得授权**:在测试前获得书面许可
2. **使用合适的字典**:为目标选择相关的 endpoint
3. **监控检测**:留意 WAF/IDS 的拦截或账户锁定情况
4. **遵守速率限制**:对生产系统使用较低的线程数
5. **记录发现**:记录所有发现的 endpoint 以便报告
## 高级用法
### 自定义超时值
编辑源代码以调整超时值:
```
def ask_subscan(url, wordlist, timeout=10): # Change from 5 to 10 seconds
```
### 过滤结果
创建针对特定 API 路径的字典:
```
# 仅 Admin endpoints
grep -i "admin" full-wordlist.txt > admin-wordlist.txt
# 仅 v1 API
grep "v1" full-wordlist.txt > v1-wordlist.txt
```
### 批量扫描
使用循环扫描多个目标:
```
for target in http://target1.com http://target2.com http://target3.com; do
python3 apispy.py "$target" wordlist.txt -t10
done
```
## 架构
### apispy.py(主扫描器)
- 编排扫描工作流
- 管理 thread 和并发请求
- 处理交互式提示和终端生成
- 协调子扫描和探测操作
### apiprobe.py(方法探测器)
- 在发现的 endpoint 上测试 HTTP 方法
- 报告方法可用性和状态码
- 从 HTTP header 中提取提示信息
- 提供 endpoint 能力评估
## 免责声明
本工具仅供教育和授权的安全测试目的使用。用户有责任在扫描任何系统之前确保已获得适当的授权。未经授权访问计算机系统是违法行为。
## 许可证
本项目按“原样”提供,用于安全研究和授权测试目的。
**作者:** austinjump-sec
**仓库:** [austinjump-sec/API-SPY](https://github.com/austinjump-sec/API-SPY)
## 功能
✨ **核心功能:**
- 🎯 基于字典的暴力破解,实现快速 endpoint 发现
- 🔄 对已发现的 endpoint 自动进行递归子扫描
- 🔍 HTTP 方法探测(GET、POST、PUT、DELETE、PATCH、OPTIONS)
- ⚡ 多线程扫描以提升性能
- 📊 智能状态码处理(200、401、403)
- 🔗 交互式提示,支持选择性子扫描和探测
- 🕷️ JavaScript 抓取,用于发现常见的 /api/ endpoint
- 🪟 支持终端多路复用,实现并行操作
- ⏱️ 可配置超时,自动跳过提示
## 安装说明
### 前置条件
- Python 3.6+
- `requests` 库
- `tmux`(可选,用于 `--split` 标志)
- `xfce-terminal`(适用于 Linux 桌面环境)
### 设置
```
# 克隆 repository
git clone https://github.com/austinjump-sec/API-SPY.git
cd API-SPY
# 安装 dependencies
pip install requests
# 使 scripts 可执行(可选)
chmod +x apispy.py apiprobe.py
```
## 用法
### 基本语法
```
python3 apispy.py 标签:API发现, Python, 无后门, 红队侦察, 路径扫描, 逆向工具