-
-
[原创]web漏洞分析(2)之——zzcms多个cve分析
-
发表于: 2019-8-28 20:30 1872
-
这次接着上次的分析:
前篇传送门:web漏洞分析(1)之——CVE-2019-1010153
这次直接分析剩下四个RCE漏洞.说是四个,其实多数水出来的,真正的漏洞可以说是只有一个.漏洞编号分别是:
CVE-2019-1010148
CVE-2019-1010152
CVE-2019-1010150
CVE-2019-1010149
这里先选择最后一个
好了,直接步入正题.漏洞之一发生在install/index.php中—这是cms应用安装文件.
使用seay打开zzcms的根目录.打开漏洞文件.
刚进来就看见两个extract()
遇见这个函数就要注意变量覆盖漏洞了(但这里没有)因为extract函数的flag参数设置的是EXTR_SKIP
flags
对待非法/数字和冲突的键名的方法将根据取出标记flags参数决定。可以是以下值之一:
EXTR_OVERWRITE
如果有冲突,覆盖已有的变量。
EXTR_SKIP
如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME
如果有冲突,在变量名前加上前缀prefix。
EXTR_PREFIX_ALL
给所有变量名加上前缀prefix。
EXTR_PREFIX_INVALID
仅在非法/数字的变量名前加上前缀prefix。
EXTR_IF_EXISTS
仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。 举个例子,以下情况非常有用:定义一些有效变量,然后从$_REQUEST中仅导入这些已定义的变量。
EXTR_PREFIX_IF_EXISTS
仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
EXTR_REFS
将变量作为引用提取。这有力地表明了导入的变量仍然引用了array参数的值。可以单独使用这个标志或者在flags中用 OR 与其它任何标志结合使用。如果没有指定flags,则被假定为EXTR_OVERWRITE。
当flag为EXTR_OVERWRITE是可能会存在变量覆盖漏洞.
继续往下看,来到105-108行,
作用是打开 inc/config.php 并将响应相应的str值写入到文件.
但str变量中含有其他可控变量:
这一句中参数$url在文件之前并未初始化过,而之前又用extract函数将
将变量$url导入到当前的符号表,所所以url变量可控,这就导致了可向inc/config.php文件中写入任意代码.
二话不说,访问install/index.php文件看看:
果然不出所料,检测了安装锁文件.全局搜索一下””安装向导已运行安装过,如需重安装””字符串,发现在本文件安装第一步包含的文件中:
进入step_1.php中:
要想写入任意代码,必须删除install/install.lock文件.
然后我们先来看下一个漏洞文件——user/licence_save.php
当action=’modify‘,oldimg=$_POST[“oldimg”],接着删除由oldimg拼接的文件$fs,造成了任意文件删除漏洞。
可以用任意文件删除漏洞删除安装锁文件即install/install.lock,再使用install/index.php文件的任意代码写入,最终写入并执行任意代码。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创]利用php新特性过静态查杀 3831
- [原创]web漏洞分析(2)之——zzcms多个cve分析 1873
- [原创]web漏洞分析(1)之——CVE-2019-1010153 2287
- 1664