定义:解析漏洞主要是一些特殊文件被IIS、Apache、Nginx等服务在某种情况下 解释成脚本文件格式并得以执行而产生的漏洞。
1 Apache解析漏洞
1.1 概述
(1)第一种:未知扩展名解析漏洞
Apache对文件的解析主要是从右到左开始判断并进行解析,如果判断为不能解析的类型,则继续向左进行解析,如xx.php.wer.xxxxx将被解析为PHP类型。
(2)第二种:局部配置
通过分布式配置文件.htaccess文件进行局部配置,定义不同文件名及后缀的解析方式。参考《【文件上传漏洞-06】分布式配置文件攻击实验—以upload-labs-4为例》
1.2 Apache解析漏洞实例
1.2.1 实验目的
(1)加深理解Apache的两种解析漏洞原理;
(2)掌握两种解析漏洞的检测及绕过方法。
1.2.2 实验环境
靶场:基于WAMP环境的upload-labs靶场。其中WAMP环境的部署可参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》、upload-labs靶场的搭建可参考《【环境搭建-03】基于WAMP环境的upload-labs漏洞靶场的搭建》,请务必将PHP版本设置为小于5.3.4版本。
攻击机:使用真实机浏览器。
1.2.3 实验一:验证解析顺序漏洞
(1)真实机使用浏览器访问upload-labs靶场,进入第4关。点击“显示源码”或“查看提示”可以看到部分后缀被列入黑名单,结合之前的文章中,我们可以有以下几种思路:
- 修改同类型后缀:先尝试将文件后缀名修改为同类型文件的后缀,比如将php修改为php5等,看看哪些后缀能成功执行文件代码,这样上传的文件就会在网站成功执行。
- 修改为其他类型后缀:当文件后缀修改为其他类型后,往往无法顺利执行文件内代码,需要配合.htaccess修改局部配置。
- 当中间件是Apache时,可以尝试利用其解析漏洞来绕过。当信息收集发现中间件为apache时,该方法建议优先于前两种进行测试。
(2)准备上传文件。新建一个txt文件,文件内容为<?php phpinfo(); ?>
,并将其重命名为info.php.xxx。
(3)上传info.php.xxx文件。选择info.php.xxx,点击上传,可以看到文件已经成功上传,但是由于文件内容并非图片,所以在网页上不能成功解析。
(4)右键该图片,在新标签打开,代码执行失败(打开后一片空白,暂时找不到原因)。可以看到该文件图片的存储路径为:http://172.16.1.1/upload-labs/upload/info.php.xxx
,并没有对文件名及其后缀名进行修改。
小结
- 该解析漏洞绕过的方式需要网站中间件为apache;
- 同时需要网站对上传文件名未做修改。
1.3 总结
文件上传漏洞第一个条件是文件成功上传且没能过滤掉恶意代码;第二个条件是让代码执行。
对于第一个条件,存在着前端JS检测绕过、服务端MIME类型绕过、服务端后缀名绕过、文件内容绕过等,其根本目的是要上传文件。
对于第二个条件,当中间件为Apache时:
(1)优先考虑绕过后缀名时采用恶意代码能够执行的后缀,这样文件能直接执行;
(2)其次考虑利用解析顺序漏洞执行该文件;
(3)最后才是考虑通过修改局部配置来执行。
2 IIS 解析漏洞
2.1 概述
2.1.1 文件解析漏洞
定义:在iis6.0下,分号后面的不被解析,所以xx.asp;.jpg
被解析为asp脚本得以执行。
防御:对所上传的文件重命名后再保存,比如,所上传的xx.asp;.jpg重命名为xxxxxx.jpg再保存。
2.1.2 目录解析漏洞
定义:在网站下创建名字为.asp、.asa的文件夹,其下任何扩展名的文件都被IIS当做asp文件来解析并执行。攻击者利用该漏洞,创建文件夹并往文件夹内上传图片马,不需修改后缀名便可直接执行!
目录解析漏洞格式,例如: /xx.asp/xx.jpg。
适用版本:IIS 5.x/6.0。对于高版本暂未实验。
2.1.3 文件类型解析漏洞
定义:在 iis6.0 中,默认的可执行文件除了asp还包含这三种asa、cer、cdx。
防御:黑白名单过滤时要全面。
2.1.4 CGI-PHP 解析漏洞
定义:该漏洞常见于IIS7.0、IIS7.5、Nginx <8.03等中间件+PHP环境,当浏览器采用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 IIS 解析漏洞实例
2.2.1 实验目的
加深对IIS几种解析漏洞的理解;
掌握漏洞的检验及利用方法。
2.2.2 实验环境
2.2.2.1 实验环境一:IIS6.0
(1)由于没有找到方便直接使用的靶场环境,此处新建一个网站来作为靶场。
- 虚拟机安装win2003系统,相关步骤参考《第2节 部署虚拟机及常用系统配置》
- win2003系统搭建IIS服务器,相关步骤参考《第13节 IIS之WEB服务器—用于发布网站》。
(2)