PbootCMS-3.2.4代码审计
字数 1536 2025-08-23 18:31:24
PbootCMS 3.2.4 代码审计报告
1. 存储型XSS漏洞分析
漏洞位置
后台站点信息修改功能,位于SiteController控制器的mod方法中。
漏洞原理
-
数据处理流程:
- 通过
$_POST接收用户输入数据 - 数据经过
filter方法处理,使用array_key_exists检查键值并执行不同case方法 - 最终通过
escape_string方法进行转义处理(使用addslashes和htmlspecialchars)
- 通过
-
漏洞成因:
- 数据存入数据库时确实进行了实体编码转换
- 但在首页输出时,
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')
);
// ... 后续处理
}
利用方式
- 通过后台站点信息修改功能提交恶意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等危险扩展
- 白名单验证:在
-
文件处理流程:
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; // ... 后续处理 } -
潜在攻击面:
- 支持压缩文件上传,可能利用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反序列化仍可能成为攻击向量
建议开发者持续关注安全更新,管理员应定期审计系统配置和权限设置。