### 简要描述:
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)
暂无评论