随着互联网的迅速发展,网络安全问题变得日益复杂,而文件解析及上传漏洞成为攻击者们频繁攻击的热点之一。本文将深入研究文件解析及上传漏洞,通过对文件上传、Web容器IIS、命令执行、Nginx文件解析漏洞以及公猫任意文件上传等方面的细致分析,揭示这些漏洞背后的本质和攻击方式。
文件上传漏洞一直是攻击者们渗透系统的首选方式。通过构造巧妙的上传文件,攻击者能够实施多种恶意行为,如上传包含恶意脚本的文件,从而实现远程代码执行。本文将深入探讨文件上传漏洞的工作原理、攻击场景,并通过实际案例为读者提供更直观的理解,帮助其更好地认识这一类型漏洞的威胁性。
在网络攻击的舞台上,Web容器扮演着至关重要的角色。特别是在Windows操作系统下,IIS作为最为常见的Web服务器,存在着多种可能的文件解析和上传漏洞。本文将详细探讨这些潜在的漏洞,揭示攻击者如何善用这些漏洞渗透系统,以帮助读者更全面地了解并防范这一类威胁。
一、文件上传
1、文件上传漏洞介绍
(1)、文件上传
文件上传是现代互联网常见的功能,允许用户上传图片、视频、及其他类型文件向用户提供的功能越多,Web受攻击的风险就越大。
(2)、文件上传漏洞
上传文件时,如果未对上传的文件进行严格的验证和过滤,就容易造成文件上传漏洞,上传脚本文件 (包括asp、aspx、 php、jsp等)恶意上传行为可能导致网站甚至整个服务器被控制。
恶意的脚本文件又被称为WebShell,WebShell具有强大的功能,如查看服务器目录、服务器中文件、执行系统命令等
2、JS检测绕过
(1)、检测原理
调用JS的selectFIle()函数,先将文件名转换为小写,然后通过substr获取文件名最后一个点号后面的后缀 (包括点号) 进行判断
(2)、绕过方法
由于后端PHP代码没有对文件做任何检测,所以只要绕过前端JS的校验就可以上传WebShell。
3、文件后缀绕过
(1)、检测原理
通过函数pathinfo()获取文件后缀,将后缀转为小写后判断是不是php.
(2)、绕过方法1
有些中间件允许解析其他文件后缀的,如在httpd.conf配置文件中配置如下代码,则能解析php、php3、phtml文件。所以上传一个后缀名为php3、phtml的文件即可
(3)、绕过方法2
结合Apache文件解析机制,从右向左开始解析文件后缀,若后缀名不可识别,则继续判断知道遇到可解析的后缀为止。
4、文件类型绕过(MIME绕过)
(1)、检测原理
判断$_FILES[“file”][“type”]是不是图片格式 (image/gif、imagejpeg、image/pjpeg) ,不是则不允许上传。 $_FILES[“file”][“type”]的值是从请求数据包中Content-Type中获取。
(2)、绕过方法
通过抓取数据请求包,上传php文件时,Content-Type值是application/octer-stream,上传jpg格式的文件时Content-Type值是image/jpeg。可修改文件类型进行绕过。
5、文件类型绕过(文件幻数检测)
(1)、检测原理
利用getimagesize0函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。
(2)、绕过方法
在脚本文件开头补充图片对应的头部值,或在图片后写入脚本代码。
6、文件截断绕过
(1)、检测原理
①、由于00代表结束符,PHP会把00后面的所有字符删除
②、截断条件: PHP版本小于5.3.4、magic_quotes_gpc 为OFF状态
(2)、绕过方法
GET方法中加入00截断
POST方法中传入%00并解码
7、文件内容绕过 (竞争条件攻击)
(1)、检测原理
一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。这里使用sleep()函数来模拟判断是否含有脚本所需要的时间
(2)、绕过方法
利用成功上传到删除文件的时间差,上传一个.php文件,在未删除之前立即访问,则会自动生成一个新php文件,新文件不会被删除
二、web容器IIS
1、常见Web容器
(1)、什么是Web容器
web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器ASP的IIS都是这样的容器。一个服务器可以有多个容器。
我们在常见web容器漏洞这部分学习中需要使用的容器如下:IIS、Apache、Nginx、 Tomcat、Jboss、 WebLogic。
(2)、名词解释
①、中间件: 提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。
②、容器: 给处于其中的应用程序组件 (ISP,PHP,ASP) 提供一个环境。使处于其中的应用程序组件直接跟容器中的环境变量接口交互,不必关注其它系统问题
③、服务器: www服务器或http服务器。提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL。向浏览器提供服务的程序。
2、IIS简介
(1)、什么是IIS
IIS是由微IIS的全称是互联网信息服务 (英语: Internet Information Services)软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS包括FTP/FTPS、NNTP、和HTTPSY HTTP、SMTP等服务。
相关词条解释
.net Framework 是基础类库,是程序运行的底层框架
ASP.Net 是 .net里用来做网站的技术集合
IIS 是架设Web服务器用来提供网页浏览服务的,属于系统环境般用ASP.Net开发软件,然后靠IIS对公网提供服务,软件的底层是.netFramework
(2)、什么是文件解析
当服务器接收到一个Http请求的时候,IIS 首先需要决定如何去处理这个请求(服务器处理一个.htm页面和一个.aspx页面肯定是不一样) 。那IIS依据什么去处理呢? 根据文件的后缀名。
服务器获取所请求的页面(也可以是文件,比如 1.jpg) 的后缀名以后接下来会在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序,那么IIS将直接把这个文件返还给客户端。
(3)、环境搭建
这里要复现的是IIS6.0文件解析漏洞
使用了windows server2003作为环境的载体
这个网站中有各个Windows版本的安装镜像: https://msdn.itellyou.cnWindows server 2003发行版本中已经内置了IIS服务
(4)、环境使用介绍
开启关闭IIS服务方法如下:
(5)、环境使用介绍
点击之后会弹出如下方框,按照如下方法选择之后即可看到自己的web目录中的文件和IIS服务的开始、停止、暂停按钮了
(6)、环境使用介绍
在这个页面中是无法编辑自己的web服务的,需要在本机中找到web目录。这个环境中的默认web目录是在C:\Inetpub\wwroot下的,在这里就可以编辑web目录,然后就可以进行我们后面的实验
3、IIS文件解析漏洞
(1)、漏洞利用
文件解析漏洞一般用于各种上传漏洞中,在文件上传的地方一般会限制用户可以上传文件的后缀名,比如php的网站如果可以上传php文件,那么就可以上传一个php木马,然后控制该服务器了,也就是我们所说的getshell了。
那么实际的漏洞环境中IIS一般是和asp搭配的, 上传的地方如果限制了.asp的后缀名,那么首先想到的应该是使用其它IIS支持的文件后缀。其实IIS解析asp脚本除了.asp后缀还有.cer和.asa
(2)、漏洞利用
如果网站将.asp、.cer、.asa这样的可以被服务端解析的后缀名全部过滤了的话,就只能通过其它的一些方法绕过了。就比如文件解析漏洞
IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式:
/test.asp/test.jpg
test.asp;jpg
(3)、利用方式1
第一种是新建一个名为“test.asp”的目录,该目录中的任何文件都被IIS当做asp程序执行 (特殊符号是“/”)
(4)、利用方式2
第二种是上传名为“test.asp;.jpg”的文件,虽然该文件真正的后缀名是“.jpg”,但由于含有特殊符号“;”,仍会被IIS当做asp程序执行。
(5)、IIS7.5文件解析漏洞
test.jpg/php
一看到URL中文件后缀是.php,便无论该文件是否存在,都直接交给php处理而php又默认开启“cgi.fix_pathinfo”,会对文件路径进行“修理”,何谓“修理”?举个例子,当php遇到文件路径“/aaa.xxx/bbb.yyy”时,若“/aaa.xxxbbb.yyy”不存在,则会去掉最后的“bbb.yyy”,然后判断“/aaa.xxx”是否存在若存在,则把“/aaa.xxx”当做文件。
若有文件test.jpg,访问时在其后加/.php,便可以让IIS把“test.jpg/.php”交给php,php“修理”文件路径“test.jpg/.php”得到“testjpg”,该文件存在,便把该文件作为php程序执行了
(6)、IIS7.5文件解析漏洞
下图所示,是在 IIS7.5+php5.3+FastCGI 下的测试情况: