文件上传漏洞-通过.htaccess文件绕过
1.原理:
.htaccess
文件是 Apache Web服务器中用于配置目录级别指令的配置文件。通过这个文件,网站管理员可以进行各种配置,例如重定向、访问控制、URL重写等。然而,在某些情况下,恶意用户可能会尝试利用 .htaccess
文件中的配置来绕过安全限制。优先级较高,一般是修改后立刻生效。
2.这里以upload-labs(less-4)为例,我们先来看看靶场的源代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
$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.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '此文件不允许上传!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
可以知道这里把我们上一篇文章的等价文件名基本都加入到了黑名单里,这时候我们就可以先上传一个 .htaccess,因为他没有在黑马单里可以随便上传,代码如下,解析:
AddType
是一个指令,用于告诉 Apache 如何处理特定扩展名的文件。application/x-httped-php
是要指定的 MIME 类型,表示这些文件将使用 PHP解析。.txt
和.jpg
是要应用此 MIME 类型的文件扩展名。
这条指令的作用是告诉 Apache服务器,将所有以 .txt
和 .jpg
结尾的文件都当作 PHP 脚本来处理,而不是作为普通文本文件或图像文件。这意味着,即使它们有文本或影像文件的扩展名,服务器将尝试执行其中的 PHP代码。
AddType application/x-httped-php .txt .jpg
3.先将.htaccess上传上去,然后再打开抓包上传木马文件(1.php),然后将名字修改成1.jpg,因为刚刚的.htaccess已经上传到服务器,告诉服务器.jpg文件可以当作.php文件执行
上传成功接下来用蚁剑链接即可