CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
前言
CSZ 是外国的一个开源的CMS,使用PHP作为后端语言,MYSQL或MariaDB(MySQL的一个分支数据库,两者的历史感兴趣的可以去看一下。知乎:Mariadb和mysql是什么关系?)。普通用户可以通过此漏洞,在发送私信功能中向管理员的管理页面植入前端脚本。
0x01 环境准备
- csz: 1.2.7版本
(下载地址:https://sourceforge.net/projects/cszcms/files/install/CSZCMS-V1.2.7.zip/download) - php:5.5.0以上版本
0x02 环境搭建
- 打开cms目录,配置提示环境。(我这里提示PHP版本不够高)
- 按要求配置好环境后,下一步要求填写一些重要的数据,数据库名和用户名密码,管理员账户密码等。(需提前在数据库建好需要的库)
3.初始化完成。
0x03 漏洞复现
- 打开主页,点击右上方的一个人头图标,先注册一个用户。
- 注册完成后登录用户,进入用户主页,在Private Message(私信)选项中点击inbox。
- 点击"New Message",发信息给管理员,抓包。
- 在抓到的包中,修改"User-Agent"的内容,插入一个js代码。
- 打开后台管理员页面"(cms目录名)/admin",登录后触发js的弹窗。
- 查看管理员主页,发现触发点,在收件信息中引用了"User-Agent"的值,且没有被过滤,另一条信息中,js代码直接写在了信息内容上,但是
<script>
标签被过滤了,没有触发。
0x04 源码审计
关键是在system/core/Input.php文件中,在将数据导入数据库时,没有对"User-Agent"的内容进行XSS过滤:$xss_clean = NULL
而且在管理首页中也直接调用了数据库中"User-Agent"的值并显示。
文件位于:cszcms/views/admin/home.php
此漏洞更详细的源码分析建议参考:https://www.cnblogs.com/0daybug/p/12914695.html
0x05 修复建议
- 在home.php中去掉对"User-Agent"值的显示。
- 更新cms版本1.2.8以上版本已修复了此问题。
0x06 总结
通过此次复现,理解到任何上传的值都有可能成为XSS的攻击点,最好对有可能回显的数值都进行过滤。