ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于目录爆破与 JS 逆向提取隐藏 API 接口的高效方法

基于目录爆破与 JS 逆向提取隐藏 API 接口的高效方法 基于目录爆破与 JS 逆向提取隐藏 API 接口的高效方法在前后端分离架构Vue/React/Angular普及的今天大量原本存在于后端的业务路由和接口规范被下沉到了前端代码中。传统黑盒测试中单纯依赖通用字典扫描 URL 已经很难触及深层业务逻辑。通过对前端打包产物JavaScript Bundle进行深度静态分析与 Source Map 还原结合自适应上下文的目录爆破技术是当前红队侦察与 API 安全审计中最有效的信息提取链路。前端打包产物与 API 泄露机理现代构建工具如 Webpack、Vite、Rollup在打包单页应用SPA时会将所有路由定义、Axios/Fetch 请求封装、后端接口路径以及部分调试参数压缩并打包进若干.js文件或 Chunk 分块中。在生产环境中这类打包产物通常存在以下安全隐患未清理的 Source Map 文件开发团队未在构建配置中关闭productionSourceMap: false导致.js.map文件可被直接下载攻击者能够完整还原包含注释、内部命名和未公开调试代码的原始源码树。异步 Chunk 路由清单泄露Webpack 的import()懒加载机制会在主入口文件中保留所有动态 Chunk 的哈希映射表使得攻击者可以遍历下载所有后台管理、内部运维模块的前端代码。硬编码鉴权 Header 与环境变量开发测试阶段残留的 JWT 静态 Token、API Key 或测试接口直接硬编码在前端请求拦截器中。JS 静态逆向与接口自动化提取对于经过混淆压缩的 JS 代码单纯依赖文本搜索容易遗漏拼接路由或产生大量误报。结合 AST抽象语法树解析和精准正则表达式是提取 API 端点的标准方案。1. 正则化特征提取与模式匹配在实际工程中可以编写专用提取脚本针对 Axios 实例、Fetch 封装以及标准 RESTful 路径进行全量匹配import re import requests import urllib3 from urllib.parse import urljoin urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 针对前端常见 API 定义模式的正则规则集 API_PATTERNS [ # 匹配标准绝对/相对 API 路径 r(?:|)((?:/api/|/v[1-9]/|/rest/|/admin/|/internal/)[a-zA-Z0-9_\-/])(?:|), # 匹配 axios/fetch 请求方法中的 URL 参数 r(?:\.get|\.post|\.put|\.delete|\.patch)\s*\(\s*[]([^])[], # 匹配对象属性中的 url/path 定义 r(?:url|path|api)\s*:\s*[]([^])[], ] def extract_endpoints_from_js(js_content): endpoints set() for pattern in API_PATTERNS: matches re.findall(pattern, js_content, re.IGNORECASE) for match in matches: # 过滤静态资源与常见非 API 格式 if not re.search(r\.(png|jpg|jpeg|svg|css|woff|woff2|vue|jsx?)$, match, re.IGNORECASE): endpoints.add(match) return endpoints def scan_js_asset(base_url, js_url): try: resp requests.get(js_url, verifyFalse, timeout10) if resp.status_code 200: found extract_endpoints_from_js(resp.text) print(f[*] 解析 {js_url} 发现 {len(found)} 个候选端点:) for ep in sorted(found): full_api urljoin(base_url, ep) print(f [] {ep} - {full_api}) except Exception as e: print(f[-] 请求错误: {e})2. Source Map 源码树还原如果目标服务器存在同名.map文件如app.min.js.map可以使用 Node.js 库restore-source-tree或 Python 工具快速还原完整工程结构# 探测 map 文件存在性 curl -I -k https://target-app.internal/static/js/app.2b918f.js.map # 执行源码树解包 npx restore-source-tree -e https://target-app.internal/static/js/app.2b918f.js.map -o ./unpacked_src解包后可直接在unpacked_src/src/api/目录下查看结构化的接口定义文件如user.js、auth.js、system.js包括请求入参结构与校验逻辑。高效目录爆破与过滤策略从 JS 中提取到 API 路由前缀如/api/v2/tenant/或/sys-manage/后需要结合高质量字典进行目录和参数枚举。传统爆破经常被动态 404、反爬网关和全量 200 自定义错误页面干扰。使用ffuf配合精确响应过滤规则可以实现毫秒级的纯净探测1. 过滤统一错误返回与静态字节当目标应用对所有不存在的路径都返回统一的 JSON 报错结构如{code: 40401, msg: Resource Not Found}且 HTTP 状态码为 200 时单纯依靠状态码过滤将失效。# 步骤一先发送一个随机不存在路径获取动态响应特征字数/词数/行数 curl -s https://target-app.internal/api/not_exist_route_987654 | wc -c # 步骤二使用 ffuf 基于响应大小-fs和正则过滤-fr进行精准爆破 ffuf -w custom_api_dict.txt \ -u https://target-app.internal/api/FUZZ \ -H Authorization: Bearer TOKEN \ -H X-Forwarded-For: 127.0.0.1 \ -mc 200,204,301,302,401,403 \ -fs 128 \ -t 40 \ -rate 100 \ -o scan_result.json2. 递归目录与接口上下文拼接针对基于模块划分的 RESTful 接口应当采用“基准路径 动作词”的级联字典策略/api/v1/user/ ├── export ├── batch-delete ├── query-all ├── impersonate └── reset-pwd通过管道方式将 JS 提取到的业务前缀与常见内部管理操作字典组合避免使用大而无当的几十万行通用字典盲目扫描将扫描请求压缩在几百次高质量探测以内有效规避 WAF 的频次阻断。接口安全检测链路闭环提取并验证 API 路由后需重点关注以下高危攻击面未授权访问与越权漏洞BOLA/IDOR直接向后台管理接口发送请求检查是否缺少 Token 验证或租户 ID 绑定检查。隐藏调试端点如/actuator/env、/swagger-ui.html、/api/debug/dump-config等排查运维和开发接口。HTTP 方法篡改测试POST、PUT、PATCH、DELETE是否在GET拦截时能够意外绕过权限校验。
返回列表