网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

Finecms v2.3.2前台getshell #1 (官网已shell) - 网站安全

来源:自学PHP网    时间:2015-04-15 15:00 作者: 阅读:

[导读] 问题仍然出现在头像上传处。finecms头像上传代码沿用的phpcms,多的不说,直接看代码吧。 member controllers Account php 第412行: *** 上传头像处理* 传入头像压缩包,解压到指定文件夹后删除...

问题仍然出现在头像上传处。
 
finecms头像上传代码沿用的phpcms,多的不说,直接看代码吧。
 
/member/controllers/Account.php 第412行:
 
/**

*  上传头像处理

*  传入头像压缩包,解压到指定文件夹后删除非图片文件

*/

public function upload() {



if (!isset($GLOBALS['HTTP_RAW_POST_DATA'])) {

            exit('环境不支持');

        }



$dir = FCPATH.'member/uploadfile/member/'.$this->uid.'/'; // 创建图片存储文件夹

if (!file_exists($dir)) {

            mkdir($dir, 0777, true);

        }

$filename = $dir.'avatar.zip'; // 存储flashpost图片

file_put_contents($filename, $GLOBALS['HTTP_RAW_POST_DATA']);



// 解压缩文件

$this->load->library('Pclzip');

$this->pclzip->PclFile($filename);

if ($this->pclzip->extract(PCLZIP_OPT_PATH, $dir, PCLZIP_OPT_REPLACE_NEWER) == 0) {

            exit($this->pclzip->zip(true));

        }

 

 
 
看到倒数第3行,这是解压的操作。熟悉phpcms那个洞的同学应该知道,上传头像的时候先是本地flash对头像进行处理、压缩以后上传,后端进行解压。解压以后删除所有非法文件。
 
如代码所示,解压如果遇到错误的话,就exit。
 
所以,如果我们构造一个压缩包,让解压发生错误,但其中的部分内容又能够解压出来,就能exit出这个程序,就不会删除非法文件,我们的shell就能留下来。
 
思路就这样,利用方法及demo证明见下方。
 
首先构造压缩包。
 
准备7个php文件,直接打包:
 
 
打包好的1.zip,用UltraEdit打开编辑,将结尾处的6.php修改类似下图,保存:
 
 
我们直接用winrar解压就能发现报错了,但文件却正常地解压了出来:
 
要的就是这个效果。
 
 
 
接下来,上传。注册一个账号,登录以后来到头像上传处。选择正常图片抓包,将数据包修改成刚才生成的那个zip:
发送会发现返回包报错了:
 
 
报错了没关系,直接根据目录结构即可找到上传的这个shell,在/member/uploadfile/member/你的uid/3.php
 
其中,1/2/3/4/5/6/7都试一下,根据有些可能没解压出来。
 
demo站phpinfo证明:http://v2.finecms.net/member/uploadfile/member/639/3.php

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论