mcpField
J
js-api-extract

js-api-extract

github.com/wgpsec安全1.8k49 次安装4 天前更新
代码仓库

关于 js-api-extract

面向 Web 安全测试人员的 JavaScript API 端点提取方法论,利用 bundle、Source Map 和清单文件发现路径及敏感信息,并按安全价值分类和验证。

主要功能

  1. 01收集页面引用的 JS 文件
  2. 02从 Source Map 和清单恢复源码线索
  3. 03提取 API 路径与完整 URL
  4. 04查找密钥、内部域名和 WebSocket
  5. 05分类并批量验证端点

适用场景

  1. 01盘点前端代码中暴露的 API
  2. 02检查 Source Map 中的源码线索
  3. 03筛查前端泄露的敏感信息
  4. 04验证并排序待测端点

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wgpsec/aboutsecurity --skill js-api-extract

安装后在 Claude Code 中输入/js-api-extract确认已加载。

附带文件references/js-extract-patterns.md

详细介绍

来自项目 README

JavaScript API 端点提取方法论

前后端分离架构中,JS bundle 是 API 端点的最大信息源——比目录扫描高效 10 倍。

⛔ 深入参考(必读)


Phase 1: JS 文件收集

1.1 从页面 HTML 收集
# 抓取页面中所有 JS 引用
curl -s "$TARGET" | grep -oE '(src|href)="[^"]*\.js[^"]*"' | sed 's/.*="\(.*\)"/\1/'

# 递归抓取(含 iframe/动态加载)
curl -s "$TARGET" | grep -oP '(?:src|href|url)\s*[=:]\s*["\x27]([^"\x27]*\.js[^"\x27]*)["\x27]' | sort -u
1.2 从 Source Map 恢复
# 检查 JS 文件末尾的 sourceMappingURL
curl -s "$TARGET/static/js/app.xxx.js" | tail -1
# 如果有 //# sourceMappingURL=app.xxx.js.map
curl -s "$TARGET/static/js/app.xxx.js.map" -o sourcemap.json

# Source Map 暴露完整源码——等于拿到了前端源码
1.3 从 Webpack 清单收集
# 常见 chunk 清单文件
/static/js/manifest.json
/asset-manifest.json
/webpack-manifest.json
/build/asset-manifest.json
/static/js/runtime~main.xxx.js  # runtime chunk 包含所有 chunk 映射
1.4 历史版本
# Wayback Machine 获取旧版 JS(可能包含已删除但未下线的 API)
curl -s "https://web.archive.org/cdx/search/cdx?url=$DOMAIN/*.js&output=text&fl=original" | sort -u

Phase 2: API 端点提取

2.1 路径模式提取
# 从 JS 内容中提取 API 路径(最核心的一步)
curl -s "$JS_URL" | grep -oP '["'"'"'](/(?:api|v[0-9]|rest|service|graphql|ws|internal|admin|auth|user|public)[^\s"'"'"']*?)["'"'"']' | sort -u

# 拼接路径提取(前端常见写法:baseURL + path)
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 提取
# 提取完整的 HTTP(S) 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 关键信息提取
# API Key / Secret / Token
curl -s "$JS_URL" | grep -oiP '(?:api[_-]?key|secret|token|auth|password|credential)\s*[=:]\s*["'"'"']([^"'"'"']{8,})["'"'"']'

# WebSocket 端点
curl -s "$JS_URL" | grep -oP 'wss?://[^\s"'"'"']+' | sort -u

# 内部 IP/域名
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 → 跟踪重定向目标

输出要求

提取结束后输出:

  1. JS 文件清单 — 分析了哪些 JS
  2. 发现的 API 端点列表 — 按优先级排序
  3. 暴露的敏感信息 — API Key、内部域名、Token
  4. 推荐的下一步测试 — 哪些端点应该优先 fuzz

评论

支持 Markdown