在wooyun上看到了有人把biweb的shell拿到了: WooYun: BIWEB门户版Getwebshell漏洞 ,也有人提了其他漏洞,我也来找找它的漏洞吧。去官网下BiWEB门户版最新的5.8.3来看看。发现BiWEB有多处搜索,都存在注入漏洞。
在用户修改资料,上传执照图片时,使用unlink()删除原来的文件,而删除的文件是用户可控的,而且没有过滤./和.\等目录跳转符号,也没有限制访问的目录,造成任意文件删除。
该CMS中有多处这种漏洞,如:这里就选上传执照图片(/user/adminu/licence.php)作简要分析。
下面是分析过程及删除证明。
BiWEB首先对GET和POST进行了过滤,/config/filtrate.inc.php
这里就先不说这种过滤的脑残之处了。
继续往下看,上传执照图片/user/adminu/licence.php(测试时记得要先注册一个用户并登录哟)。
看到了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就被删除了,也就可以重装了。
如果直接访问xxx/user/adminu/licence.php时,cms会提示没有licence.php所使用的模板,所以,在测试时就不访问这个页面了,直接通过burp提交伪造的POST请求就可以了。
Payload:
删除install.lock前,是不能重装的
执行成功以后,我们访问http://XXXX/install/index.php,可以重装了