upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路

文章目录

  • 前言
  • 一、回顾上一关知识点
  • 二、靶场第四关方法一通关思路
    • 1.看源码
    • 2、点空格绕过
  • 三、靶场第四关方法二通关思路
    • 1、htaccess文件是什么
    • 2、通过上传htaccess文件进行绕过
      • 1、使用前提
      • 2、上传htaccess文件,然后再上传phpinfo的jpg文件
  • 总结


前言

此文章只用于学习和反思巩固文件上传漏洞知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!


一、回顾上一关知识点

上一关从源码分析可知,是一个黑名单的验证,将后缀名php、asp、jsp等等给禁用了。然后我们通过利用apache特性,如果服务器apache设置了可以使用php来解析php5、phtml、php3等后缀名的话,我们就可以上传这类的文件来绕过黑名单上传webshell。

二、靶场第四关方法一通关思路

1.看源码

$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 . '文件夹不存在,请手工创建!';
    }
}

同上一关相比可知,这一关黑名单增加了新成员,也把php5这种类似的后缀名给禁用了。那么我们就无法利用这个apache特性进行绕过了。但是可以发现与上一关不同的是,它上传文件后没有随机更改文件名。 $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
而且此关的源码黑名单过滤只过滤了一次,像点、空格只过滤一次。我们可以考虑点空格绕过。
现在模拟上传1.php文件的黑名单验证流程,首先是删除文件末尾的点,发现没有,然后strrchr函数 。

定义:strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。

如图所示
upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路_第1张图片
也就是从点开始查找返回到字符串结尾的所有字符。现在是验证到.php
了。然后就是防止大小写绕过,把.php所有转换为小写,然后是去除::$data,以免通过这个来绕过,最后是过滤空格再进行黑名单验证。发现.php在黑名单内,所以上传失败。

2、点空格绕过

由此我们可以找到规律它的点和空格是只验证一次,那么我们多些一些会不会有不一样的验证呢?我们知道window特性,若后缀名后面是点或者空格它是会默认过滤掉变成成正常文件的。(如图所示)
upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路_第2张图片
创建一个1.txt文件,然后再创建1.txt.和1.txt+空格的文件看看会怎么样
upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路_第3张图片
upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路_第4张图片
发现他们会覆盖,而且如果把1.txt文件修改为1.txt.文件也是会变回1.txt文件。由此可知,若我们上传的文件是1.php.的话,是不是既能绕过黑名单上传文件,上传后又能被win系统过滤掉点,从而变成1.php文件。

这里我们写1.php.上传的话,最后的点还是会被过滤掉,和刚刚1.php没什么区别。那么试试1.php. .(点加空格加点),经过一系列过滤得到的是.php.文件,能够绕过黑名单。上传发现最后在服务器的文件是1.php了,因为被win系统过滤掉点了。(如图所示)
upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路_第5张图片
upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路_第6张图片
upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路_第7张图片
发现成功解析了

三、靶场第四关方法二通关思路

1、htaccess文件是什么

htaccess文件(或者分布式配置文件),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,
即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,
以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

2、通过上传htaccess文件进行绕过

知道原理了,由于黑名单没有过滤htaccess文件后缀名,我们可以上传一个htaccess文件,让文件所在位置的目录下文件被php解析

1、使用前提

1、要在apache下的httpd.conf文件更改。
启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。
打开httpd.conf文件用文本编辑器打开后,查找

复制代码代码如下:

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

改为:

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

2、好像要特定的php环境,由于我复现失败所不清楚。

2、上传htaccess文件,然后再上传phpinfo的jpg文件

正常来说访问jpg文件地址是会成功看到phpinfo页面的。这是htaccess文件内容,让其目录下所有文件都能被php解析执行。

<IfModule >
setHandler application/x-httpd-php #
</IfModule > 

upload-labs关卡4(黑名单点空格绕过或htaccess绕过)通关思路_第8张图片
访问jpg地址就能成功看到phpinfo页面了


总结

此关是通过点加空格或者是上传htaccess文件达到绕过,两种方法但是第二种方法有局限性,得对方服务器开了这个功能才行。此文章是小白自己为了巩固文件上传漏洞而写的,大佬路过请多指教!

你可能感兴趣的:(web安全)