某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";}');
    // ...省略后续代码...
}

漏洞点

  1. 虽然代码对eval等危险函数进行了过滤,但可以通过include函数绕过:

    var_dump(function_exists("include")); // 返回false
    

    因为function_existsinclude检查返回false,导致可以绕过过滤

  2. 攻击者可构造恶意条件语句,通过include包含恶意图片马实现代码执行

利用步骤

  1. 上传包含PHP代码的图片马
  2. 构造payload利用include函数包含该图片
  3. 通过模板解析功能触发代码执行

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;
}

漏洞点

  1. stripcslashes函数会将十六进制编码的字符串还原
  2. 攻击者可构造十六进制编码的XSS payload绕过过滤

利用步骤

  1. 构造十六进制编码的XSS payload,例如:
    \x3cscript\x3ealert(\x221111111\x22)\x3b\x3c/script\x3e
    
  2. 在留言板等用户输入点提交该payload
  3. 后台管理员查看留言时触发XSS

漏洞利用链

  1. 利用存储型XSS获取管理员cookie或直接控制管理员浏览器
  2. 登录后台后,利用模板解析功能的代码执行漏洞上传webshell
  3. 通过webshell获取服务器控制权

修复建议

  1. parserIfLabel函数中的条件语句进行更严格的过滤
  2. 避免在模板解析中使用eval等危险函数
  3. 对用户输入进行更严格的过滤和转义
  4. 更新到官方最新版本

总结

该漏洞组合展示了从存储型XSS到后台代码执行的完整攻击链,危害性极高。开发者应重视用户输入的过滤和危险函数的使用,避免类似漏洞的出现。

PbootCMS 前台XSS+后台GetShell漏洞分析 漏洞概述 本文详细分析PbootCMS系统中存在的一个高危漏洞组合:前台存储型XSS漏洞和后台代码执行漏洞。攻击者可利用XSS漏洞获取管理员权限,进而通过后台模板解析功能实现代码执行,最终获取服务器控制权。 漏洞分析 1. 后台代码执行漏洞 漏洞文件: apps/home/controller/ParserController.php 中的 parserIfLabel 函数 漏洞代码分析 漏洞点 虽然代码对 eval 等危险函数进行了过滤,但可以通过 include 函数绕过: 因为 function_exists 对 include 检查返回false,导致可以绕过过滤 攻击者可构造恶意条件语句,通过 include 包含恶意图片马实现代码执行 利用步骤 上传包含PHP代码的图片马 构造payload利用 include 函数包含该图片 通过模板解析功能触发代码执行 2. 前台存储型XSS漏洞 漏洞文件: core/function/handle.php 中的 decode_slashes 函数 漏洞代码分析 漏洞点 stripcslashes 函数会将十六进制编码的字符串还原 攻击者可构造十六进制编码的XSS payload绕过过滤 利用步骤 构造十六进制编码的XSS payload,例如: 在留言板等用户输入点提交该payload 后台管理员查看留言时触发XSS 漏洞利用链 利用存储型XSS获取管理员cookie或直接控制管理员浏览器 登录后台后,利用模板解析功能的代码执行漏洞上传webshell 通过webshell获取服务器控制权 修复建议 对 parserIfLabel 函数中的条件语句进行更严格的过滤 避免在模板解析中使用 eval 等危险函数 对用户输入进行更严格的过滤和转义 更新到官方最新版本 总结 该漏洞组合展示了从存储型XSS到后台代码执行的完整攻击链,危害性极高。开发者应重视用户输入的过滤和危险函数的使用,避免类似漏洞的出现。