API 安全】API-Pentest:基于 JS 分析 + AI Agent 的自动化 API 渗透测试工具实战指南

【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

核心特性

  1. 无需 API Key:AI Agent(你对话的 AI)直接分析 API,不需要配置任何外部模型,零成本使用
  2. Katana 爬虫:原生支持 JS 渲染,完美解决 SPA 应用爬取难题
  3. JS Source Map 分析:自动从 JS 文件中提取 API 端点和参数定义
  4. 三层参数补全:JS 提取 → 规则推断 → AI Agent 分析,逐层增强参数覆盖率
  5. 系统化测试:基于增强后的完整 API 列表进行批量安全测试
  6. 自动化报告:生成 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

执行流程详解:

  1. 弹出浏览器,手动登录:工具会启动 Playwright 浏览器,你需要手动登录目标系统,工具会自动提取登录凭证(Cookie/Token)
  2. Katana 爬虫爬取:使用登录态对目标站点进行深度爬取,支持 JS 渲染
  3. 数据清洗:对爬取结果进行去重、过滤,提取有效 URL
  4. JS 文件分析:下载并分析所有 JS 文件,通过 Source Map 和正则提取 API 端点
  5. 规则引擎增强:基于内置规则推断参数类型和测试值
  6. 生成结构化 Prompt :输出 workspace/agent_prompt.json,等待 AI Agent 分析

Step 2:AI Agent 智能分析

将生成的 agent_prompt.json 交给 AI Agent(如本文的对话 AI),AI 会:

  1. 读取 workspace/agent_prompt.json 中的结构化数据
  2. 分析每个 API 端点的业务语义和上下文
  3. 推断 JS 中未出现的隐藏参数(如分页参数、筛选条件、排序字段等)
  4. 发现规则引擎未覆盖的隐藏端点(如基于 CRUD 模式推断导出、删除等接口)
  5. 将分析结果写入 workspace/llm_analysis.json

Step 3:合并结果 + 执行测试 + 生成报告

复制代码
python main.py --target https://example.com --merge-llm workspace/llm_analysis.json --skip-crawl --skip-login

执行流程:

  1. 合并 Agent 分析结果到 js_apis_enhanced.json
  2. 未授权访问测试:不带凭证访问所有接口,检测未授权漏洞
  3. 越权测试:使用低权限凭证访问高权限接口,检测水平 / 垂直越权
  4. SQL 注入测试:对参数进行 SQL 注入 Payload 测试
  5. 生成 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 设计模式推断参数,如 pagesizeidstatus
  • Layer 3(Agent 分析) :AI 基于业务语义推断的隐藏参数,如 roleNamestartTimeexportType

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

安全路上共勉。正如作者所言:有差距不可怕,我们需要的是去缩小差距,去战斗。但切勿去做坏事,我们需要的是白帽子,是维护我们的网络安全。

相关推荐
cfm_29141 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
147API1 小时前
蒸馏模型版本升级怎么做,权重、评测器和服务配置一起管
人工智能·深度学习·蒸馏·模型蒸馏
湘美书院--湘美谈教育1 小时前
湘美书院主理人谈AI文学:提示词与Skill的与时俱进
大数据·人工智能·安全·自动化·生活
满栀5851 小时前
状态管理:Redux、Vuex、Pinia 核心区别
前端·javascript·typescript
漏刻有时1 小时前
本地部署 Dify + DeepSeek 搭建AI知识问答客服全流程复盘
人工智能
weixin_549808361 小时前
人力资源数字化转型:从工具堆叠到AI原生架构的组织级跃迁路径
大数据·人工智能
l0001091 小时前
图书馆静谧环境构建:主流声学品牌产品与服务梳理
大数据·人工智能·声音
hz567891 小时前
视频会议终端对接详解:协议兼容、系统集成与常见问题
安全·实时音视频·信息与通信
倔强的石头1061 小时前
【机器学习】机器学习三大范式_监督无监督强化学习概览
人工智能·机器学习
DO_Community2 小时前
多模型路由怎么选?2026 年 4 款主流方案对比
人工智能