最新消息:网站改版咯

ThinkSNS V3上传文件漏洞

php Yovae 1354浏览

ThinkSNS V3上传文件漏洞,由于在参数中没有限定文件后缀名和对输入流的过滤。导致可以被上传php文件随意执行代码,从而使站点被获取web shell.
出问题的代码文件AttachAction.class.php:

//截图上传
	public function capture(){

		error_reporting(0);
	
		//解析上传方式
		$query_string	=	t($_SERVER['QUERY_STRING']);
		parse_str($query_string,$query_data);

		$log_file	=	time().'_'.rand(0,1000).'.txt';

		$log_path	=	RUNTIME_PATH.'/logs/'.date('Y/md/H/');

		if(!is_dir($log_path))
			mkdir($log_path,0777,true);

		$file_path	=	'./data/uploads/'.date('Y/md/H/');

		if(!is_dir($file_path))
			mkdir($file_path,0777,true);

		file_put_contents($log_path.$log_file,var_export($query_data,true));

		//按钮截图:FileType=img
		if($query_data['FileType']=='img'){
			$file_name	=	'capture_'.time().'.jpg';
		}

		//附件上传:FileType=Attachment & FileName=xxx.jpg
		if($query_data['FileType']=='Attachment'){
			$file_name	=	$query_data['FileName'];
		}

		//处理数据流
		if ($stream = fopen('php://input', 'r')) {
			// print all the page starting at the offset 10
			// echo stream_get_contents($stream, -1, 10);
			$content	=	stream_get_contents($stream);
			file_put_contents($file_path.$file_name,$content);
			fclose($stream);
		}

		//include 'UploadFile.class.php';

		//$up	=	new UploadFile();
		//$up->upload('./uploads/');
		//$info	=	$up->getUploadFileInfo();

		//echo "
<pre>";
		//var_dump($_SERVER);
		//var_dump($info);
		//echo "</pre>

";

		//输出文件
		echo SITE_URL.ltrim($file_path.$file_name,'.');
	}


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

返回上传php文件的路径:

http://www.example.com/data/uploads/2013/0411/11/1.php

很多人问修复方法,这里给个临时的吧:

//这断代码加到205后面 现写的代码 没测试 有问题联系我
$allow_exts= array('jpg','gif','png','jpeg','bmp');//对上传文件类型进行过滤。
		$pt=strrpos($file_name , ".");  
		if ($pt) $ext=substr($file_name, $pt+1, strlen($file_name) - $pt);
		if(!in_array(strtolower($ext),$allow_exts,true)){
			exit("不允许上传该类型文件");
}

转载请注明:Yovae Studio » ThinkSNS V3上传文件漏洞