iwebsec-文件上传 02 文件名过滤绕过

发布时间 2023-08-19 15:07:04作者: 别打扰我摸鱼

01、题目分析

文件上传过滤类型,题目中已经告诉我们了,我们已经知道了过滤类型,但是出于学习和判断的目的,那么我们还是得判断一下文件上传过滤类型

02、文件上传

先用哥斯拉创建一个一句话木马

命名为1.php

然后尝试上传木马

image

image

依旧是被拦截,但是这次burp抓到了数据包,说明是后端过滤

image

分析数据包可以发现,不仅仅是过滤了文件名,还有可能过滤了文件类型,那我们可以先上传一个正常的图片文件,然后抓包分析下正常的数据包是什么样的

image

image

-----WebKitFormBoundaryQRZRLsAeHLY4BFQD
Content-Disposition: form-data; name="upfile"; filename="kongbai.png"
Content-Type: image/png

通过分析数据包,我们可以得出猜出有可能有三种过滤方式,第一种是针对文件名过滤,第二种是针对文件类型过滤,第三种是针对文件名和文件类型的双重过滤,我们先试试把php修改下大小写能不能绕过过滤
image

image

那就没什么好说的了,复制图片地址,哥斯拉连接,拿到webshell

image

03、源码分析

<?php 
//print_r($_FILES["upfile"]); 
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ 
$upfile=$_FILES["upfile"]; 
//获取数组里面的值 
$name=$upfile["name"];//上传文件的文件名 
$type=substr($name, strrpos($name, '.')+1);//上传文件的类型 
$size=$upfile["size"];//上传文件的大小 
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径 
//判断是否为图片 
if($type=="php"){
echo "<script>alert('不能上传php文件!')</script>";
die();
}else{
 
$error=$upfile["error"];//上传后系统返回的值 
echo "================<br/>"; 
echo "上传文件名称是:".$name."<br/>"; 
echo "上传文件类型是:".$type."<br/>"; 
echo "上传文件大小是:".$size."<br/>"; 
echo "上传后系统返回的值是:".$error."<br/>"; 
echo "上传文件的临时存放路径是:".$tmp_name."<br/>"; 

echo "开始移动上传文件<br/>"; 
//把上传的临时文件移动到up目录下面 
move_uploaded_file($tmp_name,'up/'.$name); 
$destination="up/".$name; 
echo "================<br/>"; 
echo "上传信息:<br/>"; 
if($error==0){ 
	echo "文件上传成功啦!"; 
	echo "<br>图片预览:<br>"; 
	echo "<img src=".$destination.">"; 
	//echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">"; 
	}
}
}

?>