pass10
首先看一看pass09的代码(忽略掉小漏洞= =)
再看一下pass10的代码
发现最后用的是file_name这个变量,前面很多步骤处理的是file_ext ,只有deldot处理了file_name
deldot:删除文件末尾点,有趣的是我在php手册上没搜到??
所以我们可以上传一个文件(抓包改后缀) 1.php. .
另一种方法: 先上传1.php:.jpg ,再上传 1.php<
1.php:.jpg 这类文件在上传后,在Windows中会被保存为一个 空的 1.php 文件,然后可以再上传一个 1.php<> 或者 1.php<< 或者 其他Windows不允许的后缀,就会覆盖 前边那个空的1.php
pass11
$file_name = str_ireplace($deny_ext,"", $file_name);
这是一个替换,把黑名单中出现的后缀都替换成空的了
用双写绕过
pass12
代码:
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else{
$msg = "只允许上传.jpg|.png|.gif类型文件!";
}
}
绕过方式:%00截断
%00使用条件:PHP小于 5.3.4,打开php的配置文件php-ini,将magic_quotes_gpc设置为Off
由于程序保存文件的路径是可以通过 URL 控制的,所以,我们可以使用 00截断的方式。
强推该文
pass13
和 Pass12相比,Pass 13 只不过把路径用POST方式提交了,还是可控的。
绕过方式: 0x00截断
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
pass14-16
两个图片函数,上传图片马即可= =