---
name: pentest-vue-spa-actuator-leak-2026-05-17
description: Vue SPA + Spring Boot 后台站点 Web 渗透 — 发现 API Key 硬编码、admin_path 泄露、API 文档未授权访问等 7 个安全问题
metadata:
  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 管理接口的授权控制
