目录

1 文件解析漏洞概述1.1 概述1.2 IIS 解析漏洞1.2.1 文件解析漏洞1.2.2 目录解析漏洞1.2.3 文件类型解析漏洞1.2.4 CGI-PHP 解析漏洞

2 实验2.1 实验目的2.2 实验环境2.2.1 实验环境一:IIS6.02.2.2 实验环境二:IIS7.0

2.3 实验一:验证IIS6.0文件解析漏洞2.4 实验二:验证IIS6.0文件夹解析漏洞2.5 实验三:验证IIS7.0下的CGI+PHP解析漏洞2.5.1 实验步骤2.5.2 防御方法一2.5.3 防御方法二

3 总结

1 文件解析漏洞概述

1.1 概述

定义:解析漏洞主要是一些特殊文件被IIS、Apache、Nginx等服务在某种情况下解释成脚本文件格式并得以执行而产生的漏洞。相关文章分布: IIS相关的文件解析漏洞参考本文; Apache相关的文件解析漏洞参考《中间件文件解析漏洞基础知识及实验——Apache》; Nginx相关的文件解析漏洞参考《中间件文件解析漏洞基础知识及实验——Nginx》。

1.2 IIS 解析漏洞

1.2.1 文件解析漏洞

定义:在iis6.0下,分号后面的不被解析,所以xx.asp;.jpg被解析为asp脚本得以执行。防御:对所上传的文件重命名后再保存,比如,所上传的xx.asp;.jpg重命名为xxxxxx.jpg再保存。

1.2.2 目录解析漏洞

定义:在网站下创建名字为.asp、.asa的文件夹,其下任何扩展名的文件都被IIS当做asp文件来解析并执行。攻击者利用该漏洞,创建文件夹并往文件夹内上传图片马,不需修改后缀名便可直接执行!目录解析漏洞格式,例如: /xx.asp/xx.jpg。适用版本:IIS 5.x/6.0。对于高版本暂未实验。

1.2.3 文件类型解析漏洞

定义:在 iis6.0 中,默认的可执行文件除了asp还包含这三种asa、cer、cdx。防御:黑白名单过滤时要全面。

1.2.4 CGI-PHP 解析漏洞

定义:该漏洞常见于IIS7.0、IIS7.5、Nginx <8.03等中间件,当浏览器采用1.jpg/.php的方式访问1.jpg文件时,jpg文件会以PHP程序执行。原因:该漏洞的产生原因与中间件无关,主要是PHP配置上CGI.fix_pathinfo参数值默认为1,将其设置为0可以避免这个漏洞。cgi.fix_pathinfo参数作用:看名字就知道是对文件路径进行“修理”。何谓“修理”?举个例子,当php遇到文件路径“/aaa.xxx/bbb.yyy/ccc.zzz”时,若“/aaa.xxx/bbb.yyy/ccc.zzz”不存在,则会去掉最后的“/ccc.zzz”,然后判断“/aaa.xxx/bbb.yyy”是否存在,若存在,则把“/aaa.xxx/bbb.yyy”当做文件“/aaa.xxx/bbb.yyy/ccc.zzz”,若“/aaa.xxx/bbb.yyy”仍不存在,则继续去掉“/bbb.yyy”,以此类推。

2 实验

2.1 实验目的

加深对IIS几种解析漏洞的理解;掌握漏洞的检验及利用方法。

2.2 实验环境

2.2.1 实验环境一:IIS6.0

由于没有找到方便直接使用的靶场环境,此处新建一个网站来作为靶场。虚拟机安装win2003系统,相关步骤参考《虚拟机及常用系统配置步骤添加链接描述》。win2003系统搭建IIS服务器,相关步骤参考《IIS之WEB服务器部署及网站发布》。按以上步骤安装后,点击开始→管理工具→Internet(信息服务IIS)。 在D盘新建目录upload,在该目录下新建txt文件,输入内容<%=time()%>,该内容为asp语句,执行后返回当前时间,并将文件名修改为time.asp作为动态网页访问。 在第4步的界面,即IIS管理器界面,先右键默认网站→停止。然后再右键网站→新建→网站→输入描述(随便写)→下一步→分配本机IP给该网站→下一步。 选择网站的默认路径,选择刚刚新建文件的文件夹→下一步→勾选全部权限→下一步。 回到IIS管理器界面,设置新建站点的属性。右键该网站→属性→选项→启用父路径。 右键服务扩展→在右侧找到 Active Server Gages →点击允许。 在真实机浏览器,输入虚拟机IP并加上文件名访问指定文件,如下。至此,实验环境搭建结束。

