PbootCMS-3.2.4代码审计
字数 1536 2025-08-23 18:31:24

PbootCMS 3.2.4 代码审计报告

1. 存储型XSS漏洞分析

漏洞位置

后台站点信息修改功能,位于SiteController控制器的mod方法中。

漏洞原理

  1. 数据处理流程

    • 通过$_POST接收用户输入数据
    • 数据经过filter方法处理,使用array_key_exists检查键值并执行不同case方法
    • 最终通过escape_string方法进行转义处理(使用addslasheshtmlspecialchars
  2. 漏洞成因

    • 数据存入数据库时确实进行了实体编码转换
    • 但在首页输出时,copyright字段会先进行decode再进入adjustLabelData处理
    • 导致之前SQL更新时的转义失效,造成XSS漏洞

关键代码

public function mod() {
    if (!$_POST) {
        return;
    }
    $data = array(
        'title' => post('title'),
        'subtitle' => post('subtitle'),
        'domain' => post('domain'),
        'logo' => post('logo'),
        'keywords' => post('keywords'),
        'description' => post('description'),
        'icp' => post('icp'),
        'theme' => basename(post('theme')) ?: 'default',
        'statistical' => post('statistical'),
        'copyright' => post('copyright')
    );
    // ... 后续处理
}

利用方式

  1. 通过后台站点信息修改功能提交恶意JavaScript代码到copyright字段
  2. 访问首页时,恶意代码会被解码并执行

2. RCE漏洞分析

漏洞位置

动态缓存功能,位于Runtime/cacheRuntime/config目录的文件写入操作。

漏洞原理

  1. 缓存机制

    • 开启动态缓存后,系统会对HTML页面和配置文件进行缓存
    • 使用modDbconfigmodConfig方法处理不同缓存类型
    • modConfig通过file_get_contents读取原文件,preg_replace替换后重新写入
  2. 漏洞成因

    • 在站点关键字处插入绕过PHP限制的代码
    • 访问页面进行缓存解析时,会执行copyright中的PHP代码
    • 视图解析时会检查/Runtime/complile目录,不存在则重新编译写入

利用方式

  1. 在允许的输入字段中插入PHP代码
  2. 触发缓存机制使代码被写入可执行文件
  3. 访问相关页面执行代码

3. 文件上传安全机制分析

防护措施

  1. 双重验证机制

    • 白名单验证:在config.php中定义允许的格式format
    • 黑名单验证:明确禁止phpjspasp等危险扩展
  2. 文件处理流程

    function handle_upload($file, $temp, $array_ext_allow, $max_width, $max_height, $watermark) {
        $file = explode('.', $file);
        $file_ext = strtolower(end($file));
    
        // 白名单验证
        if (!in_array($file_ext, $array_ext_allow)) {
            return $file_ext . '格式的文件不允许上传!';
        }
    
        // 黑名单验证
        $black = array('php', 'jsp', 'asp', 'vb', 'exe', 'sh', 'cmd', 'bat', 'vbs', 'phtml', 'class', 'php2', 'php3', 'php4', 'php5');
        if (in_array($file_ext, $black)) {
            return $file_ext . '格式的文件不允许上传!';
        }
    
        // 文件重命名
        $file_path = $save_path . $file_type . '/' . date('Ymd') . '/' . time() . mt_rand(100000, 999999) . '.' . $file_ext;
        // ... 后续处理
    }
    
  3. 潜在攻击面

    • 支持压缩文件上传,可能利用phar反序列化
    • 需要配合文件包含或其他漏洞才能实现RCE

4. 模板标签安全分析

危险标签列表

  1. {pboot:sql}:执行SQL查询
  2. {pboot:php}:执行任意PHP代码
  3. {pboot:include}:包含其他模板/文件
  4. {pboot:eval}:执行PHP代码
  5. {pboot:exec}:执行系统命令
  6. {pboot:loop}:循环标签(可能导致DoS)
  7. {pboot:var}:变量赋值(可能导致变量覆盖)

防护措施

  1. 对所有POST参数进行处理,过滤危险标签
  2. pboot:ifpboot:sql标签进行转换处理
  3. 数据库操作时进行二次过滤
  4. 使用正则替换而非直接eval执行代码

5. 安全建议

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 对输出内容进行适当的编码处理
  2. 权限控制

    • 加强后台访问权限控制
    • 实现最小权限原则
  3. 安全配置

    • 关闭不必要的功能(如动态缓存)
    • 定期更新系统和插件
  4. 代码审计

    • 定期进行代码安全审计
    • 关注官方安全公告和更新
  5. 防御措施

    • 部署WAF防护常见攻击
    • 实施严格的文件上传策略
    • 禁用危险PHP函数

6. 总结

PbootCMS 3.2.4经过多次迭代,已修复多数常见漏洞,但在以下方面仍需注意:

  1. 存储型XSS通过特定字段解码实现
  2. 动态缓存机制可能导致代码执行
  3. 模板标签系统存在潜在风险
  4. 文件上传虽有多重防护,但phar反序列化仍可能成为攻击向量

建议开发者持续关注安全更新,管理员应定期审计系统配置和权限设置。

PbootCMS 3.2.4 代码审计报告 1. 存储型XSS漏洞分析 漏洞位置 后台站点信息修改功能,位于 SiteController 控制器的 mod 方法中。 漏洞原理 数据处理流程 : 通过 $_POST 接收用户输入数据 数据经过 filter 方法处理,使用 array_key_exists 检查键值并执行不同case方法 最终通过 escape_string 方法进行转义处理(使用 addslashes 和 htmlspecialchars ) 漏洞成因 : 数据存入数据库时确实进行了实体编码转换 但在首页输出时, copyright 字段会先进行 decode 再进入 adjustLabelData 处理 导致之前SQL更新时的转义失效,造成XSS漏洞 关键代码 利用方式 通过后台站点信息修改功能提交恶意JavaScript代码到 copyright 字段 访问首页时,恶意代码会被解码并执行 2. RCE漏洞分析 漏洞位置 动态缓存功能,位于 Runtime/cache 和 Runtime/config 目录的文件写入操作。 漏洞原理 缓存机制 : 开启动态缓存后,系统会对HTML页面和配置文件进行缓存 使用 modDbconfig 和 modConfig 方法处理不同缓存类型 modConfig 通过 file_get_contents 读取原文件, preg_replace 替换后重新写入 漏洞成因 : 在站点关键字处插入绕过PHP限制的代码 访问页面进行缓存解析时,会执行 copyright 中的PHP代码 视图解析时会检查 /Runtime/complile 目录,不存在则重新编译写入 利用方式 在允许的输入字段中插入PHP代码 触发缓存机制使代码被写入可执行文件 访问相关页面执行代码 3. 文件上传安全机制分析 防护措施 双重验证机制 : 白名单验证:在 config.php 中定义允许的格式 format 黑名单验证:明确禁止 php 、 jsp 、 asp 等危险扩展 文件处理流程 : 潜在攻击面 : 支持压缩文件上传,可能利用phar反序列化 需要配合文件包含或其他漏洞才能实现RCE 4. 模板标签安全分析 危险标签列表 {pboot:sql} :执行SQL查询 {pboot:php} :执行任意PHP代码 {pboot:include} :包含其他模板/文件 {pboot:eval} :执行PHP代码 {pboot:exec} :执行系统命令 {pboot:loop} :循环标签(可能导致DoS) {pboot:var} :变量赋值(可能导致变量覆盖) 防护措施 对所有POST参数进行处理,过滤危险标签 对 pboot:if 和 pboot:sql 标签进行转换处理 数据库操作时进行二次过滤 使用正则替换而非直接eval执行代码 5. 安全建议 输入验证 : 对所有用户输入进行严格过滤 对输出内容进行适当的编码处理 权限控制 : 加强后台访问权限控制 实现最小权限原则 安全配置 : 关闭不必要的功能(如动态缓存) 定期更新系统和插件 代码审计 : 定期进行代码安全审计 关注官方安全公告和更新 防御措施 : 部署WAF防护常见攻击 实施严格的文件上传策略 禁用危险PHP函数 6. 总结 PbootCMS 3.2.4经过多次迭代,已修复多数常见漏洞,但在以下方面仍需注意: 存储型XSS通过特定字段解码实现 动态缓存机制可能导致代码执行 模板标签系统存在潜在风险 文件上传虽有多重防护,但phar反序列化仍可能成为攻击向量 建议开发者持续关注安全更新,管理员应定期审计系统配置和权限设置。