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.phpdata/inc/editpage.phpfunctions.admin.php中的save_page函数

漏洞原理

  1. 输入处理不当:系统将用户可控的POST参数(title, content, hidden)直接与PHP代码拼接
  2. 过滤不充分:虽然对titlecontent参数进行了过滤(sanitize函数过滤单引号),但hidden参数未进行任何过滤
  3. 文件写入:通过save_file函数将拼接的内容直接写入PHP文件
  4. 自动包含:写入的文件会被系统自动包含执行

利用过程

4.7.1版本利用

  1. 通过hidden参数注入PHP代码:
    hidden=1';phpinfo();/*
    
  2. 系统拼接后写入文件的内容:
    <?php $data['hidden'] = '1';phpinfo();/*'; ?>
    
  3. 访问index.php时自动加载并执行注入的代码

4.7.10版本利用

  1. 虽然对titlecontent参数加强了过滤,但hidden参数仍未被过滤
  2. 使用相同方法通过hidden参数注入代码:
    hidden=1';phpinfo();/*
    
  3. 写入文件后同样会被执行

代码分析关键点

  1. admin.php:后台入口,包含editpage.php
  2. editpage.php:接收POST参数并调用save_page函数
  3. 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);
    }
    
  4. save_file函数(functions.all.php):直接将内容写入文件

漏洞修复建议

  1. 对所有用户输入参数进行严格过滤
  2. hidden参数应用与titlecontent相同的过滤机制
  3. 避免将用户输入直接拼接到PHP代码中
  4. 使用参数化方式处理数据存储

漏洞验证

  1. 登录Pluck CMS后台
  2. 编辑任意页面
  3. 通过Burp Suite拦截请求,修改hidden参数为恶意代码
  4. 提交后访问首页查看代码是否执行

总结

该漏洞展示了即使经过多次版本更新,如果核心安全问题未得到彻底解决,仍然会存在风险。开发人员需要对所有用户输入参数一视同仁地进行安全处理,不能遗漏任何可能的攻击面。

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代码: 系统拼接后写入文件的内容: 访问 index.php 时自动加载并执行注入的代码 4.7.10版本利用 虽然对 title 和 content 参数加强了过滤,但 hidden 参数仍未被过滤 使用相同方法通过 hidden 参数注入代码: 写入文件后同样会被执行 代码分析关键点 admin.php :后台入口,包含 editpage.php editpage.php :接收POST参数并调用 save_page 函数 save_ page函数(functions.admin.php) : save_ file函数(functions.all.php) :直接将内容写入文件 漏洞修复建议 对所有用户输入参数进行严格过滤 对 hidden 参数应用与 title 和 content 相同的过滤机制 避免将用户输入直接拼接到PHP代码中 使用参数化方式处理数据存储 漏洞验证 登录Pluck CMS后台 编辑任意页面 通过Burp Suite拦截请求,修改 hidden 参数为恶意代码 提交后访问首页查看代码是否执行 总结 该漏洞展示了即使经过多次版本更新,如果核心安全问题未得到彻底解决,仍然会存在风险。开发人员需要对所有用户输入参数一视同仁地进行安全处理,不能遗漏任何可能的攻击面。