Apache解析漏洞详解

很多次听到人说apache的“解析漏洞”了,正好今天又有人问,那就简单科普一下这个“解析漏洞”是何物。

先来看测试过程和结果的对比吧。

结果一

首先,我安装了apache 2.x版本,同时以module方式使apache与php结合,测试发现确实存在这样的解析漏洞。

 

 

结果二

然后,我将apache与php的结合方式修改为fastcgi方式,测试发现爆500错误,不存在这样的解析漏洞。

 

 

错误提示:

1Bad file descriptor: mod_fcgid: don’t know how to spawn child process: f4ck.php.x

意思就是不知道该如何解析这个文件。

结果出来了,那么对于影响范围这块,在目前所有的apache版本中均存在此问题,但只适用于以module方式解析php的apache,使用fastcgi方式解析php的apache不受影响,使用cgi方式解析php的apache是否影响未测试。

下面来简单分享一下测试过程中我发现的一点经验。

先来看一下apache的主配置文件httpd.conf,搜索“DefaultType”,就可以看到这么一段注释和默认配置:

#
# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value. If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#10DefaultType text/plain

DefaultType存在的意义是告诉apache该如何处理未知扩展名的文件,比如f4ck.xxx这样的文件,扩展名是xxx,这肯定不是一个正常的网页或脚本文件,这个参数就是告诉apache该怎么处理这种未知扩展名的文件。

参数DefaultType的默认值是“text/plain”,也就是遇到未知扩展名的文件,就把它当作普通的txt文本或html文件来处理。

测试一

比如我将以下代码保存为f4ck.xxx:

1F4ckTeam apache test

访问它,按照默认的apache配置,这个文件是会被浏览器显示出来具体效果的:

 

 

这是对于文件内容为HTML代码的未知扩展名文件来说,文件中的HTML代码会被浏览器执行。

测试二

那么,对于文件内容为php代码的未知扩展名文件来说,这些php代码会被解析吗?

来看测试结果:

 

 

可以看到,这里包含php代码的未知扩展名的文件被当作txt文档处理了。

但是,如果将文件名改为f4ck.php.xxx,那么就会被以module方式运行php的apache解析,为什么?

因为Apache认为一个文件可以拥有多个扩展名,哪怕没有文件名,也可以拥有多个扩展名。Apache认为应该从右到左开始判断解析方法的。如果最右侧的扩展名为不可识别的,就继续往左判断,直到判断到文件名为止。

官方解释见:http://httpd.apache.org/docs/current/mod/directive-dict.html,搜索“extension”即可看到。

摘录官方解释:

extension

In general, this is the part of the filename which follows the last dot. However, Apache recognizes multiple filename extensions, so if a filename contains more than one dot, each dot-separated part of the filename following the first dot is an extension. For example, the filename file.html.en contains two extensions: .html and .en. For Apache directives, you may specify extensions with or without the leading dot. In addition, extensions are not case sensitive.

那么,对于“测试一”和“测试二”来说,apache发现这个文件的扩展名是未知的,那么它会先看在扩展名之前是否有其他的可识别的扩展名,但是该案例中的完整文件名为“f4ck.xxxx”,在扩展名“xxxx”之前没有其他的可识别扩展名了,所以apache就按照httpd.conf中参数DefaultType的值来决定该文件的处理方式,即作为txt文档处理。

同样的,对于“结果一”和“结果二”来说,也是按照这样的方式来逐步确定未知扩展名文件的解析方式,首先apache发现这个文件的扩展名是未知的,那么它会先看在扩展名之前是否有其他的可识别的扩展名,在该案例中的完整文件名为“f4ck.php.x”,那么apache就发现在未知扩展名“x”之前有一个可识别的扩展名是“php”,那么apache就会认为这是一个php文件,就会把这个文件按照解析php文件的方式来解析。

说到这里,就不得不提一下,apache对于扩展名的定义都是写在conf/mime.types文件中的,看一下图:

 

 

文件mime.types定义了apache处理不同扩展名文件的方法,文件httpd.conf中参数DefaultType的值定义了apache处理未知扩展名文件的方法。

另外,文件httpd.conf中语句块“”中可以用“AddType”语句来定义apache解析不同扩展名文件的方法。

处理和解析是完全不同的概念,这就好像对于apache+php结合的网站来说,apache是应用服务器,php是中间件,apache只负责接收/响应HTTP请求,php却负责.php文件的解释执行。Php将.php文件解释执行完毕后,将生成的HTML代码发送给apache,再由apache将HTML代码发送给客户端。

另外说一下,扩展名rar并没有在文件mime.types中出现,所以如果遇到可以上传rar文件且与php的结合方式为module方式的apache,则可以直接上传类似“f4ck.php.rar”的文件来获得webshell。

解决方案一

在httpd.conf或httpd-vhosts.conf中加入以下语句,从而禁止文件名格式为*.php.*的访问权限:

<FilesMatch ".(php.|php3.|php4.|php5.)">
Order Deny,Allow
Deny from all
</FilesMatch>

解决方案二

如果需要保留文件名,可以修改程序源代码,替换上传文件名中的“.”为“_”:

$filename = str_replace('.', '_', $filename);

如果不需要保留文件名,可以修改程序源代码,将上传文件名重命名为时间戳+随机数的格式。

总结:网上说的“低版本的apache存在未知扩展名解析漏洞”的说法是错误的,正确的说法应该是使用module模式与php结合的所有版本apache存在未知扩展名解析漏洞,使用fastcig模式与php结合的所有版本apache不存在此漏洞。并且,想利用此漏洞必须保证文件扩展名中至少带有一个“.php”,否则将默认被作为txt/html文档处理。

小编之前也听到一个观点是:低版本的apache的解析才存在这个问题,但实际上这个解析的问题跟apache版本高低无关,与处理拓展名的方法有关。就像iis7的解析漏洞与iis7本身没有关系,而是跟Fast-CGI有关系。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/150868.html<

(0)
运维的头像运维
上一篇2025-03-13 06:53
下一篇 2025-03-13 06:55

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注