YZNCMS白盒审计开源漏洞挖掘分析
字数 1301 2025-08-29 08:30:30
YZNCMS v2.0.1 安全漏洞分析与教学文档
1. 文件上传导致的命令执行漏洞
漏洞描述
YZNCMS最新版本v2.0.1在调试模式下,插件安装功能存在文件上传漏洞,攻击者可以通过修改插件压缩包上传并调用插件功能实现命令执行。
影响范围
- YZNCMS v2.0.1
- 需要后台权限
- 需要在调试模式下
漏洞分析步骤
-
插件安装功能分析
- 后台插件安装功能允许上传插件压缩包
- 安装的插件压缩包存储在:
runtime\admin\addons\command.zip
-
漏洞利用过程
- 下载插件压缩包
- 修改控制器文件:
app\admin\controller\Command.php - 修改
command方法代码部分为命令执行代码(如calc) - 重新打包并上传修改后的插件
- 调用插件功能执行命令
-
关键代码修改
// 修改Command.php中的command方法 public function command() { system('calc'); // 修改为任意命令 }
漏洞复现步骤
- 登录后台
- 使用插件安装功能上传任意插件
- 从
runtime\admin\addons\目录获取插件压缩包 - 解压并修改Command.php文件
- 重新打包并上传修改后的插件
- 调用插件功能触发命令执行
修复建议
- 严格验证上传的插件文件
- 禁用调试模式在生产环境
- 对插件执行功能进行权限控制
- 对上传的插件进行签名验证
2. 存储型XSS漏洞
漏洞描述
YZNCMS 2.0.1的Config.php存在存储型XSS漏洞,由于输入验证不足,攻击者可以注入恶意脚本并在其他用户浏览器中执行。
影响范围
- YZNCMS v2.0.1
- 需要后台权限
漏洞分析步骤
-
漏洞位置
- 文件路径:
admin/controller/general/Config.php - 关键方法:
ConfigModel::refreshFile()
- 文件路径:
-
漏洞触发流程
- 后台配置管理编辑站点名称
- 输入恶意XSS payload
- 系统调用
refreshFile()方法写入配置文件 - 未对内容进行过滤
- 再次访问该页面时自动触发XSS
-
关键代码分析
// 在Config.php中调用了写文件操作 ConfigModel::refreshFile(); // refreshFile方法中直接写入未过滤的内容 file_put_contents($file, $config);
漏洞复现步骤
- 登录后台
- 进入配置管理->站点名称编辑
- 在默认值字段输入XSS payload,如:
<script>alert(1)</script> - 保存配置
- 再次访问该页面触发XSS
修复建议
- 对所有用户输入进行HTML实体编码
- 实现严格的输入验证
- 对写入配置文件的内容进行过滤
- 实施CSP(内容安全策略)
3. 综合防护措施
-
输入验证
- 对所有用户输入实施白名单验证
- 对特殊字符进行转义处理
-
输出编码
- 对所有动态输出内容进行HTML编码
- 使用上下文相关的输出编码
-
文件上传安全
- 限制上传文件类型
- 验证文件内容而不仅是扩展名
- 将上传文件存储在非web可访问目录
-
安全配置
- 生产环境禁用调试模式
- 最小化PHP危险函数的使用
- 定期更新框架和组件
-
权限控制
- 实施最小权限原则
- 对敏感操作进行二次验证
- 记录所有管理操作
4. 总结
YZNCMS v2.0.1存在两个高危漏洞:
- 通过插件安装功能实现文件上传导致的命令执行
- 配置管理功能中的存储型XSS漏洞
这两个漏洞都需要后台权限才能利用,但一旦攻击者获取后台权限,将能完全控制系统。建议用户及时更新到修复版本,并实施上述安全措施。