记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

cmseasy{易通CMS}v5.5 任意文件上传漏洞简单分析附利用方法

2013-05-13 03:05

显示不全请点击全屏阅读

昨天发现有人暴出了cmseasy v5.5的任意文件上传漏洞,还附带了exp。利用该漏洞可以直接上传webshell等恶意文件,危害巨大且目前官方还未出任何补丁,这里做一下简单的漏洞分析。

利用入口位于:

http://www.hackqing.com/editor/editor/dialog/imageuser_mt_mt.php/index.php?case=user&act=log

 

 

通过该页面就可以上传任意文件到服务器了。

看下imageuser_mt_mt.php的代码:

 


$_GET=array('case'=>'user','act'=>'fckupload'); include_once dirname(dirname(dirname(dirname(__FILE__)))).'/index.php';

 包含了index.php并指定了case和act,因为cmseasy实现各个功能的文件都在\lib\default\目录下,我们到该目录下找到user_act.php文件并定位到fckupload函数:

function fckupload_action() { $uploads=array(); if(is_array($_FILES)) { $upload=new upload(); foreach($_FILES as $name=>$file) { $uploads[$name]=$upload->run($file); } $this->view->uploads=$uploads; } $this->render('../admin/system/fckupload.php'); exit; }

 

进入进入run()函数(位于\lib\tool\front_class.php):

class upload { public $path; public $type=array('jpg','gif','png','doc','flv','rar'); public $max_size=2048000; public $min_size=0; public $dir='images'; function run($attachment) { $this->max_size=config::get('upload_max_filesize') * 1024000; if (!isset($this->url_pre)) $this->url_pre='upload/'.$this->dir.'/'.date('Ym'); $this->path=ROOT.'/'.$this->url_pre; tool::mkdir($this->path); if (!$attachment['name']) { return false; } $new_name=$new_name_gbk=str_replace('.','',Time::getMicrotime()).'.'.end(explode('.',$attachment['name'])); $content=file_get_contents($attachment['tmp_name']); if (!front::checkstr($content)) { return false; } if (strlen($content) >$this->max_size) { return false; } move_uploaded_file($attachment['tmp_name'],$this->path.'/'.$new_name_gbk); $this->save_path=$this->path.'/'.$new_name_gbk; if ($_GET['site'] != 'default') { $ftp=new nobftp(); $ftpconfig=config::get('website'); $ftp->connect($ftpconfig['ftpip'],$ftpconfig['ftpuser'],$ftpconfig['ftppwd'],$ftpconfig['ftpport']); $ftperror=$ftp->returnerror(); if ($ftperror) { exit($ftperror); } else { $ftp->nobchdir($ftpconfig['ftppath']); $ftp->nobput($ftpconfig['ftppath'].'/'.$this->url_pre.'/'.$new_name,$this->save_path); } } return $this->url_pre.'/'.$new_name; } }

 

可以看到类开始处明明定义了允许上传的类型

public $type=array(‘jpg’,'gif’,'png’,'doc’,'flv’,'rar’);

 

但之后的处理过程中却没有用到,直接通过move_uploaded_file把上传的临时文件存到了对应的目录中。


整个过程已经明显的不能再明显了,感觉这个漏洞更像别人留下的一个隐藏的后门。。

 

 

最后给出补丁建议:

在\lib\tool\front_class.php文件中,第2665行左右的move_uploaded_file函数上方添加如下语句:

if (!$new_name ||!preg_match('/\.(jpg|gif|png|bmp)$/',$new_name)) { return false; }

 

知识来源: www.hackqing.com/index.asp?FoxNews=929.html

阅读:123493 | 评论:0 | 标签:cms 漏洞

想收藏或者和大家分享这篇好文章→复制链接地址

“cmseasy{易通CMS}v5.5 任意文件上传漏洞简单分析附利用方法”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云