Pluck CMS 4.7.10远程代码执行漏洞分析
字数 1067 2025-08-26 22:11:15
Pluck CMS 4.7.10远程代码执行漏洞分析
漏洞概述
Pluck CMS是一款基于PHP编写的小型内容管理系统。在4.7.10版本(2019年8月更新)中存在一个远程代码执行漏洞,该漏洞源于对用户输入的不当处理,导致攻击者可以在服务器上执行任意PHP代码。
受影响版本
- Pluck CMS 4.7.10
- 该问题最早在4.7.1版本就已存在
漏洞分析
漏洞位置
漏洞存在于后台文章编辑功能中,具体路径为:
admin.php→data/inc/editpage.php→functions.admin.php中的save_page函数
漏洞原理
- 输入处理不当:系统将用户可控的POST参数(
title,content,hidden)直接与PHP代码拼接 - 过滤不充分:虽然对
title和content参数进行了过滤(sanitize函数过滤单引号),但hidden参数未进行任何过滤 - 文件写入:通过
save_file函数将拼接的内容直接写入PHP文件 - 自动包含:写入的文件会被系统自动包含执行
利用过程
4.7.1版本利用
- 通过
hidden参数注入PHP代码:hidden=1';phpinfo();/* - 系统拼接后写入文件的内容:
<?php $data['hidden'] = '1';phpinfo();/*'; ?> - 访问
index.php时自动加载并执行注入的代码
4.7.10版本利用
- 虽然对
title和content参数加强了过滤,但hidden参数仍未被过滤 - 使用相同方法通过
hidden参数注入代码:hidden=1';phpinfo();/* - 写入文件后同样会被执行
代码分析关键点
- admin.php:后台入口,包含
editpage.php - editpage.php:接收POST参数并调用
save_page函数 - save_page函数(functions.admin.php):
function save_page($page, $title, $content, $hidden = '0') { // 直接拼接用户输入到PHP代码中 $data = "<?php \$data['title'] = '".sanitize($title)."'; \$data['content'] = '".sanitize($content)."'; \$data['hidden'] = '".$hidden."'; ?>"; save_file('data/settings/pages/'.$page, $data); } - save_file函数(functions.all.php):直接将内容写入文件
漏洞修复建议
- 对所有用户输入参数进行严格过滤
- 对
hidden参数应用与title和content相同的过滤机制 - 避免将用户输入直接拼接到PHP代码中
- 使用参数化方式处理数据存储
漏洞验证
- 登录Pluck CMS后台
- 编辑任意页面
- 通过Burp Suite拦截请求,修改
hidden参数为恶意代码 - 提交后访问首页查看代码是否执行
总结
该漏洞展示了即使经过多次版本更新,如果核心安全问题未得到彻底解决,仍然会存在风险。开发人员需要对所有用户输入参数一视同仁地进行安全处理,不能遗漏任何可能的攻击面。