01、题目分析
文件上传过滤类型,题目中已经告诉我们了,我们已经知道了过滤类型,但是出于学习和判断的目的,那么我们还是得判断一下文件上传过滤类型
02、文件上传
先用哥斯拉创建一个一句话木马
命名为1.php
然后尝试上传木马
依旧是被拦截,但是这次burp抓到了数据包,说明是后端过滤
分析数据包可以发现,不仅仅是过滤了文件名,还有可能过滤了文件类型,那我们可以先上传一个正常的图片文件,然后抓包分析下正常的数据包是什么样的
-----WebKitFormBoundaryQRZRLsAeHLY4BFQD
Content-Disposition: form-data; name="upfile"; filename="kongbai.png"
Content-Type: image/png
通过分析数据包,我们可以得出猜出有可能有三种过滤方式,第一种是针对文件名过滤,第二种是针对文件类型过滤,第三种是针对文件名和文件类型的双重过滤,我们先试试把php修改下大小写能不能绕过过滤
那就没什么好说的了,复制图片地址,哥斯拉连接,拿到webshell
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上传时间:\">";
}
}
}
?>
标签:02,文件,name,文件名,echo,过滤,iwebsec,上传
From: https://www.cnblogs.com/bdrwmy/p/17642485.html