CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议

CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议


前言

CSZ 是外国的一个开源的CMS,使用PHP作为后端语言,MYSQL或MariaDB(MySQL的一个分支数据库,两者的历史感兴趣的可以去看一下。知乎:Mariadb和mysql是什么关系?)。普通用户可以通过此漏洞,在发送私信功能中向管理员的管理页面植入前端脚本。


0x01 环境准备

0x02 环境搭建

  1. 打开cms目录,配置提示环境。(我这里提示PHP版本不够高)
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
  2. 按要求配置好环境后,下一步要求填写一些重要的数据,数据库名和用户名密码,管理员账户密码等。(需提前在数据库建好需要的库)
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
    3.初始化完成。
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议

0x03 漏洞复现

  1. 打开主页,点击右上方的一个人头图标,先注册一个用户。
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
    1. 注册完成后登录用户,进入用户主页,在Private Message(私信)选项中点击inbox。

CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议

  1. 点击"New Message",发信息给管理员,抓包。
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
  2. 在抓到的包中,修改"User-Agent"的内容,插入一个js代码。
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
  3. 打开后台管理员页面"(cms目录名)/admin",登录后触发js的弹窗。
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
  4. 查看管理员主页,发现触发点,在收件信息中引用了"User-Agent"的值,且没有被过滤,另一条信息中,js代码直接写在了信息内容上,但是<script>标签被过滤了,没有触发。
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
    CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议

0x04 源码审计

关键是在system/core/Input.php文件中,在将数据导入数据库时,没有对"User-Agent"的内容进行XSS过滤:$xss_clean = NULL
CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
而且在管理首页中也直接调用了数据库中"User-Agent"的值并显示。
文件位于:cszcms/views/admin/home.php
CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
此漏洞更详细的源码分析建议参考https://www.cnblogs.com/0daybug/p/12914695.html

0x05 修复建议

  • 在home.php中去掉对"User-Agent"值的显示。
  • 更新cms版本1.2.8以上版本已修复了此问题。

0x06 总结

通过此次复现,理解到任何上传的值都有可能成为XSS的攻击点,最好对有可能回显的数值都进行过滤。