Weiphp5.0 前台文件任意读取 CNVD-2020-68596

漏洞描述

Weiphp5.0 存在前台文件任意读取漏洞,可以读取数据库配置等敏感文件

影响版本

Note

Weiphp <= 5.0

环境搭建

weiphp5.0官方下载参考手册

参考官方手册创建网站即可

FOFA

Note

app="WeiPHP"

漏洞复现

漏洞函数文件:application\material\controller\Material.php

漏洞函数:_download_imgage

首先注意到函数的标识为public,也就是这个函数是公共调用的,并且变量picUrl为可控变量

根据代码从上向下分析

变量$savePath确定文件上传后的缓存位置为/public/uploads/picture/,并按照年-月-日 创建文件夹

向下对变量$picUrl 是否为空进行判断,并判断是否进行登录,这里使用POST传参进行验证登录绕过,跳转到else语句下

分析传入变量 picUrlwp_file_get_contents方法

函数文件位置 application\common.php

可以看到这里没有对我们的参数进行过滤,只做了一个有关超时的操作, 回到函数继续向下分析

这里创建了有关当前时间的图片文件,并写入文件夹/public/uploads/picture/

我们先尝试控制变量 $picUrl 来写入数据库配置文件到图片中

查看目录/public/uploads/picture/,并用记事本打开写入的jpg文件

得到数据库配置文件的信息,既然这个变量可控,我们也可以通过这个方法下载木马文件,再通过解析漏洞或者文件包含等其他漏洞来getshell

在当前条件下并不知道文件名是什么,所以回到代码中继续寻找可以获取文件名的办法

向下跟进 addFile 函数

函数位置:application\home\model\Picture.php

可以看到这部分代码写入了 Picture 表中

我们查看一下数据库的这个数据表,可以发现之前所上传的数据全部缓存在这个表里了

我们现在则需要找到不需要登录的地方来获得这些数据,所以可以全局去查找调用了这个 Picture 表的地方

找到一处可以利用的地方

跟进 get_wpid 函数

查看 WPID 的定义,文件位置在config\weiphp_define.php

定义值默认为 1,所以这里调用则可以获得数据库中Pictrue表的内容,间接的知道了文件内容以及文件名

访问地址: http://webphp/public/index.php/home/file/user_pids

可以看到文件名,根据url地址访问选择下载即可

漏洞利用POC

Last updated

Was this helpful?