首页
社区
课程
招聘
[原创]web漏洞分析(2)之——zzcms多个cve分析
发表于: 2019-8-28 20:30 1872

[原创]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期)

最后于 2020-3-1 14:55 被孑狱天编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (1)
游客
登录 | 注册 方可回帖
返回
//