Apache 披露了一个在 Apache HTTP Server 2.4.49 上引入的漏洞,称为 CVE-2021-41773。同时发布了2.4.50更新,修复了这个漏洞。该漏洞允许攻击者绕过路径遍历保护,使用编码并读取网络服务器文件系统上的任意文件。运行此版本 Apache 的 Linux 和 Windows 服务器都受到影响。此漏洞是在 2.4.49 中引入的,该补丁旨在提高 URL 验证的性能。可以通过对“.”进行编码来绕过新的验证方法。如果 Apache 网络服务器配置未设置为“要求全部拒绝”,则漏洞利用相对简单。通过对这些字符进行编码并使用有效负载修改 URL,可以实现经典的路径遍历。

1.搭建靶场

docker pull vulfocus/apache-cve_2021_42013:lastest

docker run -d -p 8090:80 vulfocus/apache-cve_2021_42013:lastest

ps.换个空闲的端口。

2.打开靶场,抓包

127.0.0.1:8090

抓包

3. 绕过检测进行路径穿越

因为该漏洞是在CVE-2021-41773修复的基础上,还会造成路径穿越。

让我们了解一下CVE-2021-41773是什么吧。

CVE-2021-41773:

Apache HTTP Server 2.4.49版本使用的ap_normalize_path函数在对路径参数进行规范化时会先进行url解码,然后判断是否存在../的路径穿越符。

也就是说这个函数会检测路径中是否存在%,存在再检测其紧跟的两个字符16进制字符,是的话。会对其进行url解码,如:%2e  ->.    ,转换完之后再检测是不是存在../

但是奇怪的是%2e./能检测出来,但是.%2e/不行。原来它是检测.后是不是跟着./

所以用.%2e/或者%2e%2e就能绕过这个函数触发路径穿越。

CVE-2021-42013:

这时修复了对.%2e的检测。

在处理外部HTTP请求时,会调用 ap_process_request_internal函数对url路径进行处理,在该函数中,首先会调用ap_normalize_path函数进行一次url解码,之后会调用ap_unescape_url函数进行二次解码。

这时候我们只需要将../url编码两次就行了。

ap_normalize_path函数调用栈如下,在处理前path参数为/icons/.%%32e/.%%32e/.%%32e/.%%32e/etc/passwd

经过ap_normalize_path函数处理后path参数变成/icons/.%2e/.%2e/.%2e/.%2e/etc/passwd

经过unescape_url函数处理后,可以看到此时的url字符串内容变成/icons/../../../../etc/passwd

补充一下:对于没有进⾏安全配置的Apache服务器,默认情况可以⽤xxx.com/icons/的⽅式打开Apache⽬录下的icons⽂件夹,并且会罗列出⽂件列表。

2.4.51版本针对该漏洞进行了多处修改,最核心的一处修改是在ap_normalize_path函数中加强了对url编码的校验,如果检测到存在非标准url编码(%+两个十六进制字符)的情况,就返回编码错误,从根本上杜绝了多重编码可能导致的绕过。

我们来看看吧。

GET  /icons/../../../../../../etc/passwd HTTP/1.1

编码两次之后

/icons/.%%32e/.%%32e/.%%32e/.%%32e/.%%32e/.%%32e/.%%32e/etc/passwd

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