JS 信息收集
核心原则
所有 JS 内容获取必须优先使用 Playwright MCP,禁止直接用 curl 读取JS:
playwright_navigate → playwright_get → playwright_console_logs → playwright_evaluate
curl 仅限 Playwright 不可用时降级。
文件组织
所有输出写入 tmp/<时间戳>/raw/,项目根目录禁止存放。
阶段1:JS 收集
playwright_get_visible_html提取<script src="...">playwright_evaluate监听performance.getEntriesByType('resource')获取动态加载JS
优先级:P0(ipconfig/config/api/setting/routes/permission.js)→ P1(app/chunk-vendors/chunk-*.js)→ P2(第三方SDK/.map)
阶段2:凭据提取
搜索关键词覆盖 6 类:认证凭据(apiKey/appSecret/token/password/Basic auth)、云服务Key(AWS/阿里云/腾讯云)、数据库连接串、加密密钥(AES/RSA/HMAC)、注释、内网地址。
发现凭据后记录:类型 | 文件 | 值(脱敏前5+后3)| 风险等级。
阶段3:API路径与路由
- 显式API:搜索
baseUrl/axios.create/fetch(等提取 - 路由表:搜索
createRouter/VueRouter/createBrowserRouter/<Route path= - 运行时提取:
playwright_evaluate→$router?.getRoutes()或$router?.options?.routes
阶段4:认证逻辑
- 登录流程逆向:接口路径、密码加密方式、验证码接口、Token存储/携带方式
- 签名算法:搜索
sign/signature/hmac→ 提取字段拼接顺序和secret来源 - Token刷新:搜索
refreshToken/refresh
阶段5:环境配置
- 多环境:搜索
dev/staging/production→ 各环境baseURL → 生产JS残留的测试地址 - Debug模式:搜索
debug/VConsole/eruda - 内网地址:IP + 内部域名(.internal/.oa) + 管理后台域名 + 预发布域名
阶段6:运行时提取(Playwright 专属)
- localStorage/sessionStorage:关注 token/userInfo/auth/perms/roles/tenant
- Cookie:document.cookie,分析Token/Session
- 控制台日志:调试信息泄露
- IndexedDB:
indexedDB.databases() - iframe/postMessage:目标origin、message处理器
- 错误监控:Sentry DSN/GA ID/GTM配置
- jQuery:
$.ajaxSetup中的baseURL/headers/CSRF Token
阶段7:凭据即时验证
发现即测,不等到最后。
子技能触发
| 检测特征 | 触发 |
|---|---|
JS末尾含 sourceMappingURL |
sourcemap.md |
webpackJsonp 或 chunk hash命名 |
webpack.md |
__vue__/__vue_app__/createRouter |
vue.md |
__NEXT_DATA__/React.createElement/jsx( |
react.md |
navigator.serviceWorker |
service-worker.md |
new WebSocket(/io(/SignalR |
websocket.md |
ApolloClient/Relay/urql/`gql`` |
graphql-client.md |
输出产物
js_files.txt / hardcoded_creds.txt / apis_from_js.txt / routes.txt / internal_ips.txt / auth_logic.txt / runtime_storage.txt / 各子技能目录