haibo3434358/scareaisec/js-api-extract
Claude Code and agent skill by haibo3434358/scareaisec
- community
Checking that the SKILL.md file is still in the repository.
JavaScript 静态分析提取隐藏 API 端点 + Source Map 深度利用。当目标是 SPA/前后端分离、Vue/React/Angular/Vite/Webpack、常规目录扫描收效甚微、或需要从 JS bundle/source map/localStorage/config 中提取 API、密钥、内部域名、WebSocket、GraphQL、路由和前端权限逻辑时使用。发现端点后应路由到 api-fuzz、idor、auth-bypass 等专项测试。
Install
npx vskill@latest install haibo3434358/scareaisec/js-api-extractSKILL.md
JavaScript API 端点提取方法论
关于本 Skill 的使用边界(读 Phase 之前必读)本 Skill 是「从 JS bundle / SourceMap / 运行时全局里提取隐藏 API、密钥、内部域名、路由、前端鉴权逻辑」的采集与转发层,不是「前端安全总论」,也不是「接口测试本身」。- 不要把「提取出的 endpoint 列表」当成交付物——本 Skill 输出的是测试队列,必须转api-fuzz/idor-methodology/auth-bypass-methodology/file-upload-methodology才能出洞。- 不要把「JS 被混淆」「只看到 webpackJsonp」当成「无法分析」——混淆 ≠ 加密,字符串字面量总是明文;grephttps:////api//wss?:///apiKey仍能拿到大部分价值。- 不要把「.js.map 返回 200」直接等同「SourceMap 泄露确认」——SPA fallback / CDN 默认 200 / index.html 伪装甚多,必须看Content-Type与首行是否为 JSON 且含version/sources/mappings字段。- 不要把本 Skill 当成「鉴权绕过」「提权」「身份伪造」的主路——仅前端isAdmin/router guard判断不能直接下「后端也不鉴权」结论,必须转auth-bypass-methodology/privilege-escalation-web多账号/多角色闭环。- 不要把「拿到apiKey="xxx"」当成「密钥有效」——需区分 公开可公开密钥(AMap/Mapbox/reCAPTCHA site key) vs 不可泄露密钥(AKIA/sk\_live/SecretKey/JWT\_SECRET);后者才是 P0 。- 看到SPA / Vue / React / Angular / Vite / webpack / sourceMappingURL / @fs / chunk-vendors / runtime\~main / manifest.json / asset-manifest / sw.js / __NEXT_DATA__ / window.__INITIAL_STATE__ / localStorage / WebSocket,都应把本 Skill 当作必查项跳 Phase 1。
🤖 Agent 工具映射
| 场景 | 优先使用的 Agent 工具 | |
|---|---|---|
| 从页面 HTML、动态加载、iframe、运行时 chunk 中收集 JS、manifest 和 sourcemap 线索 | browser_get_content + proxy_get_traffic | |
请求 JS bundle、.map、manifest、runtime chunk、Vite 源码路径和 @fs 路径 | proxy_send_request + proxy_get_flow_detail | |
| 在浏览器上下文读取全局配置、localStorage、sessionStorage、运行时变量和前端路由状态 | browser_evaluate | |
| 批量提取 API 路径、完整 URL、WebSocket、GraphQL、路由、baseURL 和敏感关键字 | python3 | |
| 对发现端点做存活验证、方法探测、登录/未登录/不同角色响应对比 | proxy_send_request + proxy_diff_responses | |
对 SourceMap/Vite Dev Server 暴露继续审计源码、.env、配置、seed、后端入口等高价值文件 | proxy_send_request | |
将端点按风险路由到 api-fuzz、idor-methodology、auth-bypass-methodology、file-upload-methodology 等专项 | knowledge_load_skill | |
| 固化隐藏 API、SourceMap、硬编码密钥、内部域名、前端鉴权或源码泄露证据 | checklist_mark + note_add |
执行要点:JS 分析不是只列接口;必须把发现结果转成漏洞测试队列,并验证权限、可用性、敏感信息真实性或源码泄露影响。
前后端分离架构中,JS bundle 是 API 端点的最大信息源——比目录扫描高效 10 倍。
0. 立即执行摘要:JS 提取结果必须转成漏洞测试队列
看到 SPA、JS bundle、.map、sourceMappingURL、axios/fetch、baseURL/API_URL、前端路由、localStorage、WebSocket、GraphQL 时,必须进入本 skill。JS 分析不只是找路径,还要找:隐藏 API、前端权限判断、硬编码密钥、内部域名、旧接口、管理端路由、对象 ID 参数、上传/导出/支付接口。
优先顺序:
- 收集所有 JS/chunk/runtime/source map,提取 API、完整 URL、WebSocket、GraphQL、路由。
- 搜索
role/isAdmin/permission/hasPerm/authGuard,识别仅前端鉴权。 - 搜索
apiKey/secret/token/password/AWS/AKIA/sk_live,识别硬编码敏感信息。 - 对提取端点按风险分类,并路由到
api-fuzz、idor-methodology、auth-bypass-methodology、file-upload-methodology。 - Source Map/Vite Dev Server 暴露时,优先审计源码、配置、
.env和 API 定义。
1. JS 发现 → 漏洞假设路由矩阵
| JS 发现 | 漏洞假设 | 后续 skill | |
|---|---|---|---|
/admin/、隐藏 router | 垂直越权/前端鉴权 | privilege-escalation-web、auth-bypass-methodology | |
/api/v1/、旧接口 | 认证降级/IDOR | auth-bypass-methodology、idor-methodology | |
user_id/order_id/file_id | IDOR/BOLA | idor-methodology | |
upload/import/export/download | 上传/任意下载/导出越权 | file-upload-methodology、idor-methodology | |
baseURL/internal/dev/staging | 内部接口泄露 | api-fuzz、information-disclosure-methodology | |
apiKey/secret/token/password | 硬编码密钥 | information-disclosure-methodology、auth-bypass-methodology | |
isAdmin/role/permission | 前端权限控制 | privilege-escalation-web | |
ws://、socket.io | WebSocket 越权 | websocket-attack | |
.map/Vite @fs | 源码/文件读取 | information-disclosure-methodology、lfi-rfi-methodology |
Phase 1: JS 文件收集
1.1 从页面 HTML 收集
1.2 从 Source Map 恢复
1.2.1 🔴 Source Map 深度利用攻击链(实战高价值)
场景:登录页面渗透时发现.js.map可访问,从源码审计一路打到硬编码密码。这是一条完整的纵深攻击链,每一步的发现都是下一步的入口。
攻击链:Source Map → Dev Server → 源码 → @fs → 硬编码密码
Step 1: 确认 Source Map 泄露
Step 2: 判断 Dev Server 类型
Step 3: 源码审计——重点文件
Step 4: Vite @fs 路径遍历(高危!)
Step 5: 审计目标——找什么
| 目标文件 | 找什么 | 危害 | |
|---|---|---|---|
prisma/seed.ts | 硬编码的初始用户密码 | 直接登录 admin | |
.env / .env.local | DATABASE_URL、JWT_SECRET、API_KEY | 接管数据库/伪造 Token | |
src/utils/request.ts | 硬编码的 Authorization header | 绕过认证 | |
src/router/index.ts | meta.requiresAuth 判断逻辑 | 前端鉴权绕过 | |
server/config.ts | 数据库密码、第三方 API 密钥 | 横向移动 | |
docker-compose.yml | 数据库端口、默认密码 | 直连数据库 |
Agent 执行映射:
⚠️ 注意:@fs 路径遍历是 Vite 开发服务器的已知特性(非 CVE),但生产环境不应暴露 Dev Server。发现此问题本身就是一个高危漏洞。
1.3 从 Webpack 清单收集
1.4 历史版本
Phase 2: API 端点提取
2.1 路径模式提取
2.2 完整 URL 提取
2.3 关键信息提取
Phase 3: 端点分类与优先级
提取完后按安全价值分类:
| 优先级 | 特征 | 说明 | |
|---|---|---|---|
| 🔴 高 | /admin/, /internal/, /debug/, /manage/ | 管理功能,可能缺乏认证 | |
| 🔴 高 | /upload, /import, /export, /download | 文件操作,可能有路径穿越/任意读写 | |
| 🔴 高 | /user/, /account/, /profile/, /order/ | 用户数据操作,IDOR 高发区 | |
| 🟡 中 | /auth/, /login/, /register/, /reset/ | 认证流程,可能有逻辑绕过 | |
| 🟡 中 | /search, /query, /filter | 查询接口,SQL 注入高发区 | |
| 🟢 低 | /static/, /public/, /health, /status | 静态资源/健康检查 |
Phase 4: 批量验证
关键看点:
200→ 直接可访问,检查响应内容401/403→ 存在但需认证,尝试绕过405→ 端点存在但方法不对,尝试 POST/PUT/DELETE500→ 后端报错,可能有注入点301/302→ 跟踪重定向目标
💡 决策树警告:上表 5 种状态码映射是最常见情况,不是穷尽列举。特别注意以下「状态码谎报」场景,遇到不能仅凭状态码下结论:- 404 但接口存在:后端统一返 404 隐藏接口存在性(「隐隐、错错」式),需看Content-Length/ 响应体是否为统一错误页、响应时间是否与真 404 不同。- 200 但是 SPA fallback:前端所有未命中路由都返index.html,会伪装成「接口存在」——必须比对Content-Type是application/json还是text/html。- 200 但 body 是「错误负载」:{"code":-1,"msg":"未授权"}/{"success":false},HTTP 级别 200 但业务上是 401——需看 body 中code字段而非只看 HTTP 状态码。- 403 但是 WAF/CDN 拦截(Cloudflare/阿里云盾/腾讯云 WAF)不是业务鉴权:应看响应 Header 中是否有cf-ray/x-waf-*、body 是否为拦截页;换 UA、换 IP、加合法 Referer/Cookie 后可能变 200。- 301/302 重定向到登录页:实际上是「未认证」的全局拦截,不代表接口不存在;加上会话后重请才能看真实响应。- `405 Method Not Allowed` 是强信号:表示路径真的在,只是你用错了动词——应依次试 GET/POST/PUT/PATCH/DELETE/OPTIONS 逐个跳变。- 同一 endpoint 在「未登录 / 低权 / 高权 / 另一租户」下响应不同,才是“存在 + 有鉴权”的金字塔判断,不要只用一个身份下结论。- 「JSONP/老接口 + `?callback=`」:状态码总是 200 但响应是xxx({...})包裹——这是jsonp-data-leak领域,不要当普通 JSON 接口误报。- WebSocket / SSE 接口(wss://、/sse、/events)不走 HTTP 状态码逻辑,HTTP HEAD 可能返 400/426 但接口是活的;必须用 WebSocket 客户端验证。看到任一异常,返回 Phase 2 重新抽路径特征或跳api-fuzz作变体验证,不要仅凭状态码判「存/不存」。
输出要求
提取结束后输出:
- JS 文件清单 — 分析了哪些 JS
- 发现的 API 端点列表 — 按优先级排序
- 暴露的敏感信息 — API Key、内部域名、Token
- 推荐的下一步测试 — 哪些端点应该优先 fuzz
输出格式
⛔ 「最低必测自检」— 标 not_vuln/skipped 前必答
| # | 必测项 | 跳过的合法理由 | |
|---|---|---|---|
| 1 | Source Map 探测:所有 JS 文件末尾尝试请求 .js.map,存在则解析 sources 字段 | 已确认全站 .map 都 404 | |
| 2 | 硬编码密钥扫描:grep JS bundle 中的 apiKey、secret、token、password、AWS、AKIA、AIza、sk_live_、sk_test_、长串 base64 | JS bundle 已用 js_extract_apis 全量扫描 | |
| 3 | 隐藏路由提取:grep router、routes、router/index,提取所有路由路径,对比 sitemap 是否有遗漏 | - | |
| 4 | 前端权限校验:找 isAdmin、role、permission、hasPerm 等判断,确认是否仅前端校验(后端无校验 = 越权) | - | |
| 5 | API endpoint 全量提取:用 js_extract_apis 工具提取所有 axios.get/post 等调用,对比已知 sitemap 找出未被爬虫发现的 endpoint | 工具已运行 | |
| 6 | Vite Dev Server 泄露(如果 sources 暴露):试 /@fs/<absolute-path> 读取服务端文件 | 非 Vite 框架 |
跳过的"非法"理由
- ❌ "JS 已混淆无法分析" → 混淆≠加密,仍可 grep 字符串字面量;用
proxy_send_request下载 JS 后 grephttps://、/api/
⚠️ Skill 边界与逃逸
本 Skill 负责「从前端产物里挖信息 → 过滤出有价值的 endpoint/密钥/路由/隐藏资源 → 转交主 Skill 闭环」,以下场景必须从本 Skill 主动逃逸到联动 Skill:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills_my/discovery/builtin/_phase/js-api-extract/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/haibo3434358/scareaisec/js-api-extract)