文件上传漏洞绕过总结

前言:

一:漏洞产生的原因

由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致攻击者能够向某个可通过web访问的目录上传恶意文件,并被脚本解析器执行,这样就可以在服务器上执行恶意脚本。
关于文件上传漏洞绕过的练习,可以通过自己搭建源码upload-labs来学习。

二:常见的文件检测方式与绕过方式

  1. 前端js检测:
    文件上传漏洞绕过总结_第1张图片绕过方式:在前端页面修改js或者删除当前js直接上传,抓包工具拦截后修改后缀名上传

  2. MIME检测:
    这里的MIME其实就是对上传文件的Content-Type进行了检测
    文件上传漏洞绕过总结_第2张图片绕过方式:在上传文件时,开启Burp抓包工具,修改Content-Type为合法上传文件类型,比如:img/gif

  3. 文件后缀名黑名单检测
    代码的意思就是将不允许上传的后缀存到一个数组中,提前上传文件的后缀,在数组中进行对比,如果存在即上传失败,如果不存在即上传的文件后缀合法。
    文件上传漏洞绕过总结_第3张图片绕过方式
    asp:asp|asa|cer|cdx|aspx|ascx|asax|asmx|cfc|cfm
    php:php|php2|php3|php4|php5|pthml|phtm|
    jsp:jsp|jspa|jspx|jsw|jsv|jspf|jtml|

    后缀名大小写绕过。
    PHP
    ASP
    Php

    利用windows特征绕过。
    shell.php.
    shell.php(空格)
    shell.php:1.jpg
    shell.php::$DATA(NTFS特性流)
    shell.php::$DATA…
    以上后缀,会被windows系统自动去掉不符合规则符号后面的内容。

  4. 将非法的后缀过滤为空
    绕过方式:后缀双写绕过,如:pphphp即可绕过。

  5. .htaccess绕过
    .htaccess是apache服务器中的一个配置文件,它负责相关目录下的网页配置,通过.htaccess文件可以帮我们实现网页301重定向(永久),自定义404错误页面,改变文件拓展名、允许/组织特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
    如果用户可以自定义上传.htaccess文件,那么在文件内容中定义"AddType application/x-httpd-php .jpg"那么当前目录下的所有.jpg后缀的文件都会以php来解析

  6. .user.ini绕过
    文件上传漏洞绕过总结_第4张图片利用方式:
    前提是所上传文件夹下有正常的php文件,随后上传.user.ini文件,内容为:auto_prepend_fifile=01.gif,上传木马,修改后缀名为01.gif访问同目录下的php文件,包含上传的木马进行解析http://www.test.com/echo.phpshell=phpinfo();

  7. 00截断绕过
    Chr(chracode)返回与指定的ASCII字符代码相对应的字符从0到31的数字表示标准的不可打印的ASCII代码,通过ASCII码得知0=null chr(0)表示字符串结束。
    而00截断常见的有%00、0x00等。
    他们都表示ASCII字符表中的保留字符chr(0)。不管表示编码有什么区别,只要能让服务器正确解析为chr(0)就行。
    原理:chr(0)表示结束,限制条件:小于php5.3.4 小于jdk1.7,magic_quoes_gpc=off

    在上传文件的时候,如果上传的路径可控,那么在路径后加入/1.php%00当文件系统读到[0x00]时,会认为文件已经结束。

    这里需要注意的是%00是添加在URL中的,所以直接添加即可。
    文件上传漏洞绕过总结_第5张图片

    0x00绕过
    这里的0x00和上面的%00绕过的原理时类似的,都是在文件系统读取到[0x00]时,会认为文件已经结束。利用方式如下:
    文件上传漏洞绕过总结_第6张图片在这里路径的位置后面添加1.php a只是一般空格的16进制为0x20,添加一个a是为了找到空格的位置,算是起到一个标记符的作用,此时通过Burp的Hex查找空格对饮的16进制位置,修改为00
    在这里插入图片描述此时点击Send,即可上传成功。

    文件上传漏洞绕过总结_第7张图片

三:对WAF的一些绕过姿势

1:安全狗绕过
绕过思路:
对文件的内容,数据,数据包进行处理。Content-Disposition: form-data; name=“upload_file”; filename=“info.php” 将form-data;修改为~form-data;

通过大小写来进行绕过:
Content-Disposition:form-data;name=“upload_file”; file=“info.php” Content-Type: application/octet-stream
将Content-Disposition修改为content-disposition。
将form-data修改为Form-data。
将Content-Type修改为content-Type。

通过删减空格来进行绕过:
Content-Disposition:form-data;name=“upload_file”; file=“info.php” Content-Type: application/octet-stream
将Content-Disposition:form-data 冒号后面增加或者减少一个空格。
将form-data;name="upload_file;分号后面增加或减少一个空格。
将Content-Type:冒号后面增加一个空格。

通过字符串拼接绕过:
Content-Disposition:form-data;name=“upload_file”; file=“info.php”
将form-data修改为f+orm-data。
将form-data修改为form-d+ata。

双文件上传绕过:

<form action="https://www.xxx.com/xxx.asp(php)" method="post" name="form1" enctype="multipart/form‐ data"> <input name="FileName1" type="FILE" size="40"> <input name="FileName2" type="FILE" class="tx1" size="40"> <input type="submit" name="Submit" value="上传"> </form> 

HTTP header 属性值绕过:
Content-Disposition:form-data;name=“upload_file”; file=“info.php”
将form-data替换为*来绕过
Content-Disposition:*;name=“upload_file”; file=“info.php”

HTTP header 属性名称绕过:
Content-Disposition: form-data; name=“image”; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png
修改为:
Content-Disposition: form-data; name=“image”; filename=“085733uykwusqcs8vw8wky.png C.php”
删除掉ontent-Type:image/jpeg只留下c,将.php加到c后面即可,但是要注意,双引号要跟着c.php

等效替换绕过:
原内容:
Content-Type: multipart/form-data; boundary=---------------------------471463142114
修改为:
Content‐Type: multipart/form‐data; boundary =‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐471463142114
bodundary后面加入空格。

2:WTS-WAF绕过:
原内容:
Content-Disposition: form-data; name=“up_picture”; filename=“xss.php”
添加回车来进行绕过。

3:百度云上传绕过
直接大小写修改文件名即可绕过。
Content-Disposition: form-data; name=“up_picture”; filename=“xss.Php”

4:360主机上传绕过
原内容:
Content-Disposition: form-data; name=“image”; filename="085733uykwusqcs8vw8wky.png"Content- Type: image/png
修改为:
将Content-Disposition修改为Content‐空格Disposition皆可绕过。

5:CONTENT-LENGTH绕过
针对这种类型的验证,我们可以通过上传一些非常短的恶意代码来绕过。上传文件的大小取决于,Web服务器上的最大 长度限制。我们可以使用不同大小的文件来fuzzing上传程序,从而计算出它的限制范围。

6:文件内容检测绕过
针对文件内容检测的绕过,一般有两种方式:
制作图片马
文件幻术头绕过,垃圾数据填充绕过,修改http请求,再之加入大量垃圾数据。

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