文件上传处理姿势

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
上传文件操作本身是没有问题的,关键在于文件上传到服务器后,服务器会如何处理和解释此文件。
  • 1、JS检查绕过
    网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。
    绕过方法:
    (1)直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可
    (2)先将文件重命名为js允许的后缀名,在用burp发送数据包时候改成我们想要的后缀。

  • 2、黑名单处理绕过
    如:不允许上传.asp,.aspx,.php,.jsp后缀文件
    绕过方法:
    (1)如果检测的时候不忽略大小写,可以通过大小写字符绕过 如.php->.PhP .htaccess->.HTACCESS
    (2)blacklist中如果忽略了某些后缀,可通过解析特殊后缀进行绕过。

     //如:jsp jspx jspf
         asp asa cer aspx
         php php php3 php4 pht
  • 3、上传.htaccess
    .htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
//当许多特殊后缀等都被列入黑名单时,但是没有限制.htaccess
$blacklist = 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");

可以上传一个.htaccess文件,内容为:
SetHandler application/x-httpd-php
这样所有的文件都会解析为php,接下来上传图片马即可

  • 4、点绕过
    windows会对文件中的点进行自动去除,所以可以在文件末尾加点绕过

  • 5、::$DATA绕过
    同windows特性,可在后缀名中加” ::$DATA”绕过

  • 6、双写绕过

    $blacklist = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = str_ireplace($blacklist,"", $file_name);

可以看到将文件名替换为空,我们可以采用双写绕过:例如:11.phphpp

  • 7、MIME检查绕过
//这里检查Content-type,只允许通过image/jpeg、image/png、image/gif类型
    if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) 

可以通过burp抓包修改为该白名单内类型即可绕过

  • 8、后缀白名单检测绕过:
    常见的绕过方法有%00截断,服务器的解析漏洞
    (1)%00截断漏洞:如果存在这类漏洞,那么后缀名的检测都可以绕过,此时我们可以如下命名一个上传文件
    如:
    test.php%00.jpg
    路径/upload/1.php(0x00),文件名1.jpg,结合/upload/1.php(0x00)/1.jpg
(2)服务器的解析漏洞

详情可以参考链接:https://www.secpulse.com/archives/95987.html

  • 9、文件内容检查
    (1)文件幻数(文件头)检测绕过
    在木马内容的前面插入对应的文件头内容,例如:GIF89a ,更保险的方法是在可上传的文件中插入木马代码,然后修改后缀
    比如图片类型的文件幻数如下,
    要绕过jpg 文件幻数检测就要在文件开头写上下图的值:
    Value = FF D8 FF E0 00 10 4A 46 49 46

要绕过gif 文件幻数检测就要在文件开头写上下图的值:
Value = 47 49 46 38 39 61

要绕过png 文件幻数检测就要在文件开头写上下面的值:
Value = 89 50 4E 47

然后在文件幻数后面加上自己的一句话木马代码就行了
(2)文件相关信息检测
图像文件相关信息检测常用的就是getimagesize()函数

只需要把文件头部分伪造好就ok 了,就是在幻数的基础上还加了一些文件信息

有点像下面的结构

GIF89a
(...some binary data for image...)

(... skipping the rest of binary data ...)

本次环境中的文件头检测,getimagesize,php_exif都可以用图片马绕过:
copy normal.jpg /b + shell.php /a webshell.jpg

参考链接:https://www.jianshu.com/p/74ca4e884645

posted @ 2021-04-26 10:25  努力的菜鸟Fang  阅读(315)  评论(0编辑  收藏  举报