phpcms/modules/content/down.php 漏洞修补

漏洞名称:phpcms前台注入导致任意文件读取漏洞

文件路径:/phpcms/modules/content/down.php

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

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

修复区域(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);

评论

©MycentOS | Powered by LOFTER