3.0 KiB
3.0 KiB
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 个安全问题 |
|
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 系统
方法论
信息收集阶段
- HTTP 响应分析: 检查响应头获取技术栈信息(
Server: cloudflare、Set-Cookie: csrf_token + server_name_session) - DNS: 指向
{internal_ip}(保留型/RFC2544 段,疑似 Cloudflare → 源站之间链路或测试段) - 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 管理接口的授权控制