API-Pentest — 基于 JS 分析 + AI Agent 的 API 渗透测试工具
XHSEC01
XHSEC01
知微守望
2026年8月3日 14:30
北京
在小说阅读器读本章
去阅读
思路
浏览器登录 → Katana 爬虫 → 数据清洗 → JS Source Map 提炼 API →AI Agent 智能分析补全参数 + 发现隐藏端点→ 接口未授权测试 → 越权测试 → SQL 注入测试 → 报告产出
核心特性
- 无需 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-normalizerplaywright install chromium
快速开始(Agent 模式,无需 API Key)
Step 1: 爬虫 + JS 分析 + 生成 Agent prompt
python main.py --target https://example.com --agent
执行流程:
- 弹出浏览器,手动登录
- Katana 爬虫爬取
- 数据清洗
- JS 文件分析提取 API 端点
- 规则引擎增强参数
- 生成
workspace/agent_prompt.json(结构化 prompt) - 停止,等待 AI Agent 分析
Step 2: AI Agent 分析
AI Agent(你对话的 AI)会:
- 读取
workspace/agent_prompt.json - 分析每个 API 端点的业务语义
- 推断 JS 中未出现的隐藏参数
- 发现规则引擎未覆盖的隐藏端点
- 将分析结果写入
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 注入测试
- 生成报告
三种分析模式对比
| 模式 | 命令参数 | 需要 API Key | 分析质量 | 说明 |
| Agent 模式 | --agent | ❌ 不需要 | ⭐⭐⭐⭐⭐ | AI Agent 直接分析,推荐 |
| 外部 LLM 模式 | --llm | ✅ 需要 | ⭐⭐⭐⭐ | 调用 OpenAI/DeepSeek 等 |
| 仅规则模式 | 默认 | ❌ 不需要 | ⭐⭐⭐ | 内置规则引擎推断 |
分析架构
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注入
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 模式 — 生成 promptpython scripts/llm_analyze_apis.py --input workspace/js_apis.json --agent# [AI Agent 读取 agent_prompt.json,分析后写出 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-7: 测试python scripts/test_unauth.py --apis workspace/js_apis_enhanced.jsonpython scripts/test_idor.py --apis workspace/js_apis_enhanced.json --sessions workspace/sessions/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(--agent 生成)│ ├── llm_analysis.json # Agent 分析结果(AI 写出)│ ├── js_apis_enhanced.json # 增强后的 API(合并后)│ └── report_*.json # 最终报告└── templates/
agent\_prompt.json 结构
{ \"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\" }}
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 推断存在导出接口\" } ]}
参考链接
https://github.com/XHSEC01/API-PENTEST
多大神卧虎藏龙、开源分享。作为初学者,我们可能有差距,不论你之前是什么方向,是什么工作,是什么学历,是大学大专中专,亦或是高中初中,只要你喜欢安全,喜欢渗透,就朝着这个目标去努力吧!有差距不可怕,我们需要的是去缩小差距,去战斗,况且这个学习的历程真的很美,安全真的有意思。但切勿去做坏事,我们需要的是白帽子,是维护我们的网络,安全路上共勉。
本文版权归作者和微信公众号平台共有,重在学习交流,不以任何盈利为目的,欢迎转载。
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。公众号内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!
敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论