记一次简单的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目录按照指引完成安装
漏洞复现
黑盒测试发现
- 访问后台登录页面
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存在文件上传与管理的多重漏洞,通过组合利用可导致任意代码执行。漏洞根源在于:
- 重命名操作缺乏文件类型检查
- 文件内容修改功能无安全限制
- 权限控制不严格
挖掘此类漏洞的关键在于发现功能链中的安全控制不一致性,并通过请求拦截与代码审计相结合的方式确认漏洞。