如果本项目对你的工作有帮助,请支持持续的维护和新功能开发。
ETH 捐赠钱包
0x11282eE5726B3370c8B480e321b3B2aA13686582
扫描二维码或复制上面的钱包地址。
异步、模块化的 API 安全扫描器,用于 API 基线测试和回归检测。
结合发现功能与定向检查(CORS/CSP/GraphQL/OpenAPI/JWT/API 安全),采用自适应并发,并输出 CI 就绪的结果(NDJSON/SARIF)。
用例:攻击方用于红队/API 渗透测试的发现与漏洞利用验证;防御方用于 CI/CD 回归门禁、持续 API 加固以及早期错误配置检测。
大规模扫描? 请参阅 Triage Mode — 在 20 分钟内使用核心安全检查扫描 5000 个目标,然后使用 Enrich Mode 为发现结果添加威胁情报上下文(端口、CVE、ASN、域名年龄)。
ApiHunterapihunterapi_scannerapihunter(cargo run 的默认项)请在 GitHub 仓库设置中进行以下配置,以提高可发现性:
Async API security scanner for CORS/CSP/GraphQL/JWT/OpenAPI and active API posture checks.https://github.com/Teycir/ApiHunterrust, security, api-security, scanner, graphql, cors, csp, jwt, openapi, sarif, ndjsonflowchart LR A[CLI apihunter] --> B[main.rs] D[Input Sources] --> E[Pre-filter + Discovery] B --> C[HttpClient + Config] E --> F[runner.rs] C --> F
F --> G1[Passive scanners]
F --> G2[Active scanners]
I[template-tool] --> H[CVE templates]
H --> G2
G1 --> J[Findings]
G2 --> J
J --> K[Reporter]
K --> L[Auto Reports]
K --> M[CI/CD Controls]
## 为什么选择 ApiHunter?
### 核心优势
- **API 优先架构**:专为 REST/GraphQL API 构建,而非从 Web 应用扫描器改造而来
- **智能误报抑制**:
- 通过金丝雀探测进行 SPA 兜底路由检测
- 上下文感知的密钥验证(前端与后端)
- 响应体内容验证和 Referer 检查
- 响应指纹识别以跳过重复发现
- **设计上对生产环境安全**:
- 自适应并发(AIMD),出错时自动退避
- 按主机限速,可配置延迟
- 礼貌性控制(重试、超时、WAF 规避)
- 主动检查的干运行模式
- **隐蔽与规避**:
- 从精选池(assets/user_agents.txt)运行时轮换 User-Agent
- 带抖动的随机请求延迟
- 按主机强制延迟(避免突发模式)
- 带指数退避的重试逻辑
- 自定义请求头注入,以与合法流量混杂
- 基于服务器响应的自适应计时
- 默认模式下无硬编码扫描器指纹
### 隐蔽技术深度解析
ApiHunter 使用多种隐蔽技术来避免被 WAF(Web 应用防火墙)和机器人防护系统检测:
#### 1. User-Agent 轮换
**作用:** 从文件(`assets/user_agents.txt`)中随机轮换使用 100+ 个真实浏览器 User-Agent 字符串
**原理:** 机器人通常使用相同的 User-Agent(如 `curl/7.68.0`)。通过伪装成 Chrome、Firefox、Safari 等浏览器,你能与合法流量混杂在一起
**简单类比:** 就像穿着不同的伪装,而不是总是穿着同一套制服
#### 2. 随机计时与抖动
**作用:** 在请求之间添加随机延迟(由 `--delay-ms` 控制),并带有抖动(小幅随机变化)
**原理:** 机器人以完美间隔发送请求(恰好相隔 100ms)。人类行为不可预测。随机计时使流量看起来更自然
**简单类比:** 用不规则步伐行走,而不是像机器人一样齐步前进
#### 3. 按主机强制延迟
**作用:** 分别跟踪每个域的延迟,而不是全局统一
**原理:** 防止你瞬间对同一主机发起 50 次请求的突发模式。每个主机看到的是礼貌、间隔均匀的请求
**简单类比:** 在不同对话中轮流发言,而不是反复对一个人大喊
#### 4. 自适应并发(AIMD)
**作用:** 在遇到 429(限流)或 503(服务器繁忙)错误时自动减速,成功时加速
**原理:** 被发现时退避,模拟浏览器的重试方式。WAF 会认为“此客户端尊重我们的限制”
**简单类比:** 交通拥堵时减速,开阔道路上加速
#### 5. 指数退避重试
**作用:** 当请求失败时,重试前依次等待 1 秒、2 秒、4 秒
**原理:** 合法客户端会优雅地重试。机器人通常立即重试或放弃
**简单类比:** 敲门时每次等待更久,而不是持续猛敲
#### 6. 无扫描器指纹
**作用:** 不发送如 `X-Scanner: ApiHunter` 之类的请求头,也不使用可预测的模式
**原理:** 许多工具会留下签名(Nuclei 模板、sqlmap 模式)。ApiHunter 避免明显的标记
**简单类比:** 不佩戴写着“安全测试员”的名牌
#### 7. 连接复用与池化
**作用:** 使用按主机的 HTTP 客户端连接池,保持连接存活
**原理:** 浏览器会复用连接。每个请求都打开/关闭连接看起来很可疑
**简单类比:** 保持门开着,而不是猛地关上门再按门铃
#### 8. 自定义请求头注入
**作用:** 可以添加 `Referer`、`X-Forwarded-For`、自定义 Cookie 等请求头
**原理:** 使请求看起来像是来自合法的应用程序流程(点击了链接、具备会话 Cookie)
**简单类比:** 进入场馆时出示票根,而不是翻越围栏
#### 检测对比
| 技术 | 无规避 | 有规避 |
|-----------|----------------|-------------|
| **User-Agent** | `python-requests/2.28.0`(明显的机器人) | `Mozilla/5.0 (Windows NT 10.0; Win64; x64)...`(看起来像 Chrome) |
| **计时** | 完美 100ms 间隔 → WAF 拦截 | 120ms、95ms、180ms → 看起来像人类 |
| **重试** | 立即重试 → 封禁 | 等待 1s→2s→4s → “耐心客户端” |
| **并发** | 100 个并行请求 → 触发警报 | 基于响应自适应 5→10→3 → “礼貌浏览器” |
#### 何时使用 `--waf-evasion`
- 测试带有 Cloudflare/Akamai/AWS WAF 的生产 API
- 在大型扫描中避免 IP 封禁
- 需要隐匿行踪的渗透测试
- **原生 CI/CD**:
- 基线差异对比(仅报告新发现)
- 流式 NDJSON 输出,用于实时监控
- SARIF 2.1.0,用于 GitHub/GitLab 代码扫描
- 退出码位掩码,用于管道控制
- 基于严重级别的过滤和失败阈值
- **大规模性能**:
- 基于 Rust 异步运行时(tokio),零成本抽象
- 通过信号量限制并行度的并发扫描
- 按主机的 HTTP 客户端连接池,避免连接瓶颈
- 高效内存使用(无 GC 暂停)
- **全面的认证支持**:
- 基于 JSON 的认证流程,支持 Cookie/请求头提取
- 双身份 IDOR/BOLA 测试
- 会话文件导入(Excalibur 集成)
- Bearer、Basic 和自定义请求头认证
- 自动使用未认证客户端进行权限提升检查
## 扫描器模块
ApiHunter 包含 13 个内置扫描器模块。有关详细的检测逻辑,请参阅 [docs/scanners.md](https://github.com/teycir/apihunter/blob/main/docs/scanners.md)。