CVE中文申请站

CVE-2018-20128:UsualToolCMS v8.0后台任意文件删除

一、漏洞摘要

漏洞名称: UsualToolCMS v8.0后台任意文件删除
上报日期: 2018-12-08
漏洞发现者: Krypton
产品首页: https://cms.usualtool.com/
软件链接: https://cms.usualtool.com/
版本: 8.0
CVE编号: CVE-2018-20128


二、漏洞概述

漏洞位于cmsadmin\a_sqlback.php的第74-88行,咱们贴上代码来看。
2018-12-06.12.18.29-image.png
74行的if用来判断$_POST['t']的值是不是为del,如果不是,则进入82-83行的假区间,echo 一句无法删除。如果是del则进入真区间

进入真区间后,75行,将$_POST()函数接收到的$backname赋值给$backname

76行用count()函数将$backname的个数做了统计赋值给$backnamenum,

随后进入for循环将$backnamenum进行遍历并且获取他的每个文件名。然后赋值给$sqlback,之后进入79行的if判断,通过自己的一个函数去检查$sqlback,我们跟进这个函数

class/UsualToolCMS_INC.php138-142行是他的contain函数执行的操作。
2018-12-06.12.29.29-image.png
可以看到他是做的一个字符串分割且判断是否数量>1,满足则return true 否则return else ,

然后继续查看一下unlinkFile的函数,看一下他的代码是做了什么事情
2018-12-06.12.34.15-image.png
判断文件是否存在 ,存在则删除,且return true 否则return false

然后cmsadmin\a_sqlback.php的代码就全部跑完了,在审查的过程中,并没有对其文件名和目录做出限制,于是可以构造成一个任意文件删除漏洞

三、利用过程

来到数据库备份的地方
2018-12-06.12.39.44-image.png
然后burp抓包,得到数据包如下
2018-12-06.12.41.01-image.png
然后我们在本机网站存放的磁盘下新建一个文件1.txt ,将数据包的backname参数改为../../../../../1.txt 并且发包看结果。

发包前:
2018-12-06.12.43.34-image.png
发包后:
burp的回显:
2018-12-06.12.44.46-image.png
电脑的效果:
2018-12-06.12.45.10-image.png

OK,可以看到 ,成功的删除了我们的1.txt文件,于是乎,这个任意文件删除是ok的

四、参考信息

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

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:发布中