### 简要描述: BiWEB最新商城版任意文件上传getshell ### 详细说明: 在wooyun上看到了有人提了BiWEB的一个XSS漏洞: [WooYun: BIWEB商城版XSS盲打cookie](http://www.wooyun.org/bugs/wooyun-2014-049745) ,也有人提了SQL注入,我来找找其他的漏洞吧。去官网下BiWEB商城版最新的5.8.4来看看。 在用户修改资料时,有一个上传执照图片的点,分析一下这个上传是不是会有任意文件上传的问题呢? 上传点在这里/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...
### 简要描述: BiWEB最新商城版任意文件上传getshell ### 详细说明: 在wooyun上看到了有人提了BiWEB的一个XSS漏洞: [WooYun: BIWEB商城版XSS盲打cookie](http://www.wooyun.org/bugs/wooyun-2014-049745) ,也有人提了SQL注入,我来找找其他的漏洞吧。去官网下BiWEB商城版最新的5.8.4来看看。 在用户修改资料时,有一个上传执照图片的点,分析一下这个上传是不是会有任意文件上传的问题呢? 上传点在这里/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(); } } 无关代码 ``` 调用了uploadInfoImage()方法,/web_common5.8/php_common.php ``` 无关代码 if ($arrFile['error'] != 0) { check::AlertExit('文件上传错误!('.$arrFile['error'].')',-1); } if ($arrFile['name']) { $strFileType = strtolower($arrFile['type']); if (!in_array( $strFileType , array( 'image/jpg','image/jpeg', 'image/gif' , 'image/pjpeg','image/png','image/x-png'))) { check::AlertExit('文件类型不符合要求('.$arrFile['type'].')',-1); } } 无关代码 ``` 可以看到,这里只对filetype做了验证,也就是只对MIME做了一次验证,后面就没有别的验证了,这里问题就出来了。 直接上php马,然后修改Content-Type为“image/jpg','image/jpeg', 'image/gif' , 'image/pjpeg','image/png','image/x-png”中的任意一个都可以成功绕过检验完成上传。 下面上传一个php马试试,先来看看上传点 [<img src="https://images.seebug.org/upload/201411/150041405024330dbac7f6b0708522f74fc907e9.jpg" alt="上传点副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/150041405024330dbac7f6b0708522f74fc907e9.jpg) 上传时,请先申请一个账号登陆,上传成功后的名称即你访问的你上传图片的路径,如上图。 修改Content-Type,以绕过MIME检测,如下图 [<img src="https://images.seebug.org/upload/201411/15004207647f1b7c2440f16d601ce77a545af14f.jpg" alt="包副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/15004207647f1b7c2440f16d601ce77a545af14f.jpg) 上传成功,连刀看看效果 [<img src="https://images.seebug.org/upload/201411/15004217507ade2479b9506be032223ea5fb646b.jpg" alt="刀.JPG" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201411/15004217507ade2479b9506be032223ea5fb646b.jpg) ### 漏洞证明: 见 详细说明