Fine CMS 存储型xss漏洞
本地测试
安装(版本v5.3.0)
tip:这个cms需要安装在网站根目录,不能安装在子目录
然后访问install.php开始安装。
完成安装,访问后台。默认账户密码:admin/admin。
网站后台:提供错误日志查看功能。
在错误日志页面,我们可以看到错误日志的存放位置:WWW/cache/errorlog/log-2021-03-26.php
我们可以查看一下这个文件,然后输入一些内容测试一下。
在该文件的最后一行加入了测试内容
可以发现,后台的错误日志多了一行。
我们判定,错误日志的内容读取的就是errorlog文件夹下的文件,且没有过滤。
那么,根据推理,如果我们可以控制错误日志的文件内容,在错误日志里写入xss,那么当管理员登录后台查看错误日志时就会触发xss。
那么哪里可以将内容写入错误日志呢?
经过代码审计发现:
finecms\system\core\Codelgniter.php下的show_404方法是罪祸首,它调用了log_message()方法,log_message()调用write_log()方法,write_log()方法创建日志文件并写入错误信息。
上述过程中没有对错误信息过滤。
我们只需要通过show_404方法产生错误信息就可将错误信息写入日志文件。
访问不存在的方法或对象,出现404错误。就会触发show_404方法。
c和m是固定的参数名。
hello跟world是不存在的对象.
那么就可以在这里输入我们的payload。
c=hello&m=world<script>alert(1)</script>
管理员后台查看错误日志时:
存储型xss被触发。
然后利用xss盲打平台即可获取管理员cookie。