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 枚举。 screenie work ## 功能 ✨ **核心功能:** - 🎯 基于字典的暴力破解,实现快速 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)
标签:API发现, Python, 无后门, 红队侦察, 路径扫描, 逆向工具