upload-labs pass-03
Pass-03
先看一下源码(黑名单绕过-特殊后缀):
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array('.asp','.aspx','.php','.jsp');
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
if(!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file,$img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
strrchr()查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
1.上传402.php。
<?php
phpinfo();
?>
提示,文件类型不正确,如下图所示:
2、修改文件后缀为:402.phtml。
3.上传成功,成功后,右击图片,查看我们的上传点,上传点为:http://127.0.0.1/upload/upload/202106220623415649.phtml
注意:
如果我们上传成功了,但是却不能解析,要正常解析还需要满足以下条件任意一种:
(1)Apache的 httpd.conf 中有如下配置代码:(其中包含你上传的文件后缀)
AddType application/x-httpd-php .php .phtml .phps .php5 .pht
(2)上传 .htaccess 伪静态文件,内容如下:
用伪静态需要保证:①mod_rewrite模块开启;②目录设置是AllowOverride All;
<FilesMatch "phpinfo.php5">
SetHandler application/x-httpd-php
</FilesMatch>