【upload-labs】pass-04 .htaccess绕过

【upload-labs】pass-04 .htaccess绕过


1、测试流程
玩法一

先尝试上传一个php文件:

image-20210318195356950

如图所示,提示此文件不允许上传。

抓包改后缀试试:

Apache解析漏洞:Apache会将不认识的后缀,如suibianxie.php.xxx.ccc、test.php.iii等从右向左解析,不认识就往左移一个,最终移到php时apache认识了就会将该文件当作php文件来解析。

image-20210318200759462

如图所示上传成功,而且文件名没有改。

用浏览器去访问该文件:

image-20210318201033654

发现被成功解析了。

这有点太轻松了,想换一种绕过方式,于是注释掉配置文件中的那两行:

image-20210318214147496

重启apache后用浏览器重新访问该文件:

image-20210318214215947

发现apache已经无法解析了,OK。


玩法二

换一种思路:

先科普一下什么是.htaccess文件

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

.htaccess文件(或者”分布式配置文件”)提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录

但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。详解

先新建一个.htaccess文件,内容如下:

<FilesMatch "qianxun.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

这个文件内容的意思是告诉apache当遇到qianxun.jpg文件时,按照php去解析。

我们再创建一个php测试文件qianxun.php:

image-20210318215450082

并将文件后缀改为jpg。

分别将.htaccess文件和qianxun.jpg文件上传:

上传qianxun.jpg上传.htaccess文件
image-20210318215754921image-20210318215937408

image-20210318220050538

如图所示,已经上传成功。

用浏览器访问qianxun.jpg:

image-20210318220147972

如图所示,qianxun.jpg被成功解析!

注意:.htaccess文件是apache默认的文件名,所以如果后台有对上传文件强制改名的机制,那么这种方法也就失效了。

2、源码分析
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".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)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name'];
                $is_upload = true;
            }
        } else {
            $msg = '此文件不允许上传!';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}
漏洞利用总结:

1、可以利用apache的解析特性,即对不认识的后缀后左移跳过尝试解析后面的后缀,此时我们可以构造qianxun.php,nnn来绕过后端检查,并使apache成功解析。

2、在后端没有对上传文件强制改名的情况下,上传一个合法后缀的木马文件,和一个精心配置的.htaccess文件,既绕过检查又使apache成功解析。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值