您当前位置:首页>项目技能>技能技巧

PbootCMS 模板缓存安全漏洞修复报告

发布时间:2026-06-24 阅读量:36 超级管理员

================================================================================ PbootCMS 模板缓存安全漏洞修复报告================================================···...

扫码分享二维码

二维码

详细介绍

================================================================================

                    PbootCMS 模板缓存安全漏洞修复报告

================================================================================

修复时间:2026-06-23

修复文件:core/view/Parser.php

================================================================================

一、问题分析

================================================================================

本次安全审计发现 PbootCMS 框架的模板解析引擎存在三个高危安全漏洞,攻击者可利用

这些漏洞通过模板注入的方式在服务器上执行任意PHP代码,最终获取服务器控制权。

【漏洞1】模板函数注入漏洞 (parFun)

----------------------------------------------------------------------

位置:core/view/Parser.php 第512-519行

危险等级:高危

原代码逻辑:

    private static function parFun()

    {

        $pattern = '/\[fun=([^\]]+)\]/';

        if (preg_match($pattern, self::$content)) {

            self::$content = preg_replace($pattern, "$1", self::$content);

        }

    }

问题分析:

该函数解析模板中的 [fun=xxx] 标签,将标签内容直接替换为可执行的PHP代码。

例如:[fun=system('whoami')] 会被解析为 system('whoami') 并执行。

这允许攻击者调用任意PHP函数,包括执行系统命令的危险函数。

【漏洞2】模板PHP代码执行漏洞 (parPhp)

----------------------------------------------------------------------

位置:core/view/Parser.php 第414-423行

危险等级:高危

原代码逻辑:

    private static function parPhp()

    {

        $pattern = '/\{php\}([\s\S]*?)\{\/php\}/';

        if (preg_match($pattern, self::$content)) {

            self::$content = preg_replace($pattern, "<?php  $1?>", self::$content);

        }

    }

问题分析:

该函数解析模板中的 {php}...{/php} 标签,将标签内容直接转换为PHP代码。

例如:{php}echo 'hello';{/php} 会被解析为 <?php echo 'hello';?>

攻击者可以注入任意PHP代码,包括文件写入、命令执行等恶意操作。

【漏洞3】模板包含路径遍历漏洞 (parInclude)

----------------------------------------------------------------------

位置:core/view/Parser.php 第90-149行

危险等级:高危

原代码逻辑:

    if (strpos($brr[$i], '/') === 0) {

        $inc_file = ROOT_PATH . $brr[$i];

    }

问题分析:

1. 绝对路径包含没有范围限制,攻击者可能通过构造特殊路径包含敏感文件

2. 原有的路径遍历过滤只检查了 "../" 和 "..\\",可能被URL编码绕过

3. realpath验证缺失,无法确保最终路径在允许范围内

二、漏洞利用原理

================================================================================

【攻击链分析】

步骤1:模板注入入口

----------------------------------------------------------------------

攻击者需要找到向模板中注入恶意代码的途径:

- 通过SQL注入向数据库中存储模板内容

- 通过后台模板编辑功能(如果有权限)

- 通过文件上传漏洞覆盖模板文件

- 通过其他漏洞向缓存目录写入文件

步骤2:模板解析触发

----------------------------------------------------------------------

当用户访问网站页面时:

1. 系统加载模板文件

2. Parser类解析模板标签

3. 将解析后的内容写入编译缓存文件(.php格式)

4. 通过 include 执行编译后的PHP文件

步骤3:恶意代码执行

----------------------------------------------------------------------

以 {php} 标签为例:

攻击者注入:{php}file_put_contents('runtime/shell.php','<?php eval($_POST@[x]);?>');{/php}

解析后生成编译文件包含:

<?php file_put_contents('runtime/shell.php','<?php eval($_POST@[x]);?>');?>

执行后生成 webshell:

runtime/shell.php

步骤4:获取服务器控制权

----------------------------------------------------------------------

攻击者访问生成的 webshell:

http://target.com/runtime/shell.php

使用密码 x 执行任意PHP代码,完全控制服务器。

【攻击场景示例】

场景1:通过 [fun] 标签执行系统命令

----------------------------------------------------------------------

注入代码:[fun=shell_exec('id')]

解析结果:shell_exec('id')

执行效果:返回服务器用户信息

场景2:通过 {php} 标签写入木马

----------------------------------------------------------------------

注入代码:{php}file_put_contents('../shell.php','<?php @eval($_POST@[cmd]);?>');{/php}

执行效果:在网站根目录生成一句话木马

场景3:通过路径遍历读取敏感文件

----------------------------------------------------------------------

注入代码:{include file='/../../../etc/passwd'}

执行效果:读取系统敏感文件(Linux系统)

三、解决方案

================================================================================

【修复1】禁用模板函数注入功能

----------------------------------------------------------------------

修复文件:core/view/Parser.php

