### 简要描述: YXCMS最新版绕过补丁继续任意文件删除 ### 详细说明: 最早Matt牛在2013-12-30发的一个漏洞: [WooYun: yxcms任意文件删除 导致的重新安装漏洞](http://www.wooyun.org/bugs/wooyun-2013-047226) 厂商在2014-01-13发布了升级包,修改这个漏洞 但是处理的不严格,可以绕过,继续进行任意文件删除 看代码protected/apps/members/contoller/newscontroller.php ``` if (empty($_FILES['picture']['name']) === false){ $tfile=date("Ymd"); $imgupload= $this->upload($this->uploadpath.$tfile.'/',config('imgupSize'),'jpg,bmp,gif,png'); $imgupload->saveRule='thumb_'.time(); if(!empty($_POST['oldpicture']) && $_POST['oldpicture']!=$this->nopic){ $picpath=$this->uploadpath.$_POST['oldpicture']; $lasts=strtolower(substr($_POST['oldpicture'],-3)); if(file_exists($picpath) && in_array($lasts,array('gif','jpg','png','bmp'))) @unlink($picpath); } $imgupload->upload(); $fileinfo=$imgupload->getUploadFileInfo(); $errorinfo=$imgupload->getErrorMsg(); if(!empty($errorinfo)) $this->alert($errorinfo); elseif($fileinfo[0]['savename']) $data['picture']=$tfile.'/'.$fileinfo[0]['savename']; }...
### 简要描述: YXCMS最新版绕过补丁继续任意文件删除 ### 详细说明: 最早Matt牛在2013-12-30发的一个漏洞: [WooYun: yxcms任意文件删除 导致的重新安装漏洞](http://www.wooyun.org/bugs/wooyun-2013-047226) 厂商在2014-01-13发布了升级包,修改这个漏洞 但是处理的不严格,可以绕过,继续进行任意文件删除 看代码protected/apps/members/contoller/newscontroller.php ``` if (empty($_FILES['picture']['name']) === false){ $tfile=date("Ymd"); $imgupload= $this->upload($this->uploadpath.$tfile.'/',config('imgupSize'),'jpg,bmp,gif,png'); $imgupload->saveRule='thumb_'.time(); if(!empty($_POST['oldpicture']) && $_POST['oldpicture']!=$this->nopic){ $picpath=$this->uploadpath.$_POST['oldpicture']; $lasts=strtolower(substr($_POST['oldpicture'],-3)); if(file_exists($picpath) && in_array($lasts,array('gif','jpg','png','bmp'))) @unlink($picpath); } $imgupload->upload(); $fileinfo=$imgupload->getUploadFileInfo(); $errorinfo=$imgupload->getErrorMsg(); if(!empty($errorinfo)) $this->alert($errorinfo); elseif($fileinfo[0]['savename']) $data['picture']=$tfile.'/'.$fileinfo[0]['savename']; } model('news')->update("id='$id'",$data); $this->success('资讯编辑成功~',url('news/index')); ``` 厂商在删除文件之前,加了后缀的判断 $lasts=strtolower(substr($_POST['oldpicture'],-3)); in_array($lasts,array('gif','jpg','png','bmp') 判断后缀必须是('gif','jpg','png','bmp')这里面的 但是在windows下可以使用%00进行截断 这样即可绕过后缀的限制,继续删除任意文件了 ### 漏洞证明: 1、登陆前台,然后添加一个news,要上传一张封面图片 2、然后再编辑这个news,在上传另外一张封面图片 3、提交时抓包,修改此时的oldpicture为: ./../../protected/apps/install/install.lock%00a.jpg [<img src="https://images.seebug.org/upload/201410/09104513fff24559dc266a3a87626ffa0e8fb7fb.png" alt="444444.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/09104513fff24559dc266a3a87626ffa0e8fb7fb.png) 4、此时install.lock文件已经被删除了 [<img src="https://images.seebug.org/upload/201410/0910454276a11eb4e8c8890dc6beac229ff2c8ac.png" alt="333333.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/0910454276a11eb4e8c8890dc6beac229ff2c8ac.png)