Apache_HTTP_Server 2.4.49_路径穿越漏洞
Apache HTTP Server 2.4.49_路径穿越漏洞
Apache Http Server 简介
Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源码的网页服务器软件,可以在大多数电脑操作系统中运行。由于其跨平台和安全性,被广泛使用,是最流行的 Web 服务器软件之一。它快速、可靠并且可通过简单的 API 扩展,将 Perl / Python 等解释器编译到服务器中。
Httpd(即 HTTP Daemon ,超文本传输协议守护程序的简称)是一款运行于网页服务器后台,等待传入服务器请求的软件。HTTP 守护程序能自动回应服务器请求,并使用 HTTP 协议传送超文本及多媒体内容。
CVE-2021-41773
CVE-2021-41773 是一个影响 Apache HTTP Server (httpd) 的安全漏洞,影响版本为 2.4.49 版本。它是一个路径遍历漏洞,如果文档根目录以外的文件不受 require all denied
保护,则攻击者可以访问这些文件。
同时,若 Apache HTTPd 开启了 cgi 支持,攻击者可构造恶意请求执行命令,控制服务器。
满足下面两个条件的Apache服务器将会受到影响:
- 版本等于2.4.49
- 穿越的目录允许被访问,比如配置了
<Directory />Require all granted</Directory>
。(默认情况下是不允许的)
漏洞影响
- Apache Http Server 2.4.49 引入。
- Apache Http Server 2.4.50 未完全修复(CVE-2021-42013)。
Apache Http Server 路径穿越漏洞原理
在 Apache HTTP Server 2.4.49 版本中,在对用户发送的请求中的路径参数进行规范化时,其使用的 ap_normalize_path
函数会对路径参数先进行 url 解码,然后判断是否存在 ../
的路径穿越符。
当检测到路径中存在 %
字符时,若其紧跟的两个字符是十六进制字符,则程序会对其进行 url 解码,将其转换成标准字符,如 %2e
会被转换为 .
。若转换后的标准字符为 .
,此时程序会立即判断其后两字符是否为 ./
,从而判断是否存在未经允许的 ../
路径穿越行为。
如果路径中存在 %2e./
形式,程序就会检测到路径穿越符。然而,当出现 .%2e/
或 %2e%2e/
形式,程序就不会将其检测为路径穿越符。原因是遍历到第一个 .
字符时,程序检测到其后两字符为 %2
而不是 ./
,就不会将其判断为 ../
。因此,攻击者可以使用 .%2e/
或 %2e%2e/
绕过程序对路径穿越符的检测,从而读取位于 Apache 服务器 web 目录以外的其他文件,或者读取 web 目录中的脚本文件源码,或者在开启了 cgi 或 cgid 的服务器上执行任意命令。
环境搭建
直接使用了vulhub的镜像
1 |
|
默认界面
漏洞复现
文件读取
windows构造数据包,这里用curl(注意其中的/icons/必须是一个存在且可访问的目录)
1 |
|
命令执行
1 |
|
Apache Http Server 路径穿越漏洞修复
升级到 Apache HTTP Server 2.4.51 及以上版本。