上次我们分析了一下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行
简单整理一下逻辑就是:
所以很简单,也没有什么逻辑,可以直接注入,测试脚本如下:
#!/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
测试结果为:
可以成功注入出管理员的密码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更新了版本,但是看到很多安全问题并没有从底层去解决,有的只是暂时性的修补了一下,这样其实是不太可取的,底层的问题存在,只要在找到另外一条可以利用的通路就一样可以利用。
发表评论
您还未登录,请先登录。
登录