phpcms中down.php文件读取任意文件漏洞修复方法

phpcms的/phpcms/modules/content/down.php文件读取任意文件漏洞修复方法;

修复方法来源于阿里云(安骑士) 

当前修复代码的演示版本为 Phpcms V9.6.0 Release 20151225,根据版本的不同以下行号可能会有1-5行的误差。请自行核对。 

打开/phpcms/modules/content/中的down.php文件,找到以下代码;

修复区域1,所在位置约17行 

$a_k = trim($_GET['a_k']);
if(!isset($a_k)) showmessage(L('illegal_parameters'));
$a_k = sys_auth($a_k, 'DECODE', pc_base::load_config('system','auth_key'));
if(empty($a_k)) showmessage(L('illegal_parameters'));
unset($i,$m,$f);
parse_str($a_k);
if(isset($i)) $i = $id = intval($i);

 补丁代码 

$a_k = trim($_GET['a_k']);
if(!isset($a_k)) showmessage(L('illegal_parameters'));
$a_k = sys_auth($a_k, 'DECODE', pc_base::load_config('system','auth_key'));
if(empty($a_k)) showmessage(L('illegal_parameters'));
unset($i,$m,$f);
parse_str($a_k); 
$a_k = safe_replace($a_k); //此处为修补代码,约第17行
if(isset($i)) $i = $id = intval($i);

 

修复区域2,所在位置约89行 

源代码 

$a_k = trim($_GET['a_k']);
$pc_auth_key = md5(pc_base::load_config('system','auth_key').$_SERVER['HTTP_USER_AGENT'].'down');
$a_k = sys_auth($a_k, 'DECODE', $pc_auth_key);
if(empty($a_k)) showmessage(L('illegal_parameters'));
unset($i,$m,$f,$t,$ip);
parse_str($a_k);       
if(isset($i)) $downid = intval($i);

 补丁代码 

$a_k = trim($_GET['a_k']);
$pc_auth_key = md5(pc_base::load_config('system','auth_key').$_SERVER['HTTP_USER_AGENT'].'down');
$a_k = sys_auth($a_k, 'DECODE', $pc_auth_key);
if(empty($a_k)) showmessage(L('illegal_parameters'));
unset($i,$m,$f,$t,$ip);
parse_str($a_k); 
$a_k = safe_replace($a_k);//此处为修补代码,约第89行
if(isset($i)) $downid = intval($i);

 

 修复区域3,所在位置约120行 

源代码

//处理中文文件
if(preg_match("/^([\s\S]*?)([\x81-\xfe][\x40-\xfe])([\s\S]*?)/", $fileurl)) {
   $filename = str_replace(array("%5C", "%2F", "%3A"), array("\\", "/", ":"), urlencode($fileurl));
   $filename = urldecode(basename($filename));
}
$ext = fileext($filename);
$filename = date('Ymd_his').random(3).'.'.$ext;
file_down($fileurl, $filename);

 补丁代码 

//处理中文文件
if(preg_match("/^([\s\S]*?)([\x81-\xfe][\x40-\xfe])([\s\S]*?)/", $fileurl)) {
    $filename = str_replace(array("%5C", "%2F", "%3A"), array("\\", "/", ":"), urlencode($fileurl));
    $filename = urldecode(basename($filename));
}
$ext = fileext($filename);
$filename = date('Ymd_his').random(3).'.'.$ext;
$fileurl = str_replace(array('<','>'), '',$fileurl); //此处为修补代码,约第120行
file_down($fileurl, $filename);


如果内容有帮助,就点个赞吧!

转载注明出处:http://www.12564.cn/show-2.html

如有疑问请联系 QQ:644233191   微信:zw1688k