记一次简单的CMS漏洞挖掘
字数 1087 2025-08-09 22:16:00

飓飓风CMS漏洞挖掘与分析教学文档

环境搭建

系统要求

  • PHP 7.x版本
  • 推荐使用Docker环境

Docker环境配置

docker run -it -v $(pwd):/var/www/html -d -p 8888:80 镜像ID
  • 将本地源码目录映射到容器的/var/www/html
  • 映射端口8888到容器的80端口
  • 使用mattrayner/lamp镜像

额外工具

  • 将phpMyAdmin放入源码目录便于数据库管理

安装步骤

访问x/install目录按照指引完成安装

漏洞复现

黑盒测试发现

  1. 访问后台登录页面x/admin
  2. 发现文件管理功能,包含文件上传功能

文件上传测试

  1. 直接上传PHP webshell:返回"非法文件类型"错误
  2. 上传JPG文件:成功
  3. 通过文件管理功能:
    • 修改文件内容为PHP代码
    • 重命名文件为.php扩展名
  4. 直接访问上传的PHP文件,代码成功执行

漏洞分析

上传功能代码路径

jufengcms/x/plugin/managefile/controller/index.php

关键漏洞点

  1. 文件上传限制

    • 使用OnlineEditor类的uploadFile方法
    • 有白名单文件类型限制
  2. 文件重命名漏洞

    • OnlineEditor类的renameFile方法
    • 无文件类型限制,可修改为PHP扩展名
  3. 文件内容修改漏洞

    • 文件名和内容均可控
    • 可写入任意代码

数据包分析

  1. 文件上传数据包:

    • 触发uploadFile方法
    • 受白名单限制
  2. 文件重命名数据包:

    • 触发renameFile方法
    • 无类型限制
  3. 文件内容修改数据包:

    • 文件名和内容完全可控

漏洞利用链

  1. 上传任意允许类型的文件(如JPG)
  2. 修改文件内容为恶意PHP代码
  3. 重命名文件为PHP扩展名
  4. 直接访问执行PHP代码

防御建议

  1. 文件上传

    • 严格限制上传文件类型
    • 检查文件内容而不仅是扩展名
  2. 文件操作

    • 对重命名操作实施与上传相同的限制
    • 禁止将非PHP文件修改为PHP扩展名
  3. 权限控制

    • 限制文件管理功能的使用权限
    • 对文件内容修改操作进行严格验证

挖掘方法论

  1. 白盒与黑盒结合

    • 先进行黑盒测试发现可疑功能点
    • 再通过代码审计确认漏洞
  2. 重点关注

    • 文件上传与管理功能
    • 权限控制缺失的功能
    • 用户输入未过滤的操作
  3. 工具使用

    • 使用Burp Suite等工具拦截分析请求
    • 通过代码搜索快速定位关键函数

总结

该CMS存在文件上传与管理的多重漏洞,通过组合利用可导致任意代码执行。漏洞根源在于:

  1. 重命名操作缺乏文件类型检查
  2. 文件内容修改功能无安全限制
  3. 权限控制不严格

挖掘此类漏洞的关键在于发现功能链中的安全控制不一致性,并通过请求拦截与代码审计相结合的方式确认漏洞。

飓飓风CMS漏洞挖掘与分析教学文档 环境搭建 系统要求 PHP 7.x版本 推荐使用Docker环境 Docker环境配置 将本地源码目录映射到容器的 /var/www/html 映射端口8888到容器的80端口 使用 mattrayner/lamp 镜像 额外工具 将phpMyAdmin放入源码目录便于数据库管理 安装步骤 访问 x/install 目录按照指引完成安装 漏洞复现 黑盒测试发现 访问后台登录页面 x/admin 发现文件管理功能,包含文件上传功能 文件上传测试 直接上传PHP webshell:返回"非法文件类型"错误 上传JPG文件:成功 通过文件管理功能: 修改文件内容为PHP代码 重命名文件为 .php 扩展名 直接访问上传的PHP文件,代码成功执行 漏洞分析 上传功能代码路径 jufengcms/x/plugin/managefile/controller/index.php 关键漏洞点 文件上传限制 : 使用 OnlineEditor 类的 uploadFile 方法 有白名单文件类型限制 文件重命名漏洞 : OnlineEditor 类的 renameFile 方法 无文件类型限制,可修改为PHP扩展名 文件内容修改漏洞 : 文件名和内容均可控 可写入任意代码 数据包分析 文件上传数据包: 触发 uploadFile 方法 受白名单限制 文件重命名数据包: 触发 renameFile 方法 无类型限制 文件内容修改数据包: 文件名和内容完全可控 漏洞利用链 上传任意允许类型的文件(如JPG) 修改文件内容为恶意PHP代码 重命名文件为PHP扩展名 直接访问执行PHP代码 防御建议 文件上传 : 严格限制上传文件类型 检查文件内容而不仅是扩展名 文件操作 : 对重命名操作实施与上传相同的限制 禁止将非PHP文件修改为PHP扩展名 权限控制 : 限制文件管理功能的使用权限 对文件内容修改操作进行严格验证 挖掘方法论 白盒与黑盒结合 : 先进行黑盒测试发现可疑功能点 再通过代码审计确认漏洞 重点关注 : 文件上传与管理功能 权限控制缺失的功能 用户输入未过滤的操作 工具使用 : 使用Burp Suite等工具拦截分析请求 通过代码搜索快速定位关键函数 总结 该CMS存在文件上传与管理的多重漏洞,通过组合利用可导致任意代码执行。漏洞根源在于: 重命名操作缺乏文件类型检查 文件内容修改功能无安全限制 权限控制不严格 挖掘此类漏洞的关键在于发现功能链中的安全控制不一致性,并通过请求拦截与代码审计相结合的方式确认漏洞。