OpenSNS任意文件删除+IIS6.0(getshell)

漏洞文件:/Application/Weibo/Controller/IndexController.class.php

public function uploadMyExp(){
 
        $flag=1;
        $uid=is_login();
        $mycollection='mycollection';
 
        $config = array(
            'maxSize' => 5*1024*1024,
            'rootPath' => './Uploads/',
            'savePath' => 'Expression/'.$mycollection.'/',
            'saveName' => '',
            'exts' => array('jpg', 'gif','png','jpeg'),
            'autoSub' => true,
            'subName' => '',
            'replace' => true,
        );
        if($_FILES['file']['size']<5*1024||$_FILES['file']['size']> 5*1024*1024){
            echo json_encode('-3');
            $flag=0;
        }
        $upload = new pload($config); // êμày»ˉéÏ′«àà
        $info = $upload->upload($_FILES);
        if (!$info) { // éÏ′«′íÎóìáê¾′íÎóDÅÏ¢
            echo json_encode('-1');
            $flag=0;
        }

获取当前登录的uid,然后获取上传的FILES进入upload
1
正常的一个流程
1
这里有一个check检测,跟进
2
对后缀进行了检测.所以我们得必须满足后面.jpg这个条件
3
文件名的控制
4
当saveName为空时则true并截取我们上传的文件名
5
最后则是检测后缀还有MIME类型,true则进入uplandfie.复现
6
为了方便我var_dump了出来
7
成功上传
任意文件删除:

$name=I('post.name','','op_t');
        $allname=substr($name,strrpos($name,'\')+1,strlen($name)-strrpos($name,'\')-1);
       // $iname=substr($allname,0,strrpos($allname,'.'));
        $rp= $this-> ROOT_PATH = str_replace('/Application/Weibo/Controller/IndexController.class.php', '', str_replace('\', '/', __FILE__));
        $path = $rp."/Uploads/Expression/" ;
        if(!file_exists($path.$mycollection)){
          mkdir($path.$mycollection,0777,true);
        }
        $path0=$rp.'/Uploads/Expression/'.$mycollection.'/'.$allname;
        $file=file_get_contents($path0);
        $map['md5']=md5($file);
       $iexp_id=$iexpression->where($map)->getField('id');
        if($iexp_id){
            $map1['iexpression_id']=$iexp_id;
            $map1['uid']=$uid;
            $res=$iexplog->where($map1)->select();
            if($res){
                echo json_encode('0');
                $iexp_path=$iexpression->where($map)->getField('path');
                if($iexp_path!="/Uploads/Expression/".$mycollection.'/'.$allname)
                {
                    unlink($path0);
                }

Post获取name并进入了op_t函数
1
可以看见这是针对安全过滤,并没有针对路径跳转过滤
2
然后进行截取,很简单的就可以绕过的一种截取
3
这里就很狗血的一段了!进入数据库查询当查询出来的内容与我们输入的内容不符合的时候则删除不符合内容

本机先新建一个文件
4
这里去请求
5
6

发表评论