【API 安全】API-Pentest:基于 JS 分析 + AI Agent 的自动化 API 渗透测试工具实战指南
一、背景与痛点
在现代 Web 应用中,前后端分离架构已成为主流,SPA(单页应用)和复杂的前端 JS 逻辑使得传统的爬虫和接口发现工具面临巨大挑战:
- 接口隐藏深:大量 API 端点动态生成于 JS 文件中,传统爬虫难以覆盖
- 参数不完整:JS 中只能看到部分参数,隐藏参数和可选参数难以发现
- 测试效率低:手动分析每个接口耗时耗力,且容易遗漏
- AI 集成门槛高:现有工具往往依赖外部 LLM API Key,配置繁琐且有成本
针对这些痛点,开源社区推出了 API-Pentest------ 一款将 JS 逆向分析与 AI Agent 智能分析深度结合的 API 渗透测试自动化工具。本文将带你深入了解其原理、架构与实战用法。
二、工具概述
API-Pentest 是一个开源的 API 渗透测试自动化框架,其核心工作链路为:
浏览器登录 → Katana 爬虫 → 数据清洗 → JS Source Map 提炼 API → AI Agent 智能分析补全参数 + 发现隐藏端点 → 接口未授权测试 → 越权测试 → SQL 注入测试 → 报告产出
项目地址:https://github.com/XHSEC01/API-PENTEST
核心特性
- 无需 API Key:AI Agent(你对话的 AI)直接分析 API,不需要配置任何外部模型,零成本使用
- Katana 爬虫:原生支持 JS 渲染,完美解决 SPA 应用爬取难题
- JS Source Map 分析:自动从 JS 文件中提取 API 端点和参数定义
- 三层参数补全:JS 提取 → 规则推断 → AI Agent 分析,逐层增强参数覆盖率
- 系统化测试:基于增强后的完整 API 列表进行批量安全测试
- 自动化报告:生成 JSON 和 HTML 格式的渗透测试报告
三、环境要求与安装
环境要求
- Python 3.10+
- Katana 1.6+
- Playwright + Chromium
安装依赖
pip install httpx playwright chardet charset-normalizer
playwright install chromium
注意 :Katana 需要单独安装并加入系统 PATH,或在
config.py中配置其可执行文件路径。
四、快速开始:Agent 模式实战(推荐)
Agent 模式是该工具的最大亮点 ------无需任何 API Key,直接利用你正在对话的 AI Agent 完成智能分析。
Step 1:爬虫 + JS 分析 + 生成 Agent Prompt
python main.py --target https://example.com --agent
执行流程详解:
- 弹出浏览器,手动登录:工具会启动 Playwright 浏览器,你需要手动登录目标系统,工具会自动提取登录凭证(Cookie/Token)
- Katana 爬虫爬取:使用登录态对目标站点进行深度爬取,支持 JS 渲染
- 数据清洗:对爬取结果进行去重、过滤,提取有效 URL
- JS 文件分析:下载并分析所有 JS 文件,通过 Source Map 和正则提取 API 端点
- 规则引擎增强:基于内置规则推断参数类型和测试值
- 生成结构化 Prompt :输出
workspace/agent_prompt.json,等待 AI Agent 分析
Step 2:AI Agent 智能分析
将生成的 agent_prompt.json 交给 AI Agent(如本文的对话 AI),AI 会:
- 读取
workspace/agent_prompt.json中的结构化数据 - 分析每个 API 端点的业务语义和上下文
- 推断 JS 中未出现的隐藏参数(如分页参数、筛选条件、排序字段等)
- 发现规则引擎未覆盖的隐藏端点(如基于 CRUD 模式推断导出、删除等接口)
- 将分析结果写入
workspace/llm_analysis.json
Step 3:合并结果 + 执行测试 + 生成报告
python main.py --target https://example.com --merge-llm workspace/llm_analysis.json --skip-crawl --skip-login
执行流程:
- 合并 Agent 分析结果到
js_apis_enhanced.json - 未授权访问测试:不带凭证访问所有接口,检测未授权漏洞
- 越权测试:使用低权限凭证访问高权限接口,检测水平 / 垂直越权
- SQL 注入测试:对参数进行 SQL 注入 Payload 测试
- 生成 JSON 和 HTML 格式的渗透测试报告
五、三种分析模式对比
API-Pentest 提供了三种分析模式,适用于不同场景:
表格
| 模式 | 命令参数 | 需要 API Key | 分析质量 | 适用场景 |
|---|---|---|---|---|
| Agent 模式 | --agent |
❌ 不需要 | ⭐⭐⭐⭐⭐ | 推荐,零成本,分析质量最高 |
| 外部 LLM 模式 | --llm |
✅ 需要 | ⭐⭐⭐⭐ | 需要完全自动化,有 API Key |
| 仅规则模式 | 默认 | ❌ 不需要 | ⭐⭐⭐ | 快速扫描,不依赖 AI |
选择建议:日常渗透测试优先使用 Agent 模式,既免费又能获得最佳的分析质量;需要完全无人值守的自动化扫描时,可配置外部 LLM 模式。
六、核心架构深度解析
6.1 三层参数补全引擎
这是工具的核心设计,通过三层机制最大化参数覆盖率:
JS 提取的 API (js_apis.json)
│
▼
┌─────────────────────────────────────────────────┐
│ 三层参数补全引擎 │
│ │
│ Layer 1: JS 提取参数 (source=js_extracted) │
│ Layer 2: 规则推断参数 (source=rule:*) │
│ Layer 3: Agent 分析参数 (source=agent_inferred) │
│ │
│ 优先级: JS > Agent > 规则 (去重合并) │
└─────────────────────────────────────────────────┘
│
▼
参数增强后的端点 隐藏端点发现
(含 test_value) (CRUD 同族 + Agent 推断)
│ │
└───────────┬───────────┘
▼
js_apis_enhanced.json
│
┌───────────────┼───────────────┐
▼ ▼ ▼
未授权测试 越权测试 SQL注入测试
各层职责:
- Layer 1(JS 提取):从 JS 源码和 Source Map 中直接提取的参数,可信度最高
- Layer 2(规则推断) :基于常见 API 设计模式推断参数,如
page、size、id、status等 - Layer 3(Agent 分析) :AI 基于业务语义推断的隐藏参数,如
roleName、startTime、exportType等
6.2 Agent 模式工作流
main.py --agent main.py --merge-llm
│ │
▼ ▼
┌───────────┐ ┌──────────────┐
│ 规则引擎 │ AI Agent │ 合并 Agent │
│ 增强 │ 读取分析 │ 分析结果 │
│ │ ──────────────→ │ │
│ 生成 │ 写出结果 │ 生成 │
│ prompt │ │ enhanced.json│
└───────────┘ └──────────────┘
│ │
▼ ▼
agent_prompt.json js_apis_enhanced.json
│ │
│ AI Agent 读取 │ 后续测试使用
▼ ▼
llm_analysis.json 未授权/越权/SQL注入
七、分步执行详解
如果你希望更精细地控制每个步骤,可以使用分步脚本:
# Phase 1: 浏览器登录,提取凭证
python scripts/extract_credentials.py --url https://example.com --output workspace/sessions/credentials.json
# Phase 2: Katana 爬虫
python scripts/run_katana.py --target https://example.com
# Phase 3: 数据清洗
python scripts/clean_targets.py
# Phase 4: JS API 提取
python scripts/extract_js_apis.py --targets workspace/targets.txt --output workspace/js_apis.json
# Phase 4.5a: Agent 模式 --- 生成 prompt
python scripts/llm_analyze_apis.py --input workspace/js_apis.json --agent
# [此时将 agent_prompt.json 交给 AI Agent 分析,输出 llm_analysis.json]
# Phase 4.5b: 合并 Agent 分析结果
python scripts/llm_analyze_apis.py --input workspace/js_apis.json --merge workspace/llm_analysis.json
# Phase 5: 未授权测试
python scripts/test_unauth.py --apis workspace/js_apis_enhanced.json
# Phase 6: 越权测试
python scripts/test_idor.py --apis workspace/js_apis_enhanced.json --sessions workspace/sessions/
# Phase 7: SQL 注入测试
python scripts/test_sqli.py --apis workspace/js_apis_enhanced.json --sessions workspace/sessions/
# Phase 8: 生成报告
python scripts/generate_report.py --workspace workspace --target-url https://example.com
八、配置说明
编辑 config.py 进行个性化配置:
表格
| 配置项 | 默认值 | 说明 |
|---|---|---|
KATANA_PATH |
katana(需加入 PATH) | Katana 可执行文件路径 |
KATANA_DEPTH |
4 | 爬取深度 |
HTTP_TIMEOUT |
30 | HTTP 请求超时时间(秒) |
LLM_API_KEY |
环境变量 | 外部 LLM API Key(Agent 模式不需要) |
LLM_API_BASE |
环境变量 | 外部 LLM API 地址 |
LLM_MODEL |
环境变量 | 外部 LLM 模型名称 |
九、项目结构
api-pentest/
├── main.py # 主编排器(支持 --agent/--merge-llm/--llm)
├── config.py # 全局配置
├── scripts/
│ ├── extract_credentials.py # 浏览器登录提取凭证
│ ├── run_katana.py # Katana 爬虫
│ ├── clean_targets.py # 数据清洗
│ ├── extract_js_apis.py # JS Source Map 分析提取 API
│ ├── llm_analyze_apis.py # API 智能分析(Agent/LLM/规则三模式)
│ ├── test_unauth.py # 未授权测试
│ ├── test_idor.py # 越权测试
│ ├── test_sqli.py # SQL 注入测试
│ ├── generate_report.py # 报告生成
│ └── http_test.py # HTTP 发包工具
├── workspace/ # 工作目录
│ ├── sessions/ # 凭证文件
│ ├── crawl/ # 爬虫输出
│ ├── js_files/ # 下载的 JS 文件
│ ├── findings/ # 测试发现结果
│ ├── js_apis.json # JS 提取的 API
│ ├── agent_prompt.json # Agent 分析 prompt
│ ├── llm_analysis.json # Agent 分析结果
│ ├── js_apis_enhanced.json # 增强后的 API 列表
│ └── report_*.json # 最终报告
└── templates/ # 报告模板
十、关键数据结构
10.1 agent_prompt.json 结构
这是交给 AI Agent 分析的结构化输入:
{
"instructions": {
"role": "你是资深 Web 安全专家和 API 逆向工程师",
"task": "分析 API 端点,补全隐藏参数并发现未提取的端点",
"requirements": ["1. 推断隐藏参数", "2. 发现隐藏端点", "..."]
},
"target": "https://example.com",
"endpoint_groups": {
"role": [
{
"path": "/role/page",
"method": "POST",
"js_params": [...],
"rule_inferred_params": [...]
}
]
},
"rule_inferred_hidden_endpoints": [...],
"output_format": {
"schema": {
"analyzed_endpoints": [{"path": "...", "inferred_params": [...]}],
"hidden_endpoints": [{"path": "...", "params": [...]}]
},
"output_file": "workspace/llm_analysis.json"
}
}
10.2 llm_analysis.json 结构
AI Agent 输出的分析结果格式:
{
"analyzed_endpoints": [
{
"path": "/role/page",
"method": "POST",
"inferred_params": [
{
"name": "roleName",
"type": "string",
"test_value": "admin",
"reason": "角色名筛选"
}
],
"risk": "medium",
"notes": "分页查询接口,可能支持模糊搜索"
}
],
"hidden_endpoints": [
{
"path": "/role/export",
"method": "POST",
"params": [{"name": "format", "type": "string", "test_value": "xlsx"}],
"risk": "medium",
"reason": "基于 /role/page 推断存在导出接口"
}
]
}
十一、实战技巧与注意事项
11.1 提升爬取效果
- 适当增大
KATANA_DEPTH(如 5-6),但注意爬取时间会显著增加 - 登录后尽量浏览更多页面,触发更多动态 API 调用
- 对于需要特定操作才能出现的接口,可在浏览器中手动触发后再继续
11.2 AI Agent 分析优化
- 给 AI Agent 提供更多业务背景信息(如系统类型、主要功能模块)
- 对于大型系统,可按模块分批分析,避免单次输入过大
- 分析完成后人工复核高风险端点的参数推断
11.3 安全测试注意
- 务必在授权范围内测试,遵守《网络安全法》等相关法律法规
- 建议在测试环境或预发布环境进行,避免影响生产系统
- SQL 注入测试默认使用安全的探测 Payload,不会造成数据破坏
- 越权测试建议准备不同权限的测试账号
十二、总结与展望
API-Pentest 通过 JS 逆向分析 + 三层参数补全 + AI Agent 智能分析 的创新组合,有效解决了现代 Web 应用 API 渗透测试中的接口发现难、参数补全难、测试效率低等问题。特别是其独创的 Agent 模式,让每个安全研究者都能零成本利用 AI 提升渗透测试效率。

工具优势:
- 零成本使用 AI 分析(Agent 模式无需 API Key)
- 对 SPA 应用友好,JS 渲染爬取 + Source Map 分析
- 三层参数补全机制,覆盖率远超传统工具
- 模块化设计,支持分步执行和自定义扩展
未来可期待的方向:
- 支持更多漏洞类型检测(XSS、SSRF、文件上传等)
- 集成更多 AI 模型的本地推理支持
- 增加 API 模糊测试(Fuzzing)能力
- 支持 GraphQL、gRPC 等非 RESTful API
安全路上共勉。正如作者所言:有差距不可怕,我们需要的是去缩小差距,去战斗。但切勿去做坏事,我们需要的是白帽子,是维护我们的网络安全。