| Redgranite |
2014-12-31 10:04 PM |
MetInfo设计缺陷导致删除整站等严重漏洞全版本通杀
漏洞类型: 设计缺陷/逻辑错误
简要描述:MetInfo设计缺陷,可导致删除整站等严重漏洞,5.1及5.2通杀。
详细说明:那官方最新版metinfo5.2测试!
第一处:任意目录删除
文件出在/admin/system/uploadfile.php
Code:
<?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
require_once '../login/login_check.php';
require_once 'mydir.class.php';
$rurls='../system/uploadfile.php?anyid='.$anyid.'&cs='.$cs.'&lang='.$lang;
if($action=='deletefolder'){
$filedir="../../".$filename;
deldir($filedir,0);
metsave($rurls);
}
if($action=='delete'){
$rurls.='&fileurl='.$fileurl.'&file_classnow='.$file_classnow.'&page='.$page;
if($action_type=="del"){
$allidlist=explode(',',$allid);
$k=count($allidlist)-1;
for($i=0;$i<$k; $i++){
if(strcasecmp(substr(trim($allidlist[$i]),0,13),'../../upload/')!=0)die('met1');
if(substr_count(trim($allidlist[$i]),'../')!=2)die('met2');
if(file_exists($allidlist[$i]))@unlink($allidlist[$i]);
}
metsave($rurls);
}else{
if(strcasecmp(substr(trim($filename),0,13),'../../upload/')!=0)die('met1');
if(substr_count(trim($filename),'../')!=2)die('met2');
if(file_exists($filename)){
@unlink($filename);
metsave($rurls);
}else{
metsave($rurls,$lang_setfilenourl);
}
}
当$action=='deletefolder'时,filename没有过滤,直接拼接到filedir
然后deldir($filedir,0),这里比删除文件更给力,可直接删除真个目录,甚至删除整站目录。
虽然在后台才能删除,但是这里存在CSRF漏洞,没有任何防御CSRF的措施,而且是GET直接请求,可以给管理留言等,可以优势管理访问我们的链接,后果不堪设想。
首先我们在网站根目录下新建一个目录test
然后构造伪造请求,来删除此目录:
Code:
http://localhost/metinfo/admin/system/uploadfile.php?filename=test&action=deletefolder
成功把根目录下的test删除,而且在过程中没有任何CSRF防御措施。
这样的话恶意攻击者可以使用CSRF删除系统文件,删除整站,删除config等等,瞬间搞垮网站。
同样的问题还有:
任意添加管理员,修改上传文件类型等操作。
修复方案:控制删除的目录。
添加CSRF Token
|