### 简要描述:
BiWEB最新商城版任意文件删除漏洞致重装
### 详细说明:
在wooyun上看到了有人提了BiWEB的一个XSS漏洞: [WooYun: BIWEB商城版XSS盲打cookie](http://www.wooyun.org/bugs/wooyun-2014-049745) ,也有人提了SQL注入,我来找找其他的漏洞吧。去官网下BiWEB商城版最新的5.8.4来看看。
在修改用户资料处,上传执照图片时,使用unlink()删除原来的文件,而删除的文件是用户可控的,而且没有过滤../等符号,也没有限制访问的目录,造成任意文件删除。
该CMS中有多处这种漏洞,如:
```
/deal/adminu/modifyinfo.php
/download/adminu/modifyinfo.php
/grace/adminu/modifyinfo.php
等等
```
这里就选上传执照图片(/user/adminu/licence.php)作简要分析。
下面是分析过程及删除证明。
BiWEB首先对GET和POST进行了过滤,/config/filtrate.inc.php
```
<?php
//过滤GET或POST的值,去除两端空格和转义符号
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
check::filtrateData($_POST,$arrGPdoDB['htmlspecialchars']);
}elseif($_SERVER['REQUEST_METHOD'] == 'GET'){
check::filtrateData($_GET,$arrGPdoDB['htmlspecialchars']);
}
?>
```
这里就先不说这种过滤的脑残之处了。
继续往下看,上传执照图片/user/adminu/licence.php(测试时记得要先注册一个用户并登录)。
```
无关代码
if ($_SERVER["REQUEST_METHOD"] == "POST"){
//图片上传
if ($_FILES['Filedata']['name'] != "") {
$strOldFile = $arrGPic['FileSavePath'].'s/'.$_POST['savefilename'];
if (is_file($strOldFile)) { // 缩略图删除
unlink($strOldFile);
}
$strOldFile = $arrGPic['FileSavePath'].'b/'.$_POST['savefilename'];
if (is_file($strOldFile)) { // 原文件删除
unlink($strOldFile);
}
$_POST['photo1'] = $objWebInit->uploadInfoImage($_FILES['Filedata'],'',$_POST['FileListPicSize'],$_POST['csize0'],$arrInfo['user_id']);
}else{
$_POST['photo1'] = $_POST['savefilename'];
}
// 取会员信息
$arrInfo['photo1'] = $_POST['photo1'];
//修改状态表明正在申请验证,必须设定为字符串形式
$arrInfo['pass'] = '0';
if (!empty($arrInfo)) {
$objWebInit->saveInfo($arrInfo,1);
echo "<script>" . check::WindowLocation('/user/adminu/licence.php')."</script>";
exit();
}
}
无关代码
```
看到了unlink($strOldFile);而$strOldFile = $arrGPic['FileSavePath'].'b/'.$_POST['savefilename'];,$_POST['savefilename']又是用户可控的,问题就来了,这里没有对$_POST进行过滤,也没有限制访问的目录,所以,漏洞就出现了。
$arrGPic['FileSavePath'] = __WEB_ROOT."/uploadfile/".$arrGWeb['module_id']."/";,而此处的module_id为user,所以,这里的路径为/uploadfile/user/b/savefilename。如果这样构造filename:../../../data/install.lock,那install.lock就被删除了,也就可以重装了。
登录,访问http://XXXX/user/adminu/licence.php,上传文件,抓包,把文件名改为../../../data/install.lock如下:
[<img src="https://images.seebug.org/upload/201411/0822591030e4871aaf0148037329effc28f8195b.jpg" alt="payload副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/0822591030e4871aaf0148037329effc28f8195b.jpg)
删除install.lock前,是不能重装的
[<img src="https://images.seebug.org/upload/201411/08225934483dba7448d08096a67c501b679e7805.jpg" alt="删除前无法重装.JPG" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/08225934483dba7448d08096a67c501b679e7805.jpg)
执行成功以后,我们再访问http://XXXX/install,可以重装了
[<img src="https://images.seebug.org/upload/201411/08225954396b058acd21ff9bb96d271245708c07.jpg" alt="删除文件后可重装.JPG" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/08225954396b058acd21ff9bb96d271245708c07.jpg)
### 漏洞证明:
见 详细说明
暂无评论