自动工作流之-web 网站

基于 AI 的 Web 前端 JS 自动化分析与接口提取实战

在 Web 渗透测试中,前端 JS 文件是接口发现的"金矿"。现代单页应用(SPA)普遍采用 webpack 打包,业务接口路径、请求参数、加密逻辑往往全部裸露在 JS 中。手工下载、解压、grep 逐一分析耗时费力。本文介绍一套用 AI(Claude Code)驱动的自动化工作流,从登录页 URL 出发,自动完成 JS 下载、接口提取、参数结构还原。


一、适用场景

  • Vue / React / Angular 等 webpack 打包的 SPA 站点
  • 登录页可访问(无需先登录即可拿到 HTML 与 JS 入口)
  • 目标已获合法授权(仅用于授权安全测试)

二、环境与工具

工具 用途
Claude Code (CLI) AI 驱动的分析大脑,负责解析、grep、生成报告
curl 下载 HTML / JS 文件,支持代理
Burp Suite (可选) 8080 代理拦截,用于复测与重放
浏览器 辅助定位入口、抓包对照

核心思路:让 AI 读取 webpack 的 chunk 映射函数,自动构造所有 JS 文件路径并批量下载,再按规则提取接口与参数。

三、自动化工作流

1. curl 访问登录页 URL  →  获取 HTML
   ↓
2. 解析 HTML 中的 <script src> + webpack app.js 入口
   ↓
3. 下载 app.js  →  解析 n.u=function(e){...} 获取 chunk 映射
   ↓ (递归解析 common.js / chunk-vendors.js 的二级 chunk)
4. 批量下载所有 JS  →  保存到指定目录
   ↓
5. 分析阶段(按需):
   a. 接口清单提取(e["XXX"]="path" 模式)
   b. baseURL 映射(createAxios({baseURL:...}))
   c. 接口参数构成(定位调用点,提取 {field:...} 对象)
   d. 公共字段头(axios 请求拦截器注入逻辑)
   ↓
6. 输出:api_list.txt / api_by_baseurl.txt / 参数结构报告

关键技术点

1. webpack chunk 映射解析

webpack 打包后,app.js 中存在一个 chunk 文件名映射函数:

n.u = function(e) {
    return "js/" + e + "." + {197:"a960d963", 7242:"0e3100f8", ...}[e] + ".js"
}

AI 读取该函数,即可还原所有 chunk 的完整文件名,构造下载列表批量 curl,无需手工逐个翻找。

2. 模块联邦(Module Federation)递归

部分站点采用模块联邦,host 的 app.js 引用 remote 的 /common/common.js 容器,后者再分包。需递归解析:

app.js  →  引用 /common/common.js
                ↓
          common.js  →  暴露 ./custom/request 等模块
                ↓
          7743.xxx.js  →  实际的 createAxios({baseURL:...}) 定义

3. 接口提取规则

接口常量通常以 IIFE 注入对象的形式定义:

(function(t){
    t["ENT_ACCOUNT_CHECK"] = "t0/entAccountCheck"
    t["FILE_PARSE"] = "fileParse"
    t["HOME_IMAGE_QUERY"] = "t1/homeImageQry"
})(a || (a = {}))

正则 t\["([A-Z_]+)"\]="([^"]+)" 可批量提取 常量名 → 接口路径

4. baseURL 映射

http 客户端通过 createAxios 集中定义:

httpEntmanagement = createAxios({baseURL:"/api/EIB.entmanagement/"})
httpComDowload    = createAxios({baseURL:"/api/eibDownload/EIB.common/"})
httpCorporatebank = createAxios({baseURL:"/api/EIB.corporatebank/"})

将接口函数与 baseURL 对应,即可还原完整请求 URL

httpEntmanagement.post({url:"t0/entAccountCheck"})
→ POST /api/EIB.entmanagement/t0/entAccountCheck

5. 参数结构还原

定位接口封装函数的调用点,提取传入的对象字面量:

// 接口定义
function o(t){ return httpEntmanagement.post({url:a.ENT_ACCOUNT_CHECK, data:t}) }

// 调用点(业务代码)
(0, Ae.t7)({
    makeFlag: "1",
    cifName: this.echoData.depositorNameCh,
    orgno: this.orgno
})

