CSZ CMS 1.2.7 xss分析与复现
字数 1432 2025-08-25 22:58:40
CSZ CMS 1.2.7 XSS漏洞分析与复现教学文档
1. 漏洞概述
CSZ CMS 1.2.7版本存在一个存储型XSS漏洞,允许未授权用户通过篡改User-Agent头向管理员面板注入恶意JavaScript代码。当管理员查看后台时,注入的代码将被执行。
2. 影响版本
- CSZ CMS 1.2.7
3. 环境搭建
- 下载CSZ CMS 1.2.7安装包:
https://sourceforge.net/projects/cszcms/files/install/CSZCMS-V1.2.7.zip/download - 按照官方文档完成安装
- 确保系统配置为:
- PHP环境
- MySQL或MariaDB数据库
4. 漏洞复现步骤
4.1 准备工作
- 注册一个普通用户账号
- 登录该用户账号
4.2 漏洞利用
- 访问"inbox"页面发送私信
- 选择管理员用户作为接收者
- 使用浏览器开发者工具或Burp Suite等代理工具修改HTTP请求
- 将User-Agent头修改为恶意payload:
User-Agent: <script>alert(1)</script> - 发送私信
4.3 触发漏洞
- 管理员登录后台
- 无需其他操作,XSS payload将自动执行
5. 漏洞分析
5.1 数据流分析
- 用户发送私信时,系统记录User-Agent头
- 数据存储流程:
- 请求进入
Member.php控制器的insertpm方法 - 调用
Csz_auth_model的send_pm方法 - 最终调用
Csz_model的sendEmail方法
- 请求进入
5.2 关键漏洞点
-
sendEmail方法中的数据库操作:$this->db->set('user_agent', $this->input->user_agent(), TRUE); $this->db->insert('email_logs', $data); -
user_agent()方法未进行XSS过滤:public function user_agent($xss_clean = NULL) { return $this->_fetch_from_array($_SERVER, 'HTTP_USER_AGENT', $xss_clean); }$xss_clean参数默认为NULL,未启用过滤
-
后台直接输出未过滤的User-Agent:
- 位于
cszcms/views/admin/home.php - 直接echo数据库中的User-Agent值
- 位于
5.3 安全机制缺失
- 输入未过滤:
- User-Agent头直接存入数据库
- 输出未编码:
- 后台直接输出数据库内容,未进行HTML编码
6. 漏洞修复方案
6.1 官方修复
在1.2.8版本中,开发者移除了直接输出User-Agent的代码(cszcms/views/admin/home.php)
6.2 推荐修复方案
-
输入过滤:
$this->db->set('user_agent', $this->input->user_agent(TRUE), TRUE);- 启用
xss_clean参数
- 启用
-
输出编码:
echo htmlspecialchars($user_agent, ENT_QUOTES, 'UTF-8'); -
深度防御:
- 对所有用户可控输入进行验证和过滤
- 对所有输出到HTML的内容进行编码
7. 技术要点总结
-
CodeIgniter框架的输入处理机制:
$this->input->user_agent()默认不进行XSS过滤- 需要显式设置
$xss_clean参数为TRUE
-
数据库操作:
$this->db->set()方法用于准备SQL语句$this->db->insert()执行最终插入操作
-
邮件日志功能:
- 系统记录所有发送邮件的日志
- 包括User-Agent和IP地址等敏感信息
8. 扩展思考
-
其他可能存在类似问题的点:
- 所有使用
$this->input->user_agent()的地方 - 其他HTTP头信息的处理(如Referer)
- 用户可控的其他输入字段
- 所有使用
-
自动化检测方法:
- 扫描所有直接输出数据库内容的视图文件
- 检查所有使用
$this->input->*方法而未过滤的代码
-
安全开发建议:
- 遵循"输入验证、输出编码"原则
- 使用框架提供的安全函数
- 实施内容安全策略(CSP)作为额外防护
9. 参考资源
- CodeIgniter输入类文档
- OWASP XSS防护指南
- CSZ CMS官方文档:https://docs.cszcms.com/