文件上传与文件解析漏洞详解

目录

一、文件上传漏洞原理

二、文件上传漏洞的危害

常见的文件上传类型

三、文件解析漏洞原理

1、IIS5和IIS6解析漏洞

2、Apache解析漏洞

3、Nginx解析漏洞

四、一句话木马

1、危害

2、常见的一句话木马

3、上传方法

五、文件上传漏洞检测与绕过

1、客户端检测

原理

绕过

2、服务器端检测

原理

绕过

六、文件上传与文件解析漏洞的防御


一、文件上传漏洞原理

现在的Web应用通常具有文件上传功能,比如上传头像图片、简历等。只要Web应用允许上传文件,就有可能存在文件上传漏洞。

二、文件上传漏洞的危害

文件上传漏洞危害非常大,因为攻击者可以通过文件上传漏洞向目标网站上传Webshell程序(通常为简单的一句话木马),然后通过中国蚁剑、中国菜刀等工具就可以连接该Webshell程序,控制目标主机。

常见的文件上传类型

jsp、jspx、asp、asa、aspx、php、php3、php4、exe

三、文件解析漏洞原理

文件上传漏洞和解析漏洞经常结合完成攻击,尤其当服务器端使用了白名单进行过滤时。

1、IIS5和IIS6解析漏洞

在IIS6版本中,当攻击者访问http://www.test.com/bitsec.php/xxx.jpg这样的url时,服务器会默认将PHP目录下的文件解析为php文件。因此虽然文件后缀为jpg,但依然会被作为PHP执行。
在IIS5和IIS6版本中,当攻击者访问http://www.test.com/bitsec.php;.jpg这样的url时,服务器会默认不解析“;”后面的内容,因此bitsec.php;.jpg就被作为bitsec.php解析执行。

2、Apache解析漏洞

在Apache2.2版本以前,Apache解析文件的规则为从右向左开始判断解析。如果后缀名为不可识别的文件类型,就再向左判断。比如bitsec.php.owf.rar文件,因为owf和rar都不是Apache可以识别解析的,因此Apache会将其解析为bitsec.php。

3、Nginx解析漏洞

在Nginx 0.8.41到1.5.6的版本中,攻击者可以利用多种方式解析文件。攻击者正常访问http://www.test.com/image/bitsec.jpg时,会正常显示图片。但是当攻击者通过下面的方式进行访问时,就被解析为PHP文件。

http://www.test.com/image/bitsec.jpg/bitsec.php (目录解析)
http://www.test.com/image/bitsec.jpg%00.php     (截断解析)
http://www.test.com/image/bitsec.jpg%20\0.php   (截断解析)

四、一句话木马

   攻击者通过浏览器或者其他远程连接工具,连接该后端网页,得到一个命令执行环境,以达到控制目标服务器的目的。

1、危害

查看、上传、下载、修改文件,操作数据库,执行任意命令,提权,且webshell隐蔽性特别高,可以穿越防火墙等设备,访问webshell时不会留下日志文件。

2、常见的一句话木马

常见的一句话木马包括PHP、ASP、ASP.NET、JSP等语言形式。常见的代码形式包括:

PHP:     <?php @eval($_POST['test']);?>、<?php system($_GET['cmd']);?>
         //@:表示后面即使执行错误,也不报错
         //eval()函数:表示括号内的语句字符串全都当代码执行
         //$_POST['test']:表示从页面中获得test这个参数值
ASP:     <%eval request("test") %>
ASP.NET: <%@ Page Language="Jscript"%>
ASPX:    <%eval(Request.Item["test"],"unsafe");%>

3、上传方法

(1)利用00截断

因为对文件的上传路径过滤不严格,例:http://xx.xx.xx.xx/files/test.php.jpg ,通过Burp抓包将test.php后面的“.”修改为“0X00”。上传时,当文件系统读到”0X00″时,会认为文件已经结束,从而将test.php.j pg 的内容写到test.php中。

(2)构造服务器端扩展名检测上传
当浏览器将文件提交到服务器端的时候,服务器端会根据设定的黑名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合黑名单的限制,则不予上传,否则上传成功。
例:将一句话木马的文件名test.php改成test.php.xxx。首先,服务器验证文件扩展名的时候,验证的是.xxx,只要改扩展名符合服务器端黑名单规则,即可上传。另外,当在浏览器端访问该文件时,Apache如果解析不了.xxx扩展名,会向前寻找可解析的扩展名,即”.php”。一句话木马可以被解析,即可通过中国菜刀连接。

(3)绕过Content-Type检测文件类型上传
当浏览器在上传文件到服务器端的时候,服务器对上传的文件Content-Type类型进行检测,如果是白名单允许的,则可以正常上传,否则上传失效。绕过Content-Type文件类型检测,就是用Burp截取并修改数据包中文件的Content-Type类型,使其符合白名单的规则,达到上传的目的。

(4)构造图片木马,绕过文件内容监测上传shell
一般文件内容验证使用getimeagesize()函数检测,会判断文件是否一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。

五、文件上传漏洞检测与绕过

1、客户端检测

原理

客户端基于JavaScript代码进行检测,在文件未上传时,就对文件类型进行验证。

绕过

对于单纯的客户端校验来说,绕过非常简单,可以通过Burp等抓包工具来完成。攻击者先提交一个满足客户端检测的文件类型,然后通过Burp抓包后再将文件后缀修改为正确的可执行脚本后缀即可。

2、服务器端检测

原理

服务器端检测一般检测文件的MIME类型是否正确、文件扩展名是否合法、甚至可以监测文件中是否包含恶意代码。

绕过

●校验Content-Type字段(MIME校验) ——>

攻击者可以使用和绕过上述绕过客户端检测相同的方法:抓取数据包,将Content-Type字段的值修改为满足服务器要求的文件类型就可以绕过检测。

●校验文件后缀名   ——>

(1)大小写绕过

(2)使用不在黑名单但同样可以被解析的后缀,如:phtml、htaccess等

(3)利用操作系统对文件命名规则进行绕过,如:test.asp. 、test.php 、test.php:1.jpg、test.php::$DATA等文件名并不符合Windows系统的命名规则,所有Windows系统会对其进行自动截断,从而实现绕过。

六、文件上传与文件解析漏洞的防御

●文件上传目录设置为不可执行。 主要Web服务器无法解析该目录下的文件, 即使攻击者成功上传了恶意脚本文件,服务器也不会受到影响。

●把上传的文件存放在独立的存储上

●使用随机数改写文件名和文件路径。文件上传之后,攻击者需要能访问该文件,如果能够阻止攻击者对文件的访问,同样可以阻止攻击者的攻击行为。如果使用随机数改写文件和路径,将会极大的增加攻击者的成本。比如PHP中可以通过uniqid(0函数生成一个唯一的ID,随后使用MD5对文件名进行重命名,可以防护00截断攻击。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趣多多代言人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值