结合 axios 请求拦截器注入的公共字段(ch/sid/token/scene/head 等),还原完整请求体。

四、需要提供的参数

使用时,只需向 AI 提供以下 4 项参数:

必填 说明 示例
登录页 URL 站点登录入口 https://xxx.cn:port/eib/#/login
保存目录 JS 文件落盘目录(相对工作目录) 公司金融/ 或自定义名
是否经 burp 流量是否走 8080 代理 / (直连)
分析深度 见下方选项 1 / 2 / 3

分析深度选项

选项 深度 输出
1 仅下载 JS 文件落盘,不做接口分析
2 下载 + 接口清单 + baseURL 映射 api_list.txt + api_by_baseurl.txt
3 下载 + 接口清单 + 参数构成分析 每个接口的请求结构报告(方法/URL/业务字段/公共字段)

💡 提示:深度 3 会定位每个接口的调用点,提取业务参数对象,结合拦截器逻辑还原完整请求体,可直接用于后续 POC 构造。

五、实战案例(脱敏)

对某银行网银系统执行深度 3 分析,结果:

指标 数量
下载 JS 文件 70 个 chunk + app.js + common.js
提取接口 179 个
baseURL 分类 4 个(entmanagement / common / corporatebank / eibDownload)
参数结构还原 makeFlag 多场景、文件下载、开户校验等

单接口参数分析示例t0/entAccountCheck):

POST /api/EIB.entmanagement/t0/entAccountCheck
Content-Type: application/json

{
  "makeFlag": "1",              // 校验场景:1=按户名 2=按CIF序号 3=按账号
  "cifName": "<存款人名称>",     // makeFlag=1 时必填
  "orgno": "<机构号>",          // 公共必填
  "ch": "eibs",                 // 以下为拦截器注入公共字段
  "scene": "openAccountApply",
  "capCode": 1,
  "sid": "<会话ID>",
  "token": "<令牌>",
  "verifyToken": "<验证令牌>",
  "head": { "cnlTxnCd":"029999999", "deviceOS":"...", "isClient":"0" }
}

六、输出文件结构

项目目录/
├── <保存目录>/
│   ├── app.xxxxxxxx.js          # webpack 入口
│   ├── common.js                # 模块联邦容器(如有)
│   ├── chunk-vendors.xxxxxxxx.js
│   ├── 197.xxxxxxxx.js          # 业务 chunk
│   ├── 7242.xxxxxxxx.js
│   └── ...                      # 其余 chunk
├── output/
│   ├── api_list.txt             # 接口清单(深度≥2)
│   ├── api_by_baseurl.txt       # baseURL 分类(深度≥2)
│   └── api_params_report.md     # 参数结构报告(深度=3)

七、注意事项

  1. 授权优先:仅对已获书面授权的目标使用,遵守当地法律法规。
  2. 频率控制:批量下载 JS 时注意请求间隔,避免触发 WAF。
  3. 代理可选:经 burp 便于后续重放复测;直连速度更快。
  4. 加密接口:部分接口含前端加密(如 SM2/RSA),参数结构可还原但请求体需额外处理加密字段(本文不涉及加密逻辑破解)。
  5. 登录态依赖:区分"预审/公开接口"(未授权可达)与"登录后接口"(依赖 token),后者参数中的公共字段需从登录态获取。

八、总结

传统 JS 分析靠手工 grep + 浏览器断点,效率低且易遗漏。借助 AI 的代码理解能力,可自动化完成 下载 → 解析 → 提取 → 结构还原 全链路,将数小时的人工分析压缩到几分钟。尤其在大型 webpack 应用中,AI 能跨 chunk 追踪模块联邦依赖、还原完整调用链,这是手工分析难以覆盖的。

下一步可结合参数结构报告,直接生成 POC 请求脚本,进入漏洞验证阶段。


🔒 声明:本文所述技术仅用于已获授权的安全测试与防御研究。未经授权对他人系统进行测试属违法行为,作者不承担任何非法使用的法律责任。

posted @ 2026-08-12 16:44  潜伏237  阅读(32)  评论(0)    收藏  举报