| name | js-api-extract |
| description | JavaScript 静态分析提取隐藏 API 端点。当目标是 SPA/前后端分离架构、页面使用 Vue/React/Angular、或常规目录扫描收效甚微时使用。通过分析 JS bundle 提取 API 路径、密钥、内部域名、WebSocket 端点。是 API 渗透的信息收集阶段。发现端点后 → api-fuzz 进行语义化 fuzz |
| metadata | {"tags":"js,javascript,api,extract,spa,vue,react,angular,webpack,bundle,endpoint,前端分析","category":"recon"} |
JavaScript API 端点提取方法论
前后端分离架构中,JS bundle 是 API 端点的最大信息源——比目录扫描高效 10 倍。
⛔ 深入参考(必读)
Phase 1: JS 文件收集
1.1 从页面 HTML 收集
curl -s "$TARGET" | grep -oE '(src|href)="[^"]*\.js[^"]*"' | sed 's/.*="\(.*\)"/\1/'
curl -s "$TARGET" | grep -oP '(?:src|href|url)\s*[=:]\s*["\x27]([^"\x27]*\.js[^"\x27]*)["\x27]' | sort -u
1.2 从 Source Map 恢复
curl -s "$TARGET/static/js/app.xxx.js" | tail -1
curl -s "$TARGET/static/js/app.xxx.js.map" -o sourcemap.json
1.3 从 Webpack 清单收集
/static/js/manifest.json
/asset-manifest.json
/webpack-manifest.json
/build/asset-manifest.json
/static/js/runtime~main.xxx.js
1.4 历史版本
curl -s "https://web.archive.org/cdx/search/cdx?url=$DOMAIN/*.js&output=text&fl=original" | sort -u
Phase 2: API 端点提取
2.1 路径模式提取
curl -s "$JS_URL" | grep -oP '["'"'"'](/(?:api|v[0-9]|rest|service|graphql|ws|internal|admin|auth|user|public)[^\s"'"'"']*?)["'"'"']' | sort -u
curl -s "$JS_URL" | grep -oP '(?:baseURL|BASE_URL|API_URL|apiPrefix|apiBase)\s*[=:]\s*["'"'"']([^"'"'"']+)["'"'"']'
curl -s "$JS_URL" | grep -oP '["'"'"'](/[a-zA-Z][a-zA-Z0-9_/\-]{2,}(?:\?[^"'"'"']*)?)["'"'"']' | sort -u | grep -v '\.\(js\|css\|png\|jpg\|svg\|ico\|woff\|ttf\)'
2.2 完整 URL 提取
curl -s "$JS_URL" | grep -oP 'https?://[^\s"'"'"'<>]+' | sort -u
curl -s "$JS_URL" | grep -oP 'https?://[a-zA-Z0-9._-]+\.DOMAIN\.com[^\s"'"'"']*' | sort -u
2.3 关键信息提取
curl -s "$JS_URL" | grep -oiP '(?:api[_-]?key|secret|token|auth|password|credential)\s*[=:]\s*["'"'"']([^"'"'"']{8,})["'"'"']'
curl -s "$JS_URL" | grep -oP 'wss?://[^\s"'"'"']+' | sort -u
curl -s "$JS_URL" | grep -oP '(?:10|172\.(?:1[6-9]|2\d|3[01])|192\.168)\.\d+\.\d+' | sort -u
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: 批量验证
for path in $(cat extracted_paths.txt); do
code=$(curl -s -o /dev/null -w "%{http_code}" "$TARGET$path" --connect-timeout 5 -m 10)
echo "$code $path"
done | grep -v "^404 " | sort
关键看点:
200 → 直接可访问,检查响应内容
401/403 → 存在但需认证,尝试绕过
405 → 端点存在但方法不对,尝试 POST/PUT/DELETE
500 → 后端报错,可能有注入点
301/302 → 跟踪重定向目标
输出要求
提取结束后输出:
- JS 文件清单 — 分析了哪些 JS
- 发现的 API 端点列表 — 按优先级排序
- 暴露的敏感信息 — API Key、内部域名、Token
- 推荐的下一步测试 — 哪些端点应该优先 fuzz