1.压缩包文件无递归删除
$file = $_FILES['file']; #检查文件是否为空文件
if (!$file) {exit("请勿上传空文件");
}
$name = $file['name'];
$dir = 'upload/';
$ext = strtolower(substr(strrchr($name, '.'), 1));function check_dir($dir) #检查文件格式
{$handle = opendir($dir);while (($f = readdir($handle)) !== false) {if (!in_array($f, array('.', '..'))) {$ext = strtolower(substr(strrchr($f, '.'), 1)); #将文件后缀名分割出来if (!in_array($ext, array('jpg', 'gif', 'png'))) { #检查文件格式 unlink($dir . $f); }}}
}
// mkdir($dir);
if (!is_dir($dir)) { #创建文件夹储存上传的文件mkdir($dir);
}$temp_dir = $dir . 'member/1/';
if (!is_dir($temp_dir)) {mkdir($temp_dir);
}if ($archive->extract(PCLZIP_OPT_PATH, $temp_dir, PCLZIP_OPT_REPLACE_NEWER) == 0) {check_dir($dir);exit("解压失败");}check_dir($temp_dir);exit('上传成功!');} else {move_uploaded_file($file['tmp_name'], $temp_dir . '/' . $file['name']);check_dir($temp_dir);exit('上传成功!');}
} else {exit('仅允许上传zip、jpg、gif、png文件!');
}
分析:当程序不递归删除时,我们直接将图片和.php文件压缩上传,会发现图片还在,.php文件被删除了
可以看到我们的php文件已经被删除了
方法:我们发现它只是删除了压缩包里面的文件,但这段代码并不会对解压后的文件夹递归删除,只能对解压的文件直接删除
我们创建一个文件夹,放入以下文件,然后将这个文件经行压缩
此时,我们再将其上传,可以看到,我们的PHP文件就被保留下来了
2.压缩包文件出现递归删除(时间竞争)
我们通过软件burp suite 抓包,修改一个变量,不停的发包,我们可以手动或者让软件不停的访问我们呢上传的PHP,如果显示出PHP内容,时间竞争成功
开启代理,选择上传的压缩包,
将抓包打开
设置一个变量
设置发送的次数
然后手动不停的访问
3.