Apache 漏洞之后缀名解析漏洞

本文介绍Apache服务器中一种类似于Windows2003+IIS6.0目录解析漏洞的现象,即特定格式的文件名会导致服务器错误地解析文件为PHP、CGI或JSP等类型。文章通过实验展示了如何利用这一漏洞,并提供了相应的防御措施。


我们都知道windows2003 + IIS6.0下,如果目录结构中有xxx.asp这样的目录,那么所有这个目录下的文件不管扩展名为什么,都会当作asp来解析。我们一般称这个漏洞为windows2003+iis6.0目录解析漏洞。但是大家可能不知道的是,apache服务器也存在类似的解析漏洞
我们来做下实验,我在本地搭建好了一个apache+php的测试平台

两个文件phpinfo.php  phpinfo.php.a ,我们来访问下phpinfo.php.a
http://192.168.99.110/phpinfo.php.a
 

可以解析,换成其他后缀仍然可以
不管文件最后后缀为什么,只要是.php.*结尾,就会被Apache服务器解析成php文件,问题是apache如果在mime.types文件里面没有定义的扩展名在诸如x1.x2.x3的情况下,最后一个x3的没有定义,他会给解析成倒数第二个的x2的定义的扩展名。所以xxx.php.rar或者xxx.php.111这些默认没在mime.types文件定义的都会解析成php的。同样如果是cgi或者jsp也一样。。。
那么如果涉及到web程序的上传页面,如果上传的文件名是我们可以定义的,那么我们完全可以上传一个xxx.php.jpg这样名字的webshell,apache仍然会当作php来解析,我们再来测试下jpg

防御方法:
apache配置文件,禁止.php.这样的文件执行,配置文件里面加入
<Files ~ "/.(php.|php3.)">
        Order Allow,Deny
        Deny from all
</Files>

保存,从起apache以后,我们再来看看

OK,防御方法就是这样

 

<think>我们正在处理用户关于Apache HTTPD多后缀名解析漏洞的查询。根据用户的要求,我们需要提供漏洞的详情、可能的利用方式以及修复方法。同时,我们需要参考提供的引用内容,并确保回答结构清晰、可靠。 根据引用[1]和引用[2]: - 漏洞原因:Apache HTTPD服务器解析文件时,允许一个文件有多个后缀(以点分割)。它会从最右边开始识别后缀名,如果遇到无法识别的后缀,则向左继续识别。如果配置中使用了`AddHandler`指令(例如`AddHandler application/x-httpd-php .php`)来处理PHP文件,那么只要文件名中包含`.php`后缀(即使它并不是最后一个后缀),该文件就会被当作PHP文件解析。 - 漏洞影响:攻击者可以上传一个看似非PHP的文件(例如`filename.php.jpg`),但由于其中包含`.php`后缀,Apache会将其作为PHP文件解析并执行其中的恶意代码。 - 漏洞与版本无关,属于配置不当导致。 修复方法: 1. 修改配置,避免使用`AddHandler`指令,而是使用`FilesMatch`指令来精确匹配文件类型。例如: ```apache <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> ``` 这样配置后,只有以`.php`结尾的文件才会被当作PHP文件解析。 2. 禁止上传目录执行脚本:在文件上传目录的配置中,移除PHP处理程序,确保上传目录下的文件不会被当作脚本执行。例如: ```apache <Directory "/var/www/upload"> php_flag engine off # 或者对于Apache 2.4,可以使用: # SetHandler None </Directory> ``` 3. 清理文件后缀:在应用程序中,对上传的文件名进行严格检查,确保只有一个后缀且是允许的类型。 4. 使用`mod_rewrite`阻止恶意请求:可以添加规则来阻止包含多个后缀的请求,特别是包含`.php`的请求。 5. 确保其他后缀不被错误解析:检查服务器配置,确保没有其他非必要后缀被配置为可执行脚本。 相关问题: 1. 如何验证Apache服务器是否存在多后缀解析漏洞? 2. 除了多后缀解析漏洞Apache HTTPD还有哪些常见的安全漏洞? 3. 如何配置Apache服务器以提高文件上传功能的安全性? 4. 在Nginx服务器中,是否也存在类似的多后缀解析漏洞?如何防范?</think>### Apache HTTPD 多后缀名解析漏洞详情 #### 漏洞原理 Apache HTTPD 在处理文件时存在一个特性:**允许单个文件拥有多个后缀名**(如 `file.php.jpg`)。解析规则如下: 1. 从**最右侧后缀开始识别**(如 `.jpg`) 2. 若无法识别则**向左依次检测**后缀名 3. 遇到可识别的后缀(如 `.php`)时,**直接按该类型解析文件**[^1][^2] **关键触发条件**: ```apache # 危险配置示例(漏洞根源) AddHandler application/x-httpd-php .php ``` 当存在此配置时,上传 `malicious.php.jpg` 文件会被解析PHP 脚本执行,因为服务器识别到 `.php` 后缀[^1]。 #### 漏洞利用方式 1. **文件上传绕过** - 攻击者上传伪装文件:`shell.php.jpg` 或 `shell.php.123` - Apache 解析时识别 `.php` 后缀,执行其中的恶意代码 - 经典攻击载荷: ```php <?php system($_GET['cmd']); ?> ``` 2. **结合其他漏洞** - 配合文件上传功能缺陷,突破白名单限制 - 通过路径拼接触发解析(如 `/uploads/user_avatar.php.jpg`) #### 修复方法 1. **修改 Apache 配置**(根本解决方案) ```apache # 替换危险的 AddHandler 指令 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> ``` 此配置**严格匹配以 `.php` 结尾的文件**,忽略多后缀情况[^1]。 2. **限制上传目录执行权限** ```apache <Directory "/var/www/uploads"> # 禁止执行脚本 php_flag engine off Options -ExecCGI </Directory> ``` 3. **应用程序层防护** - 文件上传时**重命名文件**(如生成随机文件名) - 检查文件内容而非依赖后缀名 - 使用 MIME 类型检测(如 `finfo_file()`) 4. **补充方案** - 升级到 Apache 2.4.26+ 并启用 `AllowOverride None` - 使用 WAF 规则拦截异常后缀组合(如 `.php.`) > **注意**:该漏洞Apache/PHP 版本无关,纯属配置问题[^1]。修复后需测试 `test.php.jpg` 是否返回源码而非执行。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值