01、题目分析
正常来讲应该先判断文件上传过滤是前端验证还是后端验证,但是这个地方因为是靶场,所以直接告诉你了是什么类型,因此就不用进行判断了,这里是.htaccess文件绕过,htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义 404 错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能,因此我们可以通过修改这个文件内容来实现改变文件拓展名功能
02、文件上传
我们先在主机上新建一个文件,写入以下内容:
<FilesMatch "\.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
然后保存,命名为.htaccess,然后上传,再然后把1.php的一句话木马改名为1.jpg,然后上传即可得到webshell
03、源码分析
<?php
header("Content-type: text/html;charset=utf-8"); // 设置响应头的内容类型和字符集为 UTF-8
error_reporting(0); // 关闭所有错误和警告的显示
// 设置上传目录
define("UPLOAD_PATH", dirname(__FILE__) . "/upload/"); // 定义上传文件的存储目录
define("UPLOAD_URL_PATH", str_replace($_SERVER['DOCUMENT_ROOT'], "", UPLOAD_PATH)); // 定义上传文件的访问 URL
if (!file_exists(UPLOAD_PATH)) {
mkdir(UPLOAD_PATH, 0755); // 如果上传目录不存在,则创建它,并设置权限为 0755
}
$is_upload = false; // 初始化变量,用于表示文件是否上传成功
if (!empty($_POST['submit'])) { // 检查是否提交了名为 'submit' 的表单字段
$name = basename($_FILES['file']['name']); // 获取上传文件的原始文件名,并使用 basename 函数去除路径信息
$ext = pathinfo($name)['extension']; // 使用 pathinfo 函数获取上传文件的扩展名
$blacklist = array("php", "php7", "php5", "php4", "php3", "phtml", "pht", "jsp", "jspa", "jspx", "jsw", "jsv", "jspf", "jtml", "asp", "aspx", "asa", "asax", "ascx", "ashx", "asmx", "cer", "swf"); // 定义不允许上传的文件扩展名列表
if (!in_array($ext, $blacklist)) { // 检查上传文件的扩展名是否在黑名单中
if (move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_PATH . $name)) { // 将上传的临时文件移动到指定的上传目录
$is_upload = true; // 文件上传成功
} else {
echo "<script>error();</script>"; // 文件移动失败,输出错误提示
}
} else {
echo "<script>black();</script>"; // 文件扩展名在黑名单中,输出黑名单提示
}
}
?>
标签:文件,php,05,htaccess,iwebsec,上传
From: https://www.cnblogs.com/bdrwmy/p/17642524.html