修复方法:禁用 parFun() 函数

修复后代码:

    // 内部应用函数 如:[fun=md5('aaa')]  -- 已禁用此功能,存在安全风险

    private static function parFun()

    {

        // 安全风险:允许执行任意函数,已禁用

        // 如需启用,必须添加严格的函数白名单过滤

        return;

    }

修复说明:

完全禁用该功能,防止任意函数执行。如果业务需要使用,必须实现严格的

函数白名单机制,只允许安全的函数(如 md5、date 等)执行。

【修复2】禁用模板PHP代码执行功能

----------------------------------------------------------------------

修复文件:core/view/Parser.php

修复方法:禁用 parPhp() 函数并移除恶意标签

修复后代码:

    // 原生PHP代码{php}...{/php}  -- 已禁用此功能,存在安全风险

    private static function parPhp()

    {

        // 安全风险:允许执行任意PHP代码,已禁用

        // 如果模板中有{php}标签,直接移除,不解析执行

        $pattern = '/\{php\}([\s\S]*?)\{\/php\}/';

        if (preg_match($pattern, self::$content)) {

            self::$content = preg_replace($pattern, '', self::$content);

        }

    }

修复说明:

禁用原生PHP代码执行功能,如果模板中存在 {php} 标签,直接移除而不执行。

这从根本上杜绝了通过模板注入执行PHP代码的可能。

【修复3】加强模板包含路径安全验证

----------------------------------------------------------------------

修复文件:core/view/Parser.php

修复方法:添加路径遍历检查和范围限制

修复后代码:

    for ($i = 0; $i < $count; $i ++) {

        // 安全验证:检查文件名是否包含路径遍历字符

        if (strpos($brr[$i], '..') !== false) {

            error('包含文件路径存在安全风险!' . $brr[$i]);

        }

        

        // 绝对路径安全检查

        if (strpos($brr[$i], '/') === 0) {

            // 绝对路径只允许在 ROOT_PATH 内

            $inc_file = ROOT_PATH . $brr[$i];

            $real_path = realpath($inc_file);

            if ($real_path === false || strpos($real_path, ROOT_PATH) !== 0) {

                error('包含文件路径超出允许范围!');

            }

        } elseif (! ! $pos = strpos($brr[$i], '@')) {

            // 跨模块路径检查

            $inc_file = APP_PATH . '/' . substr($brr[$i], 0, $pos) . '/view/' . basename(self::$tplPath) . '/' . substr($brr[$i], $pos + 1);

        } else {

            // ... 原有逻辑

        }

    }

修复说明:

1. 添加 '..' 路径遍历字符检查,防止目录穿越攻击

2. 对绝对路径使用 realpath() 解析真实路径

3. 验证真实路径必须在 ROOT_PATH 范围内

4. 发现非法路径立即报错终止

四、安全建议

================================================================================

【建议1】模板文件权限管理

----------------------------------------------------------------------

- 将模板目录设置为只读,防止通过其他漏洞修改模板文件

- 编译缓存目录与模板目录分离,设置适当的文件权限

- 定期检查模板文件完整性

【建议2】输入过滤与输出编码

----------------------------------------------------------------------

- 对所有用户输入进行严格过滤

- 模板变量输出时进行HTML编码,防止XSS攻击

- 数据库查询使用参数化查询,防止SQL注入

【建议3】安全监控

----------------------------------------------------------------------

- 部署Web应用防火墙(WAF)

- 开启PHP危险函数禁用(disable_functions)

- 定期审计服务器文件,检测异常文件

【建议4】最小权限原则

----------------------------------------------------------------------

- Web服务器运行账户使用低权限用户

- 敏感目录禁止写入权限

- 数据库账户使用最小必要权限

五、修复验证

================================================================================

修复完成后,请验证以下内容:

1. 模板中的 [fun=xxx] 标签不再被解析执行

2. 模板中的 {php}...{/php} 标签被移除而不执行

3. 包含路径遍历字符(如 ..)会报错终止

4. 绝对路径包含被限制在 ROOT_PATH 范围内

5. 网站正常页面功能不受影响

================================================================================

                              修复完成

================================================================================


上一篇 微信4.1系列版本电脑端录屏出现画面为空白的情况怎么处理
下一篇 电商运营图册设计量产管理系统V1.0 ,你还不知道如何使用?

内容版权声明

Copyright Notice

内容链接: https://www.diezanrpa.com/jinengjiqiao/1373.html
内容标题: PbootCMS 模板缓存安全漏洞修复报告

当前文章由【付涛】本人原创开发与文案内容写作,内容版权归当前平台所有,如需转载,请务必注明来源及链接,谢谢合作!

本文最后更新发布于【2026-06-24】,某些文章具有时效性,若有错误或已失效,请联系客服

争议处理:针对本站内容若有异义,亦可直接与【法律顾问:易兴俊,律师联系电话:13825799821】直接联系沟通

GEO