phpcms_9.3.2_index.php_头像上传漏洞(利用工具)


漏洞分析

在中 v9\phpcms\modules\member\index.php381行处

public function account_manage_avatar() {



$memberinfo = $this->memberinfo;



//初始化phpsso



$phpsso_api_url = $this->_init_phpsso();



$ps_auth_key = pc_base::load_config('system', 'phpsso_auth_key');



$auth_data = $this->client->auth_data(array('uid'=>$this->memberinfo['phpssouid'], 'ps_auth_key'=>$ps_auth_key), '', $ps_auth_key);



$upurl = base64_encode($phpsso_api_url.'/index.php?m=phpsso&c=index&a=uploadavatar&auth_data='.$auth_data);



//获取头像数组



$avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']);







include template('member', 'account_manage_avatar');



}


这里是一个上传头像的功能模块,我们继续跟踪上传地址为



v9/phpsso_server/index.php?m=phpsso&c=index&a=uploadavatar



读取v9\phpsso_server\phpcms\modules\phpsso\index.php文件



其中uploadavatar为我们处理上传头像函数



具体函数如下



public function uploadavatar() {



/根据用户id创建文件夹



if(isset($this->data['uid']) && isset($this->data['avatardata'])) {



$this->uid = $this->data['uid'];



$this->avatardata = $this->data['avatardata'];



} else {



exit('0');



}







$dir1 = ceil($this->uid / 10000);



$dir2 = ceil($this->uid % 10000 / 1000);







//创建图片存储文件夹



$avatarfile = pc_base::load_config('system', 'upload_path').'avatar/';



$dir = $avatarfile.$dir1.'/'.$dir2.'/'.$this->uid.'/';



if(!file_exists($dir)) {



mkdir($dir, 0777, true);



}







//存储flashpost图片



$filename = $dir.$this->uid.'.zip';



file_put_contents($filename, $this->avatardata);



echo $filename;exit();



//解压缩文件



pc_base::load_app_class('pclzip', 'phpsso', 0);



$archive = new PclZip($filename);



if ($archive->extract(PCLZIP_OPT_PATH, $dir) == 0) {



die("Error : ".$archive->errorInfo(true));



}







//判断文件安全,删除压缩包和非jpg图片



$avatararr = array('180x180.jpg', '30x30.jpg', '45x45.jpg', '90x90.jpg');



if($handle = opendir($dir)) {



   while(false !== ($file = readdir($handle))) {



if($file !== '.' && $file !== '..') {



if(!in_array($file, $avatararr)) {



@unlink($dir.$file);



} else {



$info = @getimagesize($dir.$file);



if(!$info || $info[2] !=2) {



@unlink($dir.$file);



}



}



}



   }



   closedir($handle);    



}



$this->db->update(array('avatar'=>1), array('uid'=>$this->uid));



exit('1');



}





其中关键代码



pc_base::load_app_class('pclzip', 'phpsso', 0);



$archive = new PclZip($filename);



if ($archive->extract(PCLZIP_OPT_PATH, $dir) == 0) {



die("Error : ".$archive->errorInfo(true));



}




这里为解压缩文件



接下来为判断是否为图片类型

//判断文件安全,删除压缩包和非jpg图片



$avatararr = array('180x180.jpg', '30x30.jpg', '45x45.jpg', '90x90.jpg');



if($handle = opendir($dir)) {



   while(false !== ($file = readdir($handle))) {



if($file !== '.' && $file !== '..') {



if(!in_array($file, $avatararr)) {



@unlink($dir.$file);



} else {



$info = @getimagesize($dir.$file);



if(!$info || $info[2] !=2) {



@unlink($dir.$file);



}



}



}

   }



   closedir($handle);    



}






为180x180.jpg', '30x30.jpg', '45x45.jpg', '90x90.jpg ,如果不为这几种,则就删除,但是他考虑到的仅仅是当前目录下的,没做循环遍历,导致我们可以新建一个目录,然后里面放入我们的PHP木马,然后压缩成zip,然后再上传,然后即可达到任意上传文件,直接前台无限制getshell

phpcms_9.3.2_index.php_头像上传漏洞(利用工具).rar只允许会员下载 该文件只允许会员下载! 登录 | 注册

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 0day
评论: 0 | 引用: 0 | 查看次数: 2220
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