【文件上传漏洞-07】中间件文件解析漏洞概述及实例——Apache、IIS和Nginx

本文详细探讨了Apache的未知扩展名解析漏洞、IIS的文件和目录解析漏洞、CGI-PHP漏洞,以及Nginx的空字节、文件名逻辑和CGI-PHP解析漏洞。通过实例演示和防御措施,帮助读者理解这些漏洞原理并提升安全防范能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


定义:解析漏洞主要是一些特殊文件被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还包含这三种asacercdx

防御:黑白名单过滤时要全面。

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)由于没有找到方便直接使用的靶场环境,此处新建一个网站来作为靶场。

(2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值