2.2.2 实验环境二:IIS7.0

由于没有找到方便直接使用的靶场环境,此处新建一个网站来作为靶场,并设置映像链接来处理PHP语句。在虚拟机中,安装win2008系统,步骤参考文章《虚拟机及常用系统配置步骤添加链接描述》。在win2008中,部署IIS服务器。右键计算机→管理→添加角色→下一步→如下勾选IIS服务器→下一步。 在设置角色服务时,勾选ASP相关服务,点下一步直到开始安装。 安装完成后,如下找到并停止默认网站,同样操作删除默认站点。 在D盘下新建文件夹,本实验命名为upload,新建TXT文件,输入内容');?>,并将文件重命名为1.jpg。 在IIS管理器,右键网站→添加网站→如下设置名字和路径信息→确定。 在虚拟机系统上安装phpstudy8.1,下载可前往官网,本实验将其安装在C盘下。 安装后,在小皮面板的软件管理处,安装php5.4.45版本。在C盘下phpstudy的安装目录下,可以找到该版本PHP的路径为:C:\phpstudy_pro\Extensions\php\php5.4.45nts。 为IIS服务器添加映射到PHP。打开IIS管理器,双击刚刚新建的网站,找到处理程序映射,双击。 其中第一行表示任意以php结尾的文件;第二行选择FastCgi模块;第三行是在PHP安装目录下找到响应的可执行程序,参考下一张图设置;第四行随便写点;点击确定。 双击IIS服务器,找到FastCGI配置,双击打开。 按下步骤让CGI跟随PHP配置文件而修改配置。 至此,就可以让IIS支持PHP脚本。在网站目录下新建TXT文件,输入内容为并重命名为info.php。在真实机输入win2008虚拟机IP地址并指定文件名进行访问,可以看到文件PHP代码成功执行。

2.3 实验一:验证IIS6.0文件解析漏洞

由于没有可直接利用的靶场,此处就跳过文件上传的环节,直接验证文件能否被解析。在win2003虚拟机中,复制time.asp文件(上文搭建环境时建立的文件)黏贴后重命名为time.asp;1.jpg。 在真实机浏览器,输入虚拟机IP并加上文件名访问指定文件,如下。可以看到在iis6.0下,分号后面的不被解析,所以xx.asp;.jpg被解析为asp脚本得以执行。

2.4 实验二:验证IIS6.0文件夹解析漏洞

由于没有可直接利用的靶场,此处就跳过文件上传的环节,直接验证文件能否被解析。在win2003虚拟机中,在网站根目录下新建文件夹,命名为1.asp,将time.asp文件(上文搭建环境时建立的文件)复制进去并重命名为1.jpg。 在真实机浏览器,输入虚拟机IP并加上文件名访问指定文件,如下。可以看出,当文件夹名字中含有后缀.asp时,其目录内的任何扩展名的文件都被iis当做asp文件来解析并执行(.asa同理)。因此只要攻击者可以通过该漏洞直接上传图片马,并且可以不需要改后缀名!

2.5 实验三:验证IIS7.0下的CGI+PHP解析漏洞

2.5.1 实验步骤

将info.php文件(上文搭建环境时建立的文件)复制黏贴并重命名为1.jpg。 在真实机访问该文件时,虽然该文件后缀为jpg,但是访问时只要在URL后加了/.php就能让该文件以PHP格式运行,成功执行该文件内的PHP代码。

2.5.2 防御方法一

在win2008系统中,打开IIS管理器界面,找到搭建环境时建立的映射文件。 选中该映射文件,点击右侧的编辑,点击请求限制,在限制栏下,勾选上并点击确定。

2.5.3 防御方法二

将php.ini文件中的cgi.fix_pathinfo的值设置为0,并将该行代码签名的分号去掉,保存并重启phpstudy。

3 总结

文件上传漏洞第一个条件是文件成功上传且没能过滤掉恶意代码;第二个条件是让代码执行。对于第一个条件,存在着前端JS检测绕过、服务端MIME类型绕过、服务端后缀名绕过、文件内容绕过等,其根本目的是要上传文件。对于第二个条件,当中间件为IIS时: (1)优先考虑绕过后缀名时采用恶意代码能够执行的后缀,这样文件能直接执行; (2)当IIS版本为5.x或6.x时,考虑利用文件解析漏洞、目录解析漏洞执行该文件; (3)当IIS版本为7.x时,考虑利用CGI-PHP解析漏洞来执行该文件。

查看原文