在理解文件上传漏洞之前先理解什么是Web容器、IIS、文件解析。
什么是web容器?
web容器是一种做事程序,在做事器一个端口就有一个供应相应做事的程序,而这个程序便是处理从客户端发出的要求,如tomcat、apache、nginx等等。(可以理解为给编程措辞供应***

中间件:供应系统软件和运用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级运用程序之间。
容器:给处于个中的运用程序组件(ASP,JSP,PHP)供应一个环境。使处于个中的运用程序组件之间跟容器中的环境变量接口交互,不必关注其他系统问题。
做事器:www做事器或http做事器。供应web信息游览做事。它只需支持http协议、html文档格式以及url,向浏览器供应做事的程序。
什么是IIS?IIS全称是互联网信息做事,包括FTP/FTPS、NNTP、HTTP/HTTPS、SMTP等做事。
.net Framework是根本类库,是程序运行的底层框架。
IIS是架设Web做事器用来供应网页游览做事的,属于系统环境。
一样平常用ASP.NET开拓软件,然后靠IIS对公网供应做事。
什么是文件解析?
当做事器吸收到一个HTTP要求的时候,IIS首先须要决定如何去处理这个要求(做事器处理.aspx和.html肯定是不一样的),根据的是文件的后缀名。
做事器获取所要求的页面(也可以是文件)的后缀名后接下来会在做事器端探求可以处理这类后缀名的运用程序,如果IIS找不到可以处理此类文件的运用程序,那么IIS将直接把这个文件返还给客户端。
解析漏洞攻击者在利用上传漏洞时,常日会与Web容器的解析漏洞合营在一起。以是我们首先来理解一下解析漏洞,这样才能更深入地理解上传漏洞,并加以戒备。常见的Web容器有ⅡS、Apache、Nginx、Tomcat等,下面紧张讲IIS、Apache容器。
IIS解析漏洞
IIS 6.0在解析文件时存在以下两个解析漏洞。
当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当做asp文件来解析。例如:建立文件夹parsing.asp,在parsing.asp文件夹内新建一个文本文档test.txt,其内容为<%=NOW()%>,然后在浏览器内访问。“NOWO”是ASP供应获取当前韶光的函数,TXT是文本文档格式,IIS是不会去解析此类文件的,该当会直接显示其内容,而在parsing.asp文件夹中,却被当作ASP脚本来解析。当文件为.asp;1.jpg时,IIS6.0同样会以ASP脚本来实行,如:新建文件test.asp;1.jpg,内容为<%=NOW()%>。Apache解析漏洞
Apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断,如xxx.php.owf.rar ,”.owf”和”.rar”这两种后缀是apache解析不了的,apache就会把xxx.php.owf.rar解析成php。
怎么去判断是不是合法的后缀便是这个漏洞利用关键,测试时把常见的后缀都写上,去测试是不是合法,任意不识别的后缀,逐级向上识别。
有些程序开拓职员在上传文件时,判断文件名是否是PHP、ASP、ASPX、ASA、CER、ASPX等脚本扩展名,如果是,则不许可上传,这时攻击者就有可能上传1.php.rar等扩展名来绕过程序检测,并合营解析漏洞,获取到WebShell。
绕过上传漏洞绕过上传漏洞分以下两种。
客户端检测:客户端利用JavaScript检测,在文件未上传时,就对文件进行验证;
做事器端检测:做事端脚本一样平常会检测文件的MIME类型,检测文件扩展名是否合法,乃至有些程序员检测文件中是否嵌入恶意代码。
在研究上传漏洞之前,首先来看两个小工具:中国菜刀和一句话图片木马。“中国菜刀”这款软件是用来管理网站文件的,非常小巧灵巧,它仅仅须要一段简短的代码就可以方便地管理网站。中国菜刀现在已经成为安全研究者手中必备的利器,其官方网站为:http://www.maicaidao.com。
该软件供应的做事器端文件仅有一行代码。目前支持的做事器端脚本包括:PHP、ASP、ASP.NET、JSP等,并且支持HTTPS安全连接的网站。常见的代码如下:
Asp一句话:<%eval request(“xxx”)%>Php 一句话:<%php @eval($_POST[xxx]);?>Aspx一句话:<%@ Page Languag=”xxx”%><%eval(Request.Item[“xxx”])%>
正由于代码短小精悍,以是被黑客称为一句话木马(一句话后门)。将<?php @eval(S_POST['xxx']);?>保存为shell.php,上传至PHP主机空间中,配置菜刀进行连接,如图所示。
“图片一句话”则是将一句话木马插入在图片文件中,而且并不破坏图片文件,这一方法可以躲过少许的防火墙检测。制作图片一句话木马的方法非常多,目前已经有安全研究职员设计出了专业的制作软件:Edjpgcom。Edjpgcom的利用方法非常大略:把一张正常的图片拖到Edjpgcom.exe程序中,填写相应的一句话代码,就可以制作图片一句话木马。在插入一句话木马之后,以文本的办法打开图片,就可以看到一句话木马代码就在里面,而且不影响图片正常预览。还有将一句话木马与正常图片通过CMD命令结合起来。
注:如果直接以文本的办法打开图片插入一句话,可能会造成文件破坏。
知道了程序员是如何防护上传漏洞及一句话图片木马后,下面深入研究攻击者是如何绕过程序员的防护思维来上传一句话木马文件的。
客户端检测
利用FileBug浏览器插件
FireBug是一款开源的浏览器插件,它支持Firefox、Chrome等浏览器。它可以让Web开拓者轻松地调试HTML、JavaScript、AJAX、CSS等前端脚本代码,属于Web开拓职员的必备武器。正由于FireBug功能强大,以是也被黑客认为是必备利器。
中间人攻击
中间人攻击这种办法与FireBug完备不同,FireBug是删除客户真个JavaScript验证,而利用Burp Suite则是按照正常的流程通过JavaScript验证,然后在传输中的HTTP层做手脚。首先把木马文件扩展名改为一张正常图片的扩展名,比如JPG扩展名,在上传时利用Burp Suite拦截上传数据,再将个中的扩展名JPG修正为PHP,就可以绕过客户端验。
做事器端检测
白名单与黑名单验证
(1)黑名单过滤办法黑名单过滤是一种不屈安的办法,黑名单定义了一系列不屈安的扩展名,做事器端在吸收文件后,与黑名单扩展名比拟,如果创造文件扩展名与黑名单里的扩展名匹配,则认为文件不合法。
(2)白名单过滤办法白名单的过滤办法与黑名单正好相反,黑名单是定义不许可上传的文件扩展名,而白名单则是定义许可上传的扩展名,白名单拥有比黑名单更好的防御机制。如:$WhiteList=array(rar’,jpg’,png,bmpy,gif,jpg;doc);在获取到文件扩展名后对 WhiteList数组里的扩展名迭代判断,如果文件扩展名被命中,程序将认为文件是合法的,否则不许可上传。
MIME验证
MIME类型用来设定某种扩展名文件的打开办法,当具有该扩展名的文件被访问时,浏览器会自动利用指定的运用程序来打开。如GIF图片MIME为image/gif,CSS文件MIME类型为text/ess。
目录验证
在文件上传时,程序常日许可用户将文件放到指定的目录中,然而有些Web开拓职员为了让代码更“健壮”,常日会做一个操作,如果指定的目录存在,就将文件写入目录中,不存在则先建立目录,然后写入。
截断上传攻击
文件名后缀有一个%00字节,可以截断某些函数对文件名的判断。在许多措辞函 数中,处理字符串的函数中0x00被认为是终止符
例如: 网站上传函数处理xxx.asp%00.jpg时,首先后缀名是合法的jpg格式,可以 上传,在保存文件时,碰着%00字符丢弃后面的 .jpg,文件后缀终极保存的后缀 名为xxx.asp
文件上传漏洞防御首先,上传的文件能够被Web容器阐明实行。以是文件上传后所在的目录假如Web容器所覆盖到的路径。 其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器阐明这个脚本,那么也不能称之为漏洞。 末了,用户上传的文件若被安全检讨、格式化、图片压缩等功能改变了内容,则也可能导致攻击不堪利。戒备文件上传漏洞常见的几种方法:
1.文件上传的目录设置为不可实行只要web容器无法解析该目录下面的文件,纵然攻击者上传了脚本文件,做事器本身也不会受到影响,因此这一点至关主要。
2.判断文件类型在判断文件类型时,可以结合利用MIME Type、后缀检讨等办法。在文件类型检讨中,强烈推举白名单办法,黑名单的办法已经无数次被证明是不可靠的。此外,对付图片的处理,可以利用压缩函数或者resize函数,在处理图片的同时毁坏图片中可能包含的HTML代码。
3.利用随机数改写文件名和文件路径文件上传如果要实行代码,则须要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果运用了随机数改写了文件名和路径,将极大地增加攻击的本钱。再来便是像shell.php.rar.rar和crossdomain.xml这种文件,都将由于重命名而无法攻击。
4.单独设置文件做事器的域名由于浏览器同源策略的关系,一系列客户端攻击将失落效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到办理。
5.限定上传文件大小限定上传文件的大小,防止由于内存、磁盘耗尽造成的谢绝做事。可以配置web server许可的最大Post大小。可以在代码层面获取上传文件的大小,根据文件类型的不同进行进一步的过滤。
6.确保上传文件被访问精确返回1.将文件上传目录设置为静态资源目录,防止被解析为脚本实行。2.利用代理页面隐蔽文件真实路径。3.利用上述方法时,确保Content-Type与实际文件类型同等。4.如果文件不许可在页面展示,仅许可下载,请设置Content-disposition:attachment。
备注:
这篇文章摘抄来自网络。我打算总结一些列架构师须要的精良文章,由于自己写会花太多韶光,我决定做一个搬运工,为大家筛选精良的文章,末了我会做成索引方便大家查找。