CVE中文申请站

CVE-2018-20127:zzzphp cms 1.5.8 后台文件任意删除

一、漏洞摘要

漏洞名称: zzzphp cms 1.5.8 后台文件任意删除
上报日期: 2018-12-08
漏洞发现者: Krypton
产品首页: http://zzzcms.com/
软件链接: http://115.29.55.18/zzzphp.zip
版本: 1.5.8 正式版
CVE编号: CVE-2018-20127


二、漏洞概述

漏洞入口位于/admin/save.php文件下的第22
2018-12-07.09.29.30-image.png
switch判断传来的act的参数值,然后通过不同的值 return到不同的方法,进行文件的操作。我们追踪这个方法(del_file($path))。
phpstorm下选中函数名按住CTRL+SHIFT+F可以快速定位;然后给我定位到了inc/zzz_file.php511行,通过这文件名,可以猜出他是一个专门用来处理文件的php文件。
2018-12-07.09.40.45-image.png

然后分析一下这个方法里的代码,看他实现了什么功能。
这是一个有参数的方法,形参是$file,然后进入if判断,如果这个参数是nullreturn false ,513行判断是否是一个常规的文件,如果是则真区间的结果$file赋值给$file,如果并不是,就以根目录.文件的形式赋值给$file参数

然后进入第二个if,还是判断了文件,如果是文件 则进入下面代码,用file_ext($file)方法去对$file参数做了一个处理并讲结果赋值给$ext变量。这里对这个进行定位,看看他是怎么进行操作的。然后来到了第114
2018-12-07.09.55.09-image.png
看他的注释,就差不多知道是干什么的了,就是判断文件不包含. ,应该是用来防止目录跳跃的,可是他没限制路径,照样是可以任意文件删除,这是后话,知道这个方法是干嘛的,然后继续回到515行,继续往下读代码

再往下走又进入了一个if判断,他将$ext变量丢到in_array()方法,从array数组中去比较,是否有指定的几个后缀,如果有,return false 。这里貌似是限制了几个文件名,但是可以用方法绕过的...... ,好 ,继续往下看代码

又来到一个if,已经是最后一个if了,也其实没啥看的了 ,执行的删除功能。

现在按照审计的思路 去复现一下。

三、利用过程

来到后台文件管理--数据库备份
2018-12-07.10.33.19-image.png

首先备份数据库,然后删除处抓包,发到重放模块,点击Go,
2018-12-07.10.35.10-image.png
从数据包可以看出,他是根据路径来的,,审计的时候,已经避免了路径穿越,但是可以通过更改路径去进行任意文件删除
然后再看下文件是否存在
2018-12-07.10.35.51-image.png
已经删除了,现在在本机网站所在磁盘根目录新建一个txt文件和php文件,进行删除演示
2018-12-07.10.38.36-image.png

删除txt:
2018-12-07.10.39.24-image.png
2018-12-07.10.39.35-image.png

删除php:
2018-12-07.10.40.31-image.png

2018-12-07.10.40.40-image.png

可以看到都是可以删除的,前面审计的时候,限制了php,可以用x.phP.的方式进行删除文件。


四、参考信息

CVE中文申请网:http://www.iwantacve.cn/index.php/archives/89/
CVE官方:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20127
exploit-db:发布中