某cms前台xss+后台getshell
字数 870 2025-08-26 22:11:22
PbootCMS 前台XSS+后台GetShell漏洞分析
漏洞概述
本文详细分析PbootCMS系统中存在的一个高危漏洞组合:前台存储型XSS漏洞和后台代码执行漏洞。攻击者可利用XSS漏洞获取管理员权限,进而通过后台模板解析功能实现代码执行,最终获取服务器控制权。
漏洞分析
1. 后台代码执行漏洞
漏洞文件:apps/home/controller/ParserController.php中的parserIfLabel函数
漏洞代码分析
public function parserIfLabel($content) {
$pattern = '/\{pboot:if\s\S]*?)\{\/pboot:if\}/';
// ...省略部分代码...
// 解码条件字符串
$matches[1][$i] = decode_string($matches[1][$i]);
// 带有函数的条件语句进行安全校验
if (preg_match_all('/([\w]+)([\\\s]+)?\(/i', $matches[1][$i], $matches2)) {
foreach ($matches2[1] as $value) {
if ((function_exists($value) || preg_match('/^eval$/i', $value)) && ! in_array($value, $white_fun)) {
$danger = true;
break;
}
}
}
// 不允许从外部获取数据
if (preg_match('/(\$_GET\[)|(\$_POST\[)|(\$_REQUEST\[)|(\$_COOKIE\[)|(\$_SESSION\[)/i', $matches[1][$i])) {
$danger = true;
}
// 如果有危险函数,则不解析该IF
if ($danger) {
continue;
}
eval('if(' . $matches[1][$i] . '){$flag="if";}else{$flag="else";}');
// ...省略后续代码...
}
漏洞点
-
虽然代码对
eval等危险函数进行了过滤,但可以通过include函数绕过:var_dump(function_exists("include")); // 返回false因为
function_exists对include检查返回false,导致可以绕过过滤 -
攻击者可构造恶意条件语句,通过
include包含恶意图片马实现代码执行
利用步骤
- 上传包含PHP代码的图片马
- 构造payload利用
include函数包含该图片 - 通过模板解析功能触发代码执行
2. 前台存储型XSS漏洞
漏洞文件:core/function/handle.php中的decode_slashes函数
漏洞代码分析
function decode_slashes($string) {
if (! $string) return $string;
if (is_array($string)) {
// 数组处理
foreach ($string as $key => $value) {
$string[$key] = decode_slashes($value);
}
} elseif (is_object($string)) {
// 对象处理
foreach ($string as $key => $value) {
$string->$key = decode_slashes($value);
}
} else {
// 字符串处理
$string = stripcslashes($string);
}
return $string;
}
漏洞点
stripcslashes函数会将十六进制编码的字符串还原- 攻击者可构造十六进制编码的XSS payload绕过过滤
利用步骤
- 构造十六进制编码的XSS payload,例如:
\x3cscript\x3ealert(\x221111111\x22)\x3b\x3c/script\x3e - 在留言板等用户输入点提交该payload
- 后台管理员查看留言时触发XSS
漏洞利用链
- 利用存储型XSS获取管理员cookie或直接控制管理员浏览器
- 登录后台后,利用模板解析功能的代码执行漏洞上传webshell
- 通过webshell获取服务器控制权
修复建议
- 对
parserIfLabel函数中的条件语句进行更严格的过滤 - 避免在模板解析中使用
eval等危险函数 - 对用户输入进行更严格的过滤和转义
- 更新到官方最新版本
总结
该漏洞组合展示了从存储型XSS到后台代码执行的完整攻击链,危害性极高。开发者应重视用户输入的过滤和危险函数的使用,避免类似漏洞的出现。