开场都是为了烘托气氛,一句话:新年到,燥起来,煎饼会有的,肉也会有的。
漏洞文件:
/admin/app/physical/physical.php
$post=array('ver'=>$metcms_v,'app'=>$applist); $result=curl_post($post,60); if(link_error($result)==1){ $results=explode('<Met>',$result); file_put_contents('dlappfile.php',$results[1]); file_put_contents('standard.php',$results[0].$results[1]);
文内中有文件操作函数file_put_contents,但通过文中可以看见如果要操作这个函数那得控制result这个变量,先跟进curl_post
关联文件:/include/export.func.php
function curl_post($post,$timeout){ global $met_weburl,$met_host,$met_file; $host=$met_host; $file=$met_file; if(get_extension_funcs('curl')&&function_exists('curl_init')&&function_exists('curl_setopt')&&function_exists('curl_exec')&&function_exists('curl_close')){ $curlHandle=curl_init(); curl_setopt($curlHandle,CURLOPT_URL,'http://'.$host.$file); curl_setopt($curlHandle,CURLOPT_REFERER,$met_weburl); curl_setopt($curlHandle,CURLOPT_RETURNTRANSFER,1); curl_setopt($curlHandle,CURLOPT_CONNECTTIMEOUT,$timeout); curl_setopt($curlHandle,CURLOPT_TIMEOUT,$timeout); curl_setopt($curlHandle,CURLOPT_POST, 1); curl_setopt($curlHandle,CURLOPT_POSTFIELDS, $post); $result=curl_exec($curlHandle); var_dump($result); curl_close($curlHandle); }
看内容一看就知道是一个post请求的curl,metinfo是一个具有伪全局的cms,结合前文和后文发现met_host是可控的,met_file因为前面有赋值所以不可控
if($physicaldo[11]==1){ require_once $depth.'../../include/export.func.php'; $met_file='/dl/standard.php';