漏洞名称:华科CMSV1.1文件包含漏洞
版本:华科CMSV1.1
漏洞危害:高危
代码分析:
造成该漏洞的原因,我们主要看两个点,一个是源码中, /admin/cms_channel_add.php 文件和 channel.php 。
我们先分析 /admin/cms_channel_add.php ,
该文件主要负责的是频道的增加。
先来看代码的 175行 , 193行 ,在两个input标签的写入一个文件名的内容作为引入的模板类型。
主要关注 nmodel 和 dmodel 这两个。
那么如果说正常的输入的话,提交表单内容,会增加一个新频道。
我们再来看看action,在 /admin/cms_channel_add.php , 第4行 之后,如果保存提交,先对POST传来的内容进行 null_back() ,跟进这个函数了解到是判空后返回页面,而后面,并没有对数据进行过滤处理,造成我们在前端写入的被带入到 $_data数组 。
后面用了一个 arrtoinsert($arr) 函数,将数组转成插入用的字符串。
还是没有过滤操作也就是说我们可以构造 ../../ 输入让他增加其他的 频道模型 或者 内容模型 。
然后再分析 channel.php 。
这个脚本文件可以在前台直接访问,没有访问限制,在代码 97行之后 , ism() 函数判断是否是手机端,然后直接include一个拼接的文件名。漏洞点就在这里。
因为是PC端,所以进到else分支。跟进 $dir 、 $t_path 、 $n_model 这三个变量。
dir表示脚本根路径。
t_path表示/template/在连接一个路径/。两层目录。
nmodel是取出来的文件名。
可以看到取到的数据也没有做处理原样存储变量中,现在对应上后端的 /admin/cms_channel_add.php ,由t_path我们知道是两层目录,我们只需要在频道模型输入 ../../xxx 就可以回到web根目录去包含任意文件。
这里一个通过上传一个文件类型是图片格式的PHP木马,然后包含路径即可实现getshell。