Files
reverse-skills-max/reverse-skill-repo/skills/field-journal/2026-05-17_pentest-vue-spa-actuator-leak.md

3.0 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
pentest-vue-spa-actuator-leak-2026-05-17 Vue SPA + Spring Boot 后台站点 Web 渗透 — 发现 API Key 硬编码、admin_path 泄露、API 文档未授权访问等 7 个安全问题
type
project

Field Journal — Vue SPA + Spring Boot 后台站点 Web 渗透

日期: 2026-05-17 目标: https://{target_domain}(卡密兑换/管理类站点,含 /api 与 /api/admin 两组接口) 类型: Web 渗透测试(黑盒) 耗时: ~1 小时

技术栈识别

  • 前端: Vue 3 + Vite + Element Plus + Axios + Vue Router (ES Module SPA)
  • 后端: Spring Boot(通过 Actuator 403 响应确认)
  • WAF: Cloudflare (+ 自定义弱密码拦截规则)
  • 验证码: 自建 SVG Captcha 系统

方法论

信息收集阶段

  1. HTTP 响应分析: 检查响应头获取技术栈信息(Server: cloudflare、Set-Cookie: csrf_token + server_name_session)
  2. DNS: 指向 {internal_ip}(保留型/RFC2544 段,疑似 Cloudflare → 源站之间链路或测试段)
  3. JS 静态分析: 下载所有 JS bundle 分析路由和 API 端点
    • 从 index-{hash}.js 提取完整路由表(13 个管理后台子页面路由)
    • 从 index-{hash}.js 提取完整 API 端点列表(两个 Axios 实例:/api 和 /api/admin)
    • 从 ApiDoc-{hash}.js 提取完整 API 文档内容
    • 从 Login-{hash}.js 提取登录流程和验证码机制

关键发现

1. 默认 API Key 硬编码泄露 (Critical)

  • API Key: {api_key}(64 字符 hex,疑似 SHA256 输出)
  • 该 Key 在 /api-doc 页面和所有代码示例中硬编码显示
  • 服务端验证确认为有效 Key(错误请求返回 400 而非 401)
  • 权限范围: card:redeem、card:cancel、card:query
  • 影响: 开卡、销卡、查卡、3DS OTP 获取

2. 公共 API 泄露 admin_path (High)

  • GET /api/config/public 返回 admin_path: "{admin_path}"
  • 绕过"路径隐藏"安全措施
  • 真实管理后台: /{admin_path}/login

3. API 文档完全暴露 (High)

  • /api-doc 页面无需认证
  • 包含所有 API 接口、参数、完整请求/响应示例

4. 验证码被禁用 (Medium)

  • captcha-required 返回 false

5. 内部拓扑信息泄露 (Medium)

  • /api/replacement/status 泄露节点组 ID 和卡段

工具使用

  • curl / Invoke-WebRequest (PowerShell): HTTP 请求
  • JS 静态分析(手动从 Vite 哈希化 bundle 提取路由和 API)
  • HEAD/GET 请求探测敏感路径

踩坑记录

  • Swagger/Knife4j 端点返回 SPA 页面(Vite SPA fallback),不能用 HEAD 判断是否存在
  • /api/external/* 端点无 Key 返回 401,有 Key 但错误请求返回 400,可用于验证 Key 有效性
  • Cloudflare WAF 对敏感路径返回 403 防火墙页面而非标准 403

后续可执行

  • 验证默认 API Key 是否真能开卡(需要有效 CDK)
  • 测试 admin 登录是否存在暴力破解绕过(虽然有 captcha 但可能未正确实施)
  • 检查 API Key 管理接口的授权控制