web安全文件上传JS&后缀黑白名单&格式检测

Posted Nu1LL+

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全文件上传JS&后缀黑白名单&格式检测相关的知识,希望对你有一定的参考价值。

一、upload-labs环境搭建

参考:https://blog.csdn.net/Fly_hps/article/details/99571483
在这里插入图片描述
upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共21关,每一关都包含着不同上传方式。

过滤验证客户端及服务端差异:
文件上传最终的目的就是上传一句话木马达到控制网站,这里文件上传有的过滤形式有客户端过滤、服务端过滤,客户端过滤是一种基于本地浏览器的验证,运行的是javascript代码,这里的客户端验证在自身的浏览器层面进行验证并没有发送给目标服务器,服务端验证就好比在服务器上运行的php代码,通过php代码来对其进行验证过滤。

如何判断客户端及服务端
1.通过源代码判断
2.基于数据包相应的时间判断

二、后缀客户端验证-Js禁用&Burp本地改包提交

首先来到Psss-01,任意上传一句话木马,发现弹出提示是php的文件类型不允许上传
在这里插入图片描述

F12,发现了一段JS验证上传文件的代码
在这里插入图片描述
方法一、通过Js禁用
在这里插入图片描述
在这里插入图片描述
把js代码禁用后直接上传成功

方法二、Burp改包

先把一句话木马的后缀改成jpg,如果是直接php抓包的话,js会对其验证为php则不会把数据包发送给服务器
在这里插入图片描述
最后再把jpg改回php发送给服务器,上传成功

二、后缀黑名单验证-大小写&加空格&符号点&::$DATA

黑名单验证:
先定义黑名单不能上传比如php php2 phtmlo php3 这些,在上传的时候验证上传的后缀名是否在这个黑名单里,在的话一律不让上传。

Pass-06大小写绕过
黑名单验证,我们看一下他的服务端源代码设置那些黑名单
在这里插入图片描述

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".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",".htaccess",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $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 . '文件夹不存在,请手工创建!';
    }
}

黑名单里过滤了很多后缀,但发现没有过滤全大写PHP
在这里插入图片描述
在这里插入图片描述
上传成功

Pass-07系统特性空格绕过
在windows、Linux下在文件后缀加上空格它会自己进行删除,我们可以看到这里源码没有对空格进行过滤,只对大小写就行过滤
在这里插入图片描述
在这里插入图片描述
上传成功,这里上传的是2.PHP空格并不在黑名单里

Pass-08系统特性符号点绕过
符号点绕过和空格绕过差不多,在windows下在文件后缀加上它会自己进行一个删除,再看源代码它对空格进行首尾去空,但是并没有对进行过滤
在这里插入图片描述

在这里插入图片描述
上传成功,这里上传的是2.PHP并不在黑名单里

Pass-09系统特性::$DATA绕过

在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名,再看源代码过滤了,没对::$DATA进行过滤
在这里插入图片描述
在这里插入图片描述
文件上传成功,上传到服务器的文件在Windows中会自动去掉::$DATA

Pass-10组合空格和点绕过
我们直接来看源代码发现之前的一些绕过方式都修复了,修复了点、空格、大小写、::$DATA这些绕过方式
在这里插入图片描述
但是发现这里只对文件过滤进行一次,并不循环,比如过滤一次php把php去空,那么上传1.pphphp就只剩下1.php,假如我们上传php. . 在过滤里面就先去掉末尾的点,再去掉首位空格就变成4.php. 最后就演变成为了点绕过

在这里插入图片描述
上传成功,这里最终上传的是4.php并不在黑名单里

三、后缀白名单验证-MIME修改&%00截断&0x00截断

白名单验证:
先定义只能上传jpg、png、gif,在上传的时候验证上传的后缀名是否在这个白名单里,不在的话一律不让上传。从黑名单和白名单的过滤机制来看,明显白名单的过滤机制会好一点

Pass-2 MIME绕过
服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的。查看源码发现只需要抓包改一下改成image/jpeg就行了

在这里插入图片描述

在这里插入图片描述
成功绕过

Pass-13 %00截断
由于系统特性如1.jpg.php 或者 1.gif.php 它会默认的指向最后一个格式为文件类型,那么%00截断就是绕过后缀的指定,达到想要传的格式类型,比如 1.php%00.jpg,把%00解码,就变成了1.php jpg,终于上传的就是1.php

%00截断的条件

php版本必须小于5.3.4 
打开php的配置文件php-ini,将magic_quotes_gpc设置为Off

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
成功绕过

Pass-12 0x00截断
0x00截断和%00截断差不多,0x00是字符串的结束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
在这里插入图片描述

在这里插入图片描述
成功绕过,这个与%00的区别就是不需要解码,因为0x00在url地址里面它会自动解码,而%00在数据包里面就需要自己解码

CVE-2015-2348漏洞详情:http://bobao.360.cn/news/detail/1383.html

三、后缀变异性验证-Finecms任意文件上传-验证MIME

先拿到源码审计Finecms,直接全局搜索上传错误
在这里插入图片描述

来到文件上传漏洞代码处
在这里插入图片描述
这里前面创建了图片存储文件夹,然后接受一个post传递的变量tx,然后将+替换成空格替换的是变量tx,然后就是一些正则过滤,这里正则认为图片type:image/jpeg、png、gif,前面匹配image,后门匹配任意字符,这样就造成了MIME绕过,只需把后门改成php就变成了php文件类型

我们先实践一下
在这里插入图片描述
找到上传图片处上传图片马,然后记得抓包保存
在这里插入图片描述
在这里插入图片描述
在漏洞源码处多加一句 echo $new_file;
在这里插入图片描述
在这里插入图片描述
把这里原来的jpeg改成php就能成功解析
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
成功解析了图片马

在这里插入图片描述

以上是关于web安全文件上传JS&后缀黑白名单&格式检测的主要内容,如果未能解决你的问题,请参考以下文章

C站最全Web安全-文件上传绕过思路拓展(附知识脑图,快收藏!)

从零开始学安全(二十九)●上传漏洞代码分析

WEB安全之文件上传--白名单绕过%00截断

shell上传绕过检测方法

上网行为管理有多少功能啊 ?

文件上传漏洞代码