zzcms 8.3 最新CVE漏洞分析

前言

上次我们分析了一下zzcms 8.2版本的一些漏洞,但是很快8.3版本就推出更新了,但是在更新不久,就有新的漏洞爆了出来,那就跟随大师傅们的脚步学习一下。有关8.2版本的分析在我之前发的文章.

zzcms 的全局过滤

首先系统也使用了伪全局变量的设置,我们找到了关键的代码:/inc/stopsqlin.php

可以看到所有的代码在默认传进来的时候,会被addslashes转义,所以如果有单引号包围是不存在sql注入的,但是这里也容易出现问题,如果是数字型没有严密验证,或者是表名等等位置,不需要单引号闭合的位置都是很危险的,上一篇的很多的问题就是这里疏忽产生的。

CVE-2018-13056

简单看一下漏洞说明,又是一个任意文件删除漏洞,我们在之前的文章总结中就说过了整个系统在文件处理上是很明显有问题的,那我们就来分析一下这次的问题: 漏洞点出现在 /user/del.php 的55行到64行

看到是从数据库中取出的img字段,然后直接判断了是不是默认值,然后检查文件存在,最后是删除,这其中并没有涉及到文件合法性检查。 那我们就可以去找一下这个字段是怎么进入数据库的:

首先找到表名,是zzcms_main表,然后找一下insert或者update操作,然后我们在/user/zssave.php中发现了有关操作。

然后查看是否经过了过滤,因为经过了伪全局过滤,这里的$img并没有经过任何过滤。

所以向数据库中插入污点数据是很简单的,只要在发布招商信息的时候,抓包,修改掉img的数据即可,这里我们测试/install/install.lock:

然后就可以到/user/del.php中去删除文件,这样就能触发删除操作。 但是这里有一个问题,就是删除的时候需要知道这一条记录在数据库中的id编号,可以采用爆破的方法来得到。

发包以后,我们刷新页面就可以发现,安装的锁文件已经被成功删除:

然后就可以配合之前的漏洞,任意文件写入拿到webshell。

CVE-2018-14961

一个前台的sql注入漏洞,发现又是使用了stripfxg这个函数解除了自己的过滤,但是其实这里即使没有引号,也是可以直接注入的,下面详细分析一下: 代码出现问题是在:/dl/dl_sendmail.php 的 42到45行 简单整理一下逻辑就是:

所以很简单,也没有什么逻辑,可以直接注入,测试脚本如下:

aaaa

测试结果为:

可以成功注入出管理员的密码hash

CVE-2018-14963

csrf漏洞,这个问题也是从上个版本就存在的问题,就是整个管理员后台的,所有表单都是没有设置csrf的token的,所以只要涉及到敏感操作的表单,都可以使用csrf来攻击,达成很多攻击利用。 这里的攻击是产生在了/admin/adminadd.php的添加管理员操作,构造的表单如下:

构造好了payload以后,放到vps上,然后诱导管理员点击恶意链接,即可成功添加管理员。 未添加管理员之前:

点击链接之后:

发现可以成功达到添加管理员的目的。

CVE-2018-14962

一个存储型xss,最底层的原因还是因为调用了stripfxg函数,消除了自己的过滤,然后在输出的时候,导致了xss漏洞。

先看一下输出位置,在/zt/show.php 的211 行:

然后追踪这个变量的值,找到了是在用户在修改自己公司简介处添加的数据 然后我们来测试一下:

保存,然后访问一下/zt/show.php?id=1,就可以看到效果:

成功触发漏洞

其实感觉这种漏洞还是普遍存在于这个系统中的,可以顺着这个危险的函数stripfxg入手,逐个分析,估计还是有不少漏网之鱼。

后记

虽然zzcms更新了版本,但是看到很多安全问题并没有从底层去解决,有的只是暂时性的修补了一下,这样其实是不太可取的,底层的问题存在,只要在找到另外一条可以利用的通路就一样可以利用。

原文发布于微信公众号 - 安恒网络空间安全讲武堂(cyberslab)

原文发表时间:2018-08-23

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

理解 Linux/Unix 登录脚本

不知道你有没有遇到过这样的场景,当你需要设置一个环境变量,或者运行一个程序设置你的shell或桌面环境,但是不知道在哪里是最方便设置的位置。

1231
来自专栏编程微刊

自动调试自动编译五分钟上手

1797
来自专栏猿人谷

HTML中的相对路径与绝对路径

HTML初学者会经常遇到这样一个问题,如何正确引用一个文件。比如,怎样在一个HTML网页中引用另外一个HTML网页作为超链接(hyperlink)?怎样在一个网...

3147
来自专栏smy

readlink: command not found 解决方案

/c/Program Files (x86)/Yarn/bin/yarn: line 3: readlink: command not found 用gitba...

3674
来自专栏闵开慧

eclipse中将java文件打成jar包

软件开发的最后一步就是软件的打包与发布,这也是很重要的一步。这几天在Eclipse中做了一个小软件,准备将其打成可运行的jar包进行发布,在网上搜了好多关于在E...

3324
来自专栏前端大白专栏

使用dva脚手架中使用redux-sage感受

2774
来自专栏向治洪

Android Studio环境下搭建ReactNative

1.安装Android Studio 首先肯定是 安装Android Studio(包含SDK)(国内推荐) ps:这里有一点要注意,需要为SDK配置环境变量,...

2028
来自专栏草根专栏

使用Angular CLI生成 Angular 5项目

如果您正在使用angular, 但是没有好好利用angular cli的话, 那么可以看看本文. Angular CLI 官网: https://github....

2973
来自专栏Python

uWSGI listen queue 队列溢出的问题

如果没有设置uwsgi的--listen,如果sysctl -a | grep net.core.somaxconn发现net.core.somaxconn=1...

1580
来自专栏吴柯的运维笔记

Linux系统日志管理常用的工具和指令

前言 日志对于安全来说,非常重要,它记录了系统每天发生的各种各样的事情,你可以通过它来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。 日志主要的功能有:...

68411

扫码关注云+社区

领取腾讯云代金